<?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>48966</bug_id>
          
          <creation_ts>2010-11-03 18:53:59 -0700</creation_ts>
          <short_desc>Script runs more than once after a clone</short_desc>
          <delta_ts>2010-11-22 14:23:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49364</dependson>
          <blocked>48717</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jparent</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>304406</commentid>
    <comment_count>0</comment_count>
      <attachid>72894</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-03 18:53:59 -0700</bug_when>
    <thetext>Created attachment 72894
demo

WebKit runs script more than once when the script element is moved by editing commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304412</commentid>
    <comment_count>1</comment_count>
      <attachid>72895</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-03 18:57:04 -0700</bug_when>
    <thetext>Created attachment 72895
work in progress

I&apos;ve attempted to override cloneElementWithoutChildren for script element to copy m_data.m_evaluated but it seems like we&apos;re not even setting the flag.  With the following stack trace, what I see is that none of m_data&apos;s flags are set true:

#0	0x1019745ff in WebCore::HTMLScriptElement::cloneElementWithoutChildren at HTMLScriptElement.cpp:200
#1	0x1017f4930 in WebCore::Element::cloneElementWithChildren at Element.cpp:155
#2	0x1017f49a8 in WebCore::Element::cloneNode at Element.cpp:150
#3	0x101591ebd in WebCore::CompositeEditCommand::cloneParagraphUnderNewElement at CompositeEditCommand.cpp:784
#4	0x101592675 in WebCore::CompositeEditCommand::moveParagraphWithClones at CompositeEditCommand.cpp:847
#5	0x1019d1060 in WebCore::IndentOutdentCommand::indentIntoBlockquote at IndentOutdentCommand.cpp:114
#6	0x1019d138e in WebCore::IndentOutdentCommand::formatRange at IndentOutdentCommand.cpp:230
#7	0x1014e9d3b in WebCore::ApplyBlockElementCommand::formatSelection at ApplyBlockElementCommand.cpp:127
#8	0x1019d0e4f in WebCore::IndentOutdentCommand::formatSelection at IndentOutdentCommand.cpp:220
#9	0x1014ea310 in WebCore::ApplyBlockElementCommand::doApply at ApplyBlockElementCommand.cpp:85
#10	0x1017d56fb in WebCore::EditCommand::apply at EditCommand.cpp:91
#11	0x1017d5776 in WebCore::applyCommand at EditCommand.cpp:212
#12	0x1017e87b5 in WebCore::executeIndent at EditorCommand.cpp:473
#13	0x1017e7512 in WebCore::Editor::Command::execute at EditorCommand.cpp:1610
#14	0x1016d3501 in WebCore::Document::execCommand at Document.cpp:3924
#15	0x101aedebf in WebCore::jsDocumentPrototypeFunctionExecCommand at JSDocument.cpp:2163
#16	0x2d6890c001b8 in ??
#17	0x1007ea939 in JSC::JITCode::execute at JITCode.h:77
#18	0x1007e69c4 in JSC::Interpreter::execute at Interpreter.cpp:759
#19	0x1007b6354 in JSC::evaluate at Completion.cpp:62
#20	0x101bd25d4 in WebCore::JSMainThreadExecState::evaluate at JSMainThreadExecState.h:54
#21	0x101f992e6 in WebCore::ScriptController::evaluateInWorld at ScriptController.cpp:148
#22	0x101f994a0 in WebCore::ScriptController::evaluate at ScriptController.cpp:171
#23	0x101f9ee1e in WebCore::ScriptController::executeScript at ScriptControllerBase.cpp:60
#24	0x101975c37 in WebCore::HTMLScriptRunner::executeScript at HTMLScriptRunner.cpp:156
#25	0x101975ec8 in WebCore::HTMLScriptRunner::runScript at HTMLScriptRunner.cpp:321
#26	0x1019766c9 in WebCore::HTMLScriptRunner::execute at HTMLScriptRunner.cpp:181
#27	0x101921881 in WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder at HTMLDocumentParser.cpp:199
#28	0x101921dab in WebCore::HTMLDocumentParser::pumpTokenizer at HTMLDocumentParser.cpp:235
#29	0x101922074 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible at HTMLDocumentParser.cpp:169
#30	0x101922516 in WebCore::HTMLDocumentParser::append at HTMLDocumentParser.cpp:311
#31	0x1016b6336 in WebCore::DecodedDataDocumentParser::appendBytes at DecodedDataDocumentParser.cpp:54
#32	0x1017163a6 in WebCore::DocumentWriter::addData at DocumentWriter.cpp:200
#33	0x101716428 in WebCore::DocumentWriter::endIfNotLoadingMainResource at DocumentWriter.cpp:220
#34	0x101716471 in WebCore::DocumentWriter::end at DocumentWriter.cpp:206
#35	0x101706e84 in WebCore::DocumentLoader::finishedLoading at DocumentLoader.cpp:276
#36	0x101869ea5 in WebCore::FrameLoader::finishedLoading at FrameLoader.cpp:2165
#37	0x101d6e66c in WebCore::MainResourceLoader::didFinishLoading at MainResourceLoader.cpp:456
#38	0x101f7a448 in WebCore::ResourceLoader::didFinishLoading at ResourceLoader.cpp:421</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304415</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-03 18:59:17 -0700</bug_when>
    <thetext>The way I looked at the code briefly, it seems like we need to set some flags true in runScriptsForPausedTreeBuilder or HTMLScriptRunner::execute but I don&apos;t know anything about these two functions so it&apos;ll be great if someone could tell me which one I should be fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304418</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-03 19:02:58 -0700</bug_when>
    <thetext>Just to clarify, Firefox doesn&apos;t run the script twice and passes my test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304420</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-03 19:06:48 -0700</bug_when>
    <thetext>Script elements in conteneditable seem just wrong, and manipulating them with execCommand even more so. San we perhaps just bail out in such cases? That seems much safer than playing whack-a-mole with scripts, frames, plug-ins etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307504</commentid>
    <comment_count>5</comment_count>
      <attachid>72895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-10 12:58:34 -0800</bug_when>
    <thetext>Comment on attachment 72895
work in progress

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

&gt; WebCore/dom/Element.h:378
&gt;      virtual PassRefPtr&lt;Node&gt; cloneNode(bool deep);

What&apos;s proper behavior for javascript scriptElement.cloneNode()?  If you insert the clone does it get evaluated again?  What if it&apos;s mid-evaluation when it&apos;s cloned?

&gt; WebCore/dom/ScriptElement.h:71
&gt; +    ScriptElementData(ScriptElement*, Element*, bool evaluated);

Seems this should simply default to false.  Also an Enum may be better than a bool here.

&gt; WebCore/html/HTMLScriptElement.cpp:198
&gt; +PassRefPtr&lt;Element&gt; HTMLScriptElement::cloneElementWithoutChildren()

I don&apos;t understand the new funtion or it&apos;s name.  If the purpose is to clone respecting the evaluated bit, it seems like an odd name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307591</commentid>
    <comment_count>6</comment_count>
      <attachid>73546</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-10 15:08:34 -0800</bug_when>
    <thetext>Created attachment 73546
simpler demo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307633</commentid>
    <comment_count>7</comment_count>
      <attachid>73558</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-10 16:55:48 -0800</bug_when>
    <thetext>Created attachment 73558
work in progress 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307697</commentid>
    <comment_count>8</comment_count>
      <attachid>73572</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-10 19:37:02 -0800</bug_when>
    <thetext>Created attachment 73572
lacks SVG implementation and test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308030</commentid>
    <comment_count>9</comment_count>
      <attachid>73631</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 11:48:51 -0800</bug_when>
    <thetext>Created attachment 73631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308043</commentid>
    <comment_count>10</comment_count>
      <attachid>73631</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 12:02:35 -0800</bug_when>
    <thetext>Comment on attachment 73631
Patch

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

Looks like you are on the right track, but I’d like you to consider some changes.

&gt; WebCore/dom/Element.cpp:160
&gt; +// This function needs to be synced with HTMLScriptElement and SVGScriptElement

It’s not obvious to me what “synced with” means here. Do we really need a copy of the function? It’s really unfortunate to have a copied and pasted copy of this function body. Can’t we call the base class version of  cloneElementWithoutChildren and then set the evaluated flag after the fact?

Or, since we have to add virtual function overhead, how about making a new small function that covers just the part of the operation that has to be different, rather than making cloneElementWithoutChildren itself virtual? That would resolve the issue above too.

&gt; WebCore/dom/ScriptElement.cpp:369
&gt; +    ASSERT(element);
&gt; +    if (element-&gt;isHTMLElement() &amp;&amp; element-&gt;hasTagName(HTMLNames::scriptTag))
&gt; +        static_cast&lt;HTMLScriptElement*&gt;(element)-&gt;m_data.executeScript(sourceCode);
&gt; +#if ENABLE(SVG)
&gt; +    else if (element-&gt;isSVGElement() &amp;&amp; element-&gt;hasTagName(SVGNames::scriptTag))
&gt; +        static_cast&lt;SVGScriptElement*&gt;(element)-&gt;m_data.executeScript(sourceCode);
&gt; +#endif

The isHTMLElement and isSVGElement checks here are not needed for correctness. Are you doing them for performance reasons?

Can we do this in a way that uses a virtual function in ScriptElement or perhaps even in Element for this rather than hasTagName checks for the two specific derived classes? It’s not good encapsulation for ScriptElement to have to know about all classes derived from it, so if we can avoid it that would be better.

&gt; WebCore/dom/ScriptElement.h:81
&gt; +    bool isEvaluated() const { return m_evaluated; }

Might be worthwhile to rename the data member too to add the “is”

&gt; WebCore/dom/ScriptElement.h:91
&gt; +    void executeScript(const ScriptSourceCode&amp; sourceCode);

No need for the argument name here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308055</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 12:26:15 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #10)
&gt; &gt; WebCore/dom/Element.cpp:160
&gt; &gt; +// This function needs to be synced with HTMLScriptElement and SVGScriptElement
&gt; 
&gt; It’s not obvious to me what “synced with” means here. Do we really need a copy of the function? It’s really unfortunate to have a copied and pasted copy of this function body. Can’t we call the base class version of  cloneElementWithoutChildren and then set the evaluated flag after the fact?

Right, it&apos;s very unfortunate.  I considered setting the flag afterwards but then I have to add a public function that sets evaluated flag to ScriptElementData but that&apos;ll expose internals of ScriptElementData to its users.

&gt; Or, since we have to add virtual function overhead, how about making a new small function that covers just the part of the operation that has to be different, rather than making cloneElementWithoutChildren itself virtual? That would resolve the issue above too.

I also considered adding a helper function that just copies attributes but that doesn&apos;t really reduce the amount of duplicated code either (at most one statement).

An alternatie approach I have in my mind right now is to add a virtual cloneElementWithoutAttributesAndChildren and call it inElement::cloneElementWithoutChildren.  This adds a virtual call but we can keep Element::cloneElementWithoutChildren non-virtual.  I&apos;ll try this &amp; see what happens.

&gt; &gt; WebCore/dom/ScriptElement.cpp:369
&gt; &gt; +    ASSERT(element);
&gt; &gt; +    if (element-&gt;isHTMLElement() &amp;&amp; element-&gt;hasTagName(HTMLNames::scriptTag))
&gt; &gt; +        static_cast&lt;HTMLScriptElement*&gt;(element)-&gt;m_data.executeScript(sourceCode);
&gt; &gt; +#if ENABLE(SVG)
&gt; &gt; +    else if (element-&gt;isSVGElement() &amp;&amp; element-&gt;hasTagName(SVGNames::scriptTag))
&gt; &gt; +        static_cast&lt;SVGScriptElement*&gt;(element)-&gt;m_data.executeScript(sourceCode);
&gt; &gt; +#endif
&gt; 
&gt; The isHTMLElement and isSVGElement checks here are not needed for correctness. Are you doing them for performance reasons?

No, but I need to somehow access m_data of HTMLScriptElement and SVGScriptElement.

&gt; Can we do this in a way that uses a virtual function in ScriptElement or perhaps even in Element for this rather than hasTagName checks for the two specific derived classes? It’s not good encapsulation for ScriptElement to have to know about all classes derived from it, so if we can avoid it that would be better.

I can move all of this to Element but we already have toScriptElement in ScriptElement.cpp, which has very similar checks so I&apos;m not sure moving it to Element is a good idea. The problem with moving it to HTMLScriptElement or SVGScriptElement is that we still do need to cast them in HTMLScriptRunner and XMLParser in order to call executeScript. The only way to avoid this kind of check is if we added a virtual function to Element, and overrode it in HTMLScriptElement and SVGScriptElement.

The problem comes down to the fact ScriptElement does not inherit from Element and ScriptElementData&apos;s constructor requires a pointer to Element*, which means I can&apos;t move m_data to ScriptElement.  This is very similar situation to what we had with setSelectionRange in RenderTextControl, and it makes sense to put in ScriptElement.cpp if we were to follow the same convention.

&gt; &gt; WebCore/dom/ScriptElement.h:81
&gt; &gt; +    bool isEvaluated() const { return m_evaluated; }
&gt; 
&gt; Might be worthwhile to rename the data member too to add the “is”

Will do.

&gt; &gt; WebCore/dom/ScriptElement.h:91
&gt; &gt; +    void executeScript(const ScriptSourceCode&amp; sourceCode);
&gt; 
&gt; No need for the argument name here.

Oops.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308059</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 12:34:11 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; An alternatie approach I have in my mind right now is to add a virtual cloneElementWithoutAttributesAndChildren and call it inElement::cloneElementWithoutChildren.  This adds a virtual call but we can keep Element::cloneElementWithoutChildren non-virtual. I&apos;ll try this &amp; see what happens.

Seems like a good idea. Lets keep that virtual function as small as possible. Perhaps even less than cloneElementWithoutAttributesAndChildren.

&gt; &gt; The isHTMLElement and isSVGElement checks here are not needed for correctness. Are you doing them for performance reasons?
&gt; 
&gt; No, but I need to somehow access m_data of HTMLScriptElement and SVGScriptElement.

Then you should remove the isHTMLElement and isSVGElement parts here. The hasTagName checks are enough alone.

&gt; &gt; Can we do this in a way that uses a virtual function in ScriptElement or perhaps even in Element for this rather than hasTagName checks for the two specific derived classes? It’s not good encapsulation for ScriptElement to have to know about all classes derived from it, so if we can avoid it that would be better.
&gt; 
&gt; I can move all of this to Element but we already have toScriptElement in ScriptElement.cpp, which has very similar checks so I&apos;m not sure moving it to Element is a good idea. The problem with moving it to HTMLScriptElement or SVGScriptElement is that we still do need to cast them in HTMLScriptRunner and XMLParser in order to call executeScript. The only way to avoid this kind of check is if we added a virtual function to Element, and overrode it in HTMLScriptElement and SVGScriptElement.

I’d like to see this list of classes concentrated as much as possible in one place. I’d like to see an isScriptElement function, whether Element member function or free function, then toScriptElement, then the rest be done with ScriptElement virtual functions.

I’d like to avoid writing functions one at a time that have separate branches for the two types of script element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308077</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 12:56:07 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I’d like to see this list of classes concentrated as much as possible in one place. I’d like to see an isScriptElement function, whether Element member function or free function, then toScriptElement, then the rest be done with ScriptElement virtual functions.
&gt; 
&gt; I’d like to avoid writing functions one at a time that have separate branches for the two types of script element.

The problem is that ScriptElement does have access to ScriptElementData, and HTMLScriptElement/SVGScriptElement separately has m_data.  So we&apos;ll end up doing that branch &amp; cast in ScriptElement later anyways regardless of adding a public accessor to HTMLScriptElement/SVGScriptElement or making ScriptElement a friend of them.  And I think adding executeScript to Element is rather odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308084</commentid>
    <comment_count>14</comment_count>
      <attachid>73641</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 13:09:08 -0800</bug_when>
    <thetext>Created attachment 73641
Fixed per Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308087</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 13:10:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; An alternatie approach I have in my mind right now is to add a virtual cloneElementWithoutAttributesAndChildren and call it inElement::cloneElementWithoutChildren.  This adds a virtual call but we can keep Element::cloneElementWithoutChildren non-virtual. I&apos;ll try this &amp; see what happens.
&gt; 
&gt; Seems like a good idea. Lets keep that virtual function as small as possible. Perhaps even less than cloneElementWithoutAttributesAndChildren.

This was indeed a good idea.  Each function is just one line now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308098</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 13:25:06 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; The problem is that ScriptElement does have access to ScriptElementData, and HTMLScriptElement/SVGScriptElement separately has m_data.  So we&apos;ll end up doing that branch &amp; cast in ScriptElement later anyways regardless of adding a public accessor to HTMLScriptElement/SVGScriptElement or making ScriptElement a friend of them.  And I think adding executeScript to Element is rather odd.

But ScriptElement can have a virtual function that does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308140</commentid>
    <comment_count>17</comment_count>
      <attachid>73659</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 14:14:23 -0800</bug_when>
    <thetext>Created attachment 73659
Fixed more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308141</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 14:14:37 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; The problem is that ScriptElement does have access to ScriptElementData, and HTMLScriptElement/SVGScriptElement separately has m_data.  So we&apos;ll end up doing that branch &amp; cast in ScriptElement later anyways regardless of adding a public accessor to HTMLScriptElement/SVGScriptElement or making ScriptElement a friend of them.  And I think adding executeScript to Element is rather odd.
&gt; 
&gt; But ScriptElement can have a virtual function that does this.

Ah, I finally understand what you meant.  Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308150</commentid>
    <comment_count>19</comment_count>
      <attachid>73659</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 14:25:02 -0800</bug_when>
    <thetext>Comment on attachment 73659
Fixed more

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

&gt; WebCore/dom/Element.cpp:177
&gt; +    // This will catch HTML elements in the wrong namespace that are not correctly copied.
&gt; +    // This is a sanity check as HTML overloads some of the DOM methods.
&gt; +    ASSERT(isHTMLElement() == clone-&gt;isHTMLElement());

I think it would be better to leave the assertion behind in the non-virtual function rather than moving it into the virtual function.

&gt; WebCore/dom/Element.h:202
&gt; +    virtual PassRefPtr&lt;Element&gt; cloneElementWithoutAttributesAndChildren() const;

I think this function should be private. Nobody needs to call it except cloneElementWithoutChildren.

&gt; WebCore/html/HTMLScriptElement.h:75
&gt; +    void executeScript(const ScriptSourceCode&amp; sourceCode);

No need to give the argument a name here.

&gt; WebCore/html/parser/HTMLScriptRunner.cpp:138
&gt; +    ScriptElement* scriptElement = toScriptElement(element.get());
&gt; +    if (scriptElement) {

Could put this declaration inside the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308188</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 15:03:06 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; WebCore/dom/Element.cpp:177
&gt; &gt; +    // This will catch HTML elements in the wrong namespace that are not correctly copied.
&gt; &gt; +    // This is a sanity check as HTML overloads some of the DOM methods.
&gt; &gt; +    ASSERT(isHTMLElement() == clone-&gt;isHTMLElement());
&gt; 
&gt; I think it would be better to leave the assertion behind in the non-virtual function rather than moving it into the virtual function.

Will do.

&gt; &gt; WebCore/dom/Element.h:202
&gt; &gt; +    virtual PassRefPtr&lt;Element&gt; cloneElementWithoutAttributesAndChildren() const;
&gt; 
&gt; I think this function should be private. Nobody needs to call it except cloneElementWithoutChildren.

Will do.

&gt; &gt; WebCore/html/HTMLScriptElement.h:75
&gt; &gt; +    void executeScript(const ScriptSourceCode&amp; sourceCode);
&gt; 
&gt; No need to give the argument a name here.

Will fix.

&gt; &gt; WebCore/html/parser/HTMLScriptRunner.cpp:138
&gt; &gt; +    ScriptElement* scriptElement = toScriptElement(element.get());
&gt; &gt; +    if (scriptElement) {
&gt; 
&gt; Could put this declaration inside the if.

I prefer to put it in a separate line.  Do you have a strong preference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308255</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 16:30:36 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; &gt; WebCore/html/parser/HTMLScriptRunner.cpp:138
&gt; &gt; &gt; +    ScriptElement* scriptElement = toScriptElement(element.get());
&gt; &gt; &gt; +    if (scriptElement) {
&gt; &gt; 
&gt; &gt; Could put this declaration inside the if.
&gt; 
&gt; I prefer to put it in a separate line.  Do you have a strong preference?

When a definition can go inside an if I think it’s good to scope it only to the block of the if. It’s a moderately strong preference. Often, our use of early return precludes this idiom.

I think you should “develop a taste” for this, because it’s great to scope the variable and have it be a compile error to use it outside the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308290</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 17:29:08 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; When a definition can go inside an if I think it’s good to scope it only to the block of the if. It’s a moderately strong preference. Often, our use of early return precludes this idiom.

Ok.  Will do.  Maybe we should consider adding this to the style guideline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308293</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 17:30:29 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Maybe we should consider adding this to the style guideline?

Sure, I think that’s worth considering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308298</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 17:34:00 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Sure, I think that’s worth considering.

Would you mind posting it on webkit-dev?  I think scoping tightly as possible makes a lot of sense but I don&apos;t know enough about the existing code base to define a syntactical rule myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308409</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 23:50:17 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/71895.  But the SVG tests fail on qt platforms because qt has a separate XML parser.  We need to fix qt&apos;s parser as well.  I&apos;ll disable the tests on qt platforms for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308411</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-11 23:51:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/71895 might have broken Qt Linux Release
The following tests are not passing:
svg/dom/SVGScriptElement/script-clone-rerun-self.svg
svg/dom/SVGScriptElement/script-clone-rerun.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308419</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-12 00:12:18 -0800</bug_when>
    <thetext>The follow up bug for the qt platform is filed as https://bugs.webkit.org/show_bug.cgi?id=49429.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309305</commentid>
    <comment_count>28</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-11-15 09:06:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/8626165&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>72894</attachid>
            <date>2010-11-03 18:53:59 -0700</date>
            <delta_ts>2010-11-10 15:08:34 -0800</delta_ts>
            <desc>demo</desc>
            <filename>script-rerun.html</filename>
            <type>text/html</type>
            <size>500</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFPgo8aHRtbD4KPGhlYWQ+CjxzY3JpcHQ+IHZhciBpID0gMDsgPC9zY3JpcHQ+Cjwv
aGVhZD4KPGJvZHk+CjxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT48c3Bhbj5oZWxsbyA8
c2NyaXB0PiBpKysgPC9zY3JpcHQ+IHdvcmxkPC9zcGFuPjwvZGl2Pgo8c2NyaXB0PgoKd2luZG93
LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0ZXN0JykpOwpkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5kZW50JywgZmFsc2UsIG51bGwpOwpy
ZXN1bHQgPSAnUEFTUyc7CmlmIChpID09IDIpCiAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4g
dHdpY2UnOwplbHNlIGlmIChpID4gMikKICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiAnICsg
aSArICcgdGltZXMnOwpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHJlc3VsdCkpOwoKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72895</attachid>
            <date>2010-11-03 18:57:04 -0700</date>
            <delta_ts>2010-11-10 16:55:48 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip48966</filename>
            <type>text/plain</type>
            <size>7354</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTI4OCkKKysrIFdlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTMgKzEzMCwxMyBAQAog
fQogCiAvLyBTY3JpcHRFbGVtZW50RGF0YQotU2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1l
bnREYXRhKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCitT
Y3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCogc2NyaXB0
RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBldmFsdWF0ZWQpCiAgICAgOiBtX3Njcmlw
dEVsZW1lbnQoc2NyaXB0RWxlbWVudCkKICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwg
bV9jYWNoZWRTY3JpcHQoMCkKICAgICAsIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQogICAgICwg
bV9yZXF1ZXN0ZWQoZmFsc2UpCi0gICAgLCBtX2V2YWx1YXRlZChmYWxzZSkKKyAgICAsIG1fZXZh
bHVhdGVkKGV2YWx1YXRlZCkKICAgICAsIG1fZmlyZWRMb2FkKGZhbHNlKQogewogICAgIEFTU0VS
VChtX3NjcmlwdEVsZW1lbnQpOwpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDcxMjg4KQorKysgV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQAog
ICAgIHJldHVybiBjbG9uZS5yZWxlYXNlKCk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMg
dG8gYmUgc3luY2VkIHdpdGggSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRD
aGlsZHJlbgogUGFzc1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0
Q2hpbGRyZW4oKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGRvY3VtZW50KCktPmNy
ZWF0ZUVsZW1lbnQodGFnUU5hbWUoKSwgZmFsc2UpOwpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gNzEyODgp
CisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgs
NyBAQAogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAKICAgICBQYXNzUmVm
UHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbigpOwotICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwogCiAgICAgdm9p
ZCBub3JtYWxpemVBdHRyaWJ1dGVzKCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lUHJlc2VydmluZ0Nh
c2UoKSBjb25zdDsKQEAgLTM3NCw4ICszNzQsNyBAQAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2aXJ0dWFsTmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbmFtZXNwYWNlVVJJ
KCk7IH0KICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiB2aXJ0dWFsQ29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pIHsgcmV0dXJuIGNvbXB1dGVk
U3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7IH0KICAgICAKLSAgICAvLyBjbG9uZU5vZGUg
aXMgcHJpdmF0ZSBzbyB0aGF0IG5vbi12aXJ0dWFsIGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbiBh
bmQgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCi0gICAgLy8gYXJlIHVzZWQgaW5zdGVhZC4K
KyAgICAvLyBjbG9uZU5vZGUgaXMgcHJpdmF0ZSBzbyB0aGF0IGNsb25lRWxlbWVudFdpdGhDaGls
ZHJlbiBhbmQgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuIGFyZSB1c2VkIGluc3RlYWQuCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogCiAgICAg
UXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA3
MTI4OCkKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNyArNjgsNyBAQAogLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rp
b25zIGluIFNjcmlwdEVsZW1lbnQKIGNsYXNzIFNjcmlwdEVsZW1lbnREYXRhIDogcHJpdmF0ZSBD
YWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0RWxlbWVudERhdGEoU2Ny
aXB0RWxlbWVudCosIEVsZW1lbnQqKTsKKyAgICBTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVt
ZW50KiwgRWxlbWVudCosIGJvb2wgZXZhbHVhdGVkKTsKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVt
ZW50RGF0YSgpOwogCiAgICAgYm9vbCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKQEAgLTc4
LDYgKzc4LDcgQEAKICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0OwogICAgIGJvb2wg
aXNBc3luY2hyb25vdXMoKSBjb25zdDsKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdDsKKyAg
ICBib29sIGlzRXZhbHVhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsdWF0ZWQ7IH0KIAogICAg
IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAgICBib29s
IGNyZWF0ZWRCeVBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3JlYXRlZEJ5UGFyc2VyOyB9Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzEyODgpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QAogCiBpbmxpbmUgU1ZHU2NyaXB0RWxlbWVudDo6U1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQogICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZGF0YSh0
aGlzLCB0aGlzKQorICAgICwgbV9kYXRhKHRoaXMsIHRoaXMsIGZhbHNlKQogewogICAgIG1fZGF0
YS5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzEyODgpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFNjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6SFRN
TFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK2lubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6
SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBldmFsdWF0ZWQpCiAgICAgOiBI
VE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZGF0YSh0aGlzLCB0aGlzKQor
ICAgICwgbV9kYXRhKHRoaXMsIHRoaXMsIGV2YWx1YXRlZCkKIHsKICAgICBBU1NFUlQoaGFzVGFn
TmFtZShzY3JpcHRUYWcpKTsKICAgICBtX2RhdGEuc2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRC
eVBhcnNlcik7CkBAIC00NSw3ICs0NSw3IEBACiAKIFBhc3NSZWZQdHI8SFRNTFNjcmlwdEVsZW1l
bnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVh
dGVkQnlQYXJzZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIsIGZhbHNlKSk7CiB9CiAKIGJvb2wg
SFRNTFNjcmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QK
QEAgLTE5NCw0ICsxOTQsMTcgQEAKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKSk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rp
b24gbmVlZHMgdG8gYmUgc3luY2VkIHdpdGggRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENo
aWxkcmVuCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1l
bnRXaXRob3V0Q2hpbGRyZW4oKQoreworICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGFkb3B0
UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwg
bV9kYXRhLmlzRXZhbHVhdGVkKCkpKTsKKworICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZU1hcCA9IGF0dHJpYnV0ZXModHJ1ZSkpCisgICAgICAgIGNsb25lLT5hdHRyaWJ1dGVzKCktPnNl
dEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1hcCk7CisKKyAgICBjbG9uZS0+Y29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXModGhpcyk7CisKKyAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQorCit9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gNzEyODgpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQAogICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmhhdmVGaXJlZExvYWRFdmVudCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFNjcmlwdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIEhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCk7CiAKICAgICB2aXJ0dWFsIFN0
cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7CiAKQEAgLTcxLDYgKzcxLDggQEAKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hF
cnJvckV2ZW50KCk7CiAKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhv
dXRDaGlsZHJlbigpOworCiAgICAgU2NyaXB0RWxlbWVudERhdGEgbV9kYXRhOwogfTsKIApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcx
Mjg4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIxMjcwLDcgKzIxMjcwLDcgQEAKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBF
Q0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2
N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8sCi0g
CQkJCTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTNGNkYxRUUxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxMzMwLDYgKzIxMzMwLDcgQEAKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAw
OEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29y
ZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOworCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJ
CQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIzODMyLDcgKzIzODMzLDcgQEAK
IAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8sCi0gCQkJCTkzRjZGMUVEMTI3RjcwQjEwMDU1
Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0Y2RjFF
RDEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>73546</attachid>
            <date>2010-11-10 15:08:34 -0800</date>
            <delta_ts>2010-11-10 15:08:34 -0800</delta_ts>
            <desc>simpler demo</desc>
            <filename>script-rerun.html</filename>
            <type>text/html</type>
            <size>616</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFPgo8aHRtbD4KPGhlYWQ+CjxzY3JpcHQ+IHZhciBpID0gMDsgPC9zY3JpcHQ+Cjwv
aGVhZD4KPGJvZHk+CjxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT48c3Bhbj5oZWxsbyA8
c2NyaXB0IGlkPSJzIj4gaSsrIDwvc2NyaXB0PiB3b3JsZDwvc3Bhbj48L2Rpdj4KPHNjcmlwdD4K
Ci8vd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXN0JykpOwovL2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbmRlbnQnLCBmYWxz
ZSwgbnVsbCk7CnZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKTsKcy5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHMpOwp0ZXN0LmFwcGVuZENoaWxkKHMuY2xvbmVOb2RlKHRydWUpKTsK
CnJlc3VsdCA9ICdQQVNTJzsKaWYgKGkgPT0gMikKICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJh
biB0d2ljZSc7CmVsc2UgaWYgKGkgPiAyKQogIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcg
KyBpICsgJyB0aW1lcyc7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUocmVzdWx0KSk7Cgo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73558</attachid>
            <date>2010-11-10 16:55:48 -0800</date>
            <delta_ts>2010-11-10 19:36:58 -0800</delta_ts>
            <desc>work in progress 2</desc>
            <filename>wip48966</filename>
            <type>text/plain</type>
            <size>11060</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTMgKzEzMCwxMyBAQAog
fQogCiAvLyBTY3JpcHRFbGVtZW50RGF0YQotU2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1l
bnREYXRhKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCitT
Y3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCogc2NyaXB0
RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBldmFsdWF0ZWQpCiAgICAgOiBtX3Njcmlw
dEVsZW1lbnQoc2NyaXB0RWxlbWVudCkKICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwg
bV9jYWNoZWRTY3JpcHQoMCkKICAgICAsIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQogICAgICwg
bV9yZXF1ZXN0ZWQoZmFsc2UpCi0gICAgLCBtX2V2YWx1YXRlZChmYWxzZSkKKyAgICAsIG1fZXZh
bHVhdGVkKGV2YWx1YXRlZCkKICAgICAsIG1fZmlyZWRMb2FkKGZhbHNlKQogewogICAgIEFTU0VS
VChtX3NjcmlwdEVsZW1lbnQpOwpAQCAtMjA1LDYgKzIwNSwyMSBAQAogICAgIH0KIH0KIAordm9p
ZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKQoreworICAgIGlmIChtX2V2YWx1YXRlZCB8fCBzb3VyY2VDb2RlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2V2YWx1YXRlZCA9IHRydWU7CisKKyAgICBmcmFtZS0+c2NyaXB0KCktPmV4
ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Cit9CisKIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OnN0
b3BMb2FkUmVxdWVzdCgpCiB7CiAgICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7CkluZGV4OiBXZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkocmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBACiAgICAgcmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKIH0K
IAorLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBzeW5jZWQgd2l0aCBIVE1MU2NyaXB0RWxl
bWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IEVs
ZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpCiB7CiAgICAgUmVmUHRyPEVsZW1l
bnQ+IGNsb25lID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdRTmFtZSgpLCBmYWxzZSk7
CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RWxlbWVudC5oCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5h
bWUoKSBjb25zdDsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aENo
aWxkcmVuKCk7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0Q2hp
bGRyZW4oKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0
aG91dENoaWxkcmVuKCk7CiAKICAgICB2b2lkIG5vcm1hbGl6ZUF0dHJpYnV0ZXMoKTsKICAgICBT
dHJpbmcgbm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpIGNvbnN0OwpAQCAtMzc0LDggKzM3NCw3IEBA
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1YWxOYW1lc3BhY2VVUkkoKSBj
b25zdCB7IHJldHVybiBuYW1lc3BhY2VVUkkoKTsgfQogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUq
IHZpcnR1YWxDb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIgPSBO
T1BTRVVETykgeyByZXR1cm4gY29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsg
fQogICAgIAotICAgIC8vIGNsb25lTm9kZSBpcyBwcml2YXRlIHNvIHRoYXQgbm9uLXZpcnR1YWwg
Y2xvbmVFbGVtZW50V2l0aENoaWxkcmVuIGFuZCBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4K
LSAgICAvLyBhcmUgdXNlZCBpbnN0ZWFkLgorICAgIC8vIGNsb25lTm9kZSBpcyBwcml2YXRlIHNv
IHRoYXQgY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuIGFuZCBjbG9uZUVsZW1lbnRXaXRob3V0Q2hp
bGRyZW4gYXJlIHVzZWQgaW5zdGVhZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xv
bmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKSW5kZXg6
IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDcxNzA5KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBACiAvLyBhbmQgcGFzcyBpdCB0
byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4gU2NyaXB0RWxlbWVudAogY2xhc3MgU2Ny
aXB0RWxlbWVudERhdGEgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICBTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVtZW50KiwgRWxlbWVudCopOworICAgIFNj
cmlwdEVsZW1lbnREYXRhKFNjcmlwdEVsZW1lbnQqLCBFbGVtZW50KiwgYm9vbCBldmFsdWF0ZWQp
OwogICAgIHZpcnR1YWwgflNjcmlwdEVsZW1lbnREYXRhKCk7CiAKICAgICBib29sIGlnbm9yZXNM
b2FkUmVxdWVzdCgpIGNvbnN0OwpAQCAtNzgsNiArNzgsNyBAQAogICAgIFN0cmluZyBzY3JpcHRD
aGFyc2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0OwogICAgIGJv
b2wgaXNEZWZlcnJlZCgpIGNvbnN0OworICAgIGJvb2wgaXNFdmFsdWF0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2V2YWx1YXRlZDsgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQogICAgIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKCkgY29uc3QgeyByZXR1
cm4gbV9jcmVhdGVkQnlQYXJzZXI7IH0KQEAgLTg3LDYgKzg4LDcgQEAKIAogICAgIHZvaWQgcmVx
dWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBldmFsdWF0ZVNj
cmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpOwogICAgIHZvaWQgc3RvcExvYWRSZXF1
ZXN0KCk7CiAKICAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2Ny
aXB0RWxlbWVudC5oCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIK
ICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzQxLDkgQEAKICAgICAgICAgU3Ry
aW5nIHR5cGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwog
CisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgSFRNTFNjcmlwdFJ1bm5lcgorICAgICAg
ICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkg
eyByZXR1cm4gbV9kYXRhLmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7IH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50
LmNwcAkocmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBpbmxpbmUgU1ZHU2NyaXB0RWxl
bWVudDo6U1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogU1ZHRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZGF0YSh0aGlzLCB0aGlzKQorICAgICwgbV9kYXRh
KHRoaXMsIHRoaXMsIGZhbHNlKQogewogICAgIG1fZGF0YS5zZXRDcmVhdGVkQnlQYXJzZXIoY3Jl
YXRlZEJ5UGFyc2VyKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkocmV2
aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLWlubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBh
cnNlcikKK2lubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRC
eVBhcnNlciwgYm9vbCBldmFsdWF0ZWQpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkKLSAgICAsIG1fZGF0YSh0aGlzLCB0aGlzKQorICAgICwgbV9kYXRhKHRoaXMsIHRoaXMs
IGV2YWx1YXRlZCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICBt
X2RhdGEuc2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CkBAIC00NSw3ICs0NSw3
IEBACiAKIFBhc3NSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IEhUTUxTY3JpcHRFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3Jp
cHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVh
dGVkQnlQYXJzZXIsIGZhbHNlKSk7CiB9CiAKIGJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6OmlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKQEAgLTE5NCw0ICsxOTQsMTcgQEAKICAg
ICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRy
dWUsIGZhbHNlKSk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2VkIHdp
dGggRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCitQYXNzUmVmUHRyPEVsZW1l
bnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKQorewor
ICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVu
dCh0YWdRTmFtZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwgbV9kYXRhLmlzRXZhbHVhdGVkKCkpKTsK
KworICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IGF0dHJpYnV0ZXModHJ1ZSkp
CisgICAgICAgIGNsb25lLT5hdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1h
cCk7CisKKyAgICBjbG9uZS0+Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXModGhpcyk7CisKKyAg
ICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQorCit9CkluZGV4OiBXZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuaAkocmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQAog
CiAgICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCk7CiAgICAgdm9pZCBleGVj
dXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYpOwotICAgIHZv
aWQgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJikgY29uc3Q7CisgICAgdm9p
ZCBleGVjdXRlU2NyaXB0KEVsZW1lbnQqLCBjb25zdCBTY3JpcHRTb3VyY2VDb2RlJikgY29uc3Q7
CiAgICAgYm9vbCBoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkgY29uc3Q7CiAgICAgYm9vbCBl
eGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAJKHJldmlzaW9uIDcxNzA5KQorKysgV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDE4IEBACiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1M
SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2Ny
aXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIklnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3Jl
bWVudGVyLmgiCiAjaW5jbHVkZSAiTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR05h
bWVzLmgiCisjaW5jbHVkZSAiU1ZHU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEzMywyNyArMTM5
LDI4IEBACiAgICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiAKICAg
ICAvLyBDbGVhciB0aGUgcGVuZGluZyBzY3JpcHQgYmVmb3JlIHBvc3NpYmxlIHJlbnRyYW5jeSBm
cm9tIGV4ZWN1dGVTY3JpcHQoKQotICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0g
cGVuZGluZ1NjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnQgPSBwZW5kaW5nU2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKTsKICAg
ICB7CiAgICAgICAgIE5lc3RpbmdMZXZlbEluY3JlbWVudGVyIG5lc3RpbmdMZXZlbEluY3JlbWVu
dGVyKG1fc2NyaXB0TmVzdGluZ0xldmVsKTsKICAgICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0
ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIo
bV9kb2N1bWVudCk7CiAgICAgICAgIGlmIChlcnJvck9jY3VycmVkKQotICAgICAgICAgICAgc2Ny
aXB0RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRFcnJvckV2ZW50KCkpOworICAg
ICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRFcnJvckV2ZW50KCkp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7
Ci0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExv
YWRFdmVudCgpKTsKKyAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoZWxlbWVudC5nZXQoKSwgc291
cmNlQ29kZSk7CisgICAgICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlw
dExvYWRFdmVudCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlQoIW1fc2NyaXB0TmVz
dGluZ0xldmVsKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0KGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0Cit2b2lkIEhUTUxTY3JpcHRS
dW5uZXI6OmV4ZWN1dGVTY3JpcHQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAg
QVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgIGlmICghbV9kb2N1bWVudC0+ZnJhbWUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpLT5l
eGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCisgICAgICAg
IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4oZWxlbWVudCktPmV4ZWN1dGVTY3JpcHQo
c291cmNlQ29kZSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChlbGVtZW50LT5pc1NW
R0VsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKQor
ICAgICAgICBzdGF0aWNfY2FzdDxTVkdTY3JpcHRFbGVtZW50Kj4oZWxlbWVudCktPmV4ZWN1dGVT
Y3JpcHQoc291cmNlQ29kZSk7CisjZW5kaWYKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjp3
YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKQEAgLTMxOCw3ICszMjUs
NyBAQAogICAgICAgICAgICAgLy8gQVNTRVJUKGRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAg
ICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCks
IGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzdGFydGluZ0xpbmVO
dW1iZXIpOwotICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyAgICAgICAg
ICAgIGV4ZWN1dGVTY3JpcHQoc2NyaXB0LCBzb3VyY2VDb2RlKTsKICAgICAgICAgfQogICAgIH0K
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA3MTcwOSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDQsOCArNDUsMTEgQEAKICAgICAKICAgICBib29sIGhhdmVGaXJlZExvYWRFdmVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5oYXZlRmlyZWRMb2FkRXZlbnQoKTsgfQogCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciBIVE1MU2NyaXB0UnVubmVyCisgICAgdm9pZCBleGVjdXRl
U2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIHsgcmV0dXJuIG1fZGF0
YS5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOyB9CisKIHByaXZhdGU6Ci0gICAgSFRNTFNjcmlw
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpOworICAgIEhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCk7CiAKICAgICB2aXJ0
dWFsIFN0cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7CiAKQEAgLTcxLDYgKzc1LDggQEAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hFcnJvckV2ZW50KCk7CiAKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVu
dFdpdGhvdXRDaGlsZHJlbigpOworCiAgICAgU2NyaXB0RWxlbWVudERhdGEgbV9kYXRhOwogfTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73572</attachid>
            <date>2010-11-10 19:37:02 -0800</date>
            <delta_ts>2010-11-11 11:48:46 -0800</delta_ts>
            <desc>lacks SVG implementation and test</desc>
            <filename>bug-48966-20101110193701.patch</filename>
            <type>text/plain</type>
            <size>15400</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMTEtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Ny
aXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2Ugd2hlbiBtb3ZlZCBieSBlZGl0aW5nIGNvbW1hbmRzLCBv
ciBhZnRlciBhIGNsb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00ODk2NgorCisgICAgICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBIVE1MU2NyaXB0
UnVubmVyJ3Mgbm90IHNldHRpbmcgZXZhbHVhdGVkIGZsYWcsIGFuZCBjbG9uZU5vZGUncworICAg
ICAgICBub3QgcHJvcGFnYXRpbmcgZXZhbHVhdGVkIGZsYWcuIFRvIGZpeCB0aGUgYnVnLCByZXBs
YWNlZCB0aGUgY2FsbCB0byBTY3JpcHRDb250cm9sbGVyJ3MgZXhlY3V0ZVNjcmlwdAorICAgICAg
ICBieSBhIGNhbGwgdG8gU2NyaXB0RWxlbWVudERhdGEncyBuZXcgZXhlY3V0ZVNjcmlwdCwgd2hp
Y2ggdXBkYXRlcyBldmFsdWF0ZWQgZmxhZyBwcm9wZXJseS4KKyAgICAgICAgQWxzbyBvdmVycm9k
ZSBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4gaW4gSFRNTFNjcmlwdEVsZW1lbnQgYW5kIFNW
R1NjcmlwdEVsZW1lbnQgKE9PUFMhIE5PVCBET05FIFlFVCkKKyAgICAgICAgdG8gcHJvcGFnYXRl
IHRoZSBldmFsdWF0ZWQgZmxhZy4KKworICAgICAgICBTZWUgYWxzbzogaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jYWxyZWFkeS1zdGFydGVkCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvZG9tL3NjcmlwdC1yZXJ1bi1zZWxmLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZG9tL3NjcmlwdC1yZXJ1bi5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6IEFkZGVkIGEgY29tbWVudCB0byBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4uCisgICAg
ICAgICogZG9tL0VsZW1lbnQuaDogTWFkZSBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4gdmly
dHVhbC4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEpOiBBZGRlZCBldmFsdWF0ZWQg
d2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIKKyAgICAgICAgdGhlIHNjcmlwdCBoYXMgYWxyZWFkeSBi
ZWVuIHN0YXJ0ZWQgb3Igbm90IHRvIHRoZSBhcmd1bWVudCBsaXN0LgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RWxlbWVudERhdGE6OmV4ZWN1dGVTY3JpcHQpOiBBZGRlZCB0byBiZSBjYWxsZWQg
YnkgSFRNTFNjcmlwdFJ1bm5lci4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmlzRXZhbHVhdGVkKTogQWRkZWQuCisg
ICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQpOiBBZGRlZCBldmFsdWF0ZWQgdG8g
dGhlIGFyZ3VtZW50IGxpc3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6
Y3JlYXRlKTogQ2FsbHMgSFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRDaGls
ZHJlbik6IEFkZGVkLgorICAgICAgICBJZGVudGljYWwgdG8gRWxlbWVudDo6Y2xvbmVFbGVtZW50
V2l0aG91dENoaWxkcmVuIGV4Y2VwdCBpdCBwcm9wYWdhdGVzIHRoZSBldmFsdWF0ZWQgZmxhZy4K
KyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdCk6IEFkZGVkOyBjYWxscyBTY3JpcHRFbGVt
ZW50RGF0YSdzIGV4ZWN1dGVTY3JpcHQuCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOiBDYWxscyBleGVjdXRlU2NyaXB0LgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdCk6IEFkZGVkIGVs
ZW1lbnQgdG8gdGhlIGFyZ3VtZW50IGxpc3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpydW5TY3JpcHQpOiBDYWxscyBleGVjdXRlU2NyaXB0LgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpTVkdTY3JpcHRFbGVt
ZW50KTogQWRkZWQ7IGNhbGxzIFNjcmlwdEVsZW1lbnREYXRhJ3MgZXhlY3V0ZVNjcmlwdC4KKyAg
ICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2Ny
aXB0RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdCk6IEFkZGVkOyBjYWxscyBTY3JpcHRFbGVtZW50RGF0
YSdzIGV4ZWN1dGVTY3JpcHQuCisKIDIwMTAtMTAtMTUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6
IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBFbGVtZW50
OjpjbG9uZUVsZW1lbgogICAgIHJldHVybiBjbG9uZS5yZWxlYXNlKCk7CiB9CiAKKy8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2VkIHdpdGggSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25l
RWxlbWVudFdpdGhvdXRDaGlsZHJlbgogUGFzc1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9u
ZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFnUU5hbWUoKSwgZmFsc2UpOwpJbmRleDogV2Vi
Q29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAko
cmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5OCw3ICsxOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUo
KSBjb25zdDsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aENoaWxk
cmVuKCk7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRy
ZW4oKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91
dENoaWxkcmVuKCk7CiAKICAgICB2b2lkIG5vcm1hbGl6ZUF0dHJpYnV0ZXMoKTsKICAgICBTdHJp
bmcgbm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpIGNvbnN0OwpAQCAtMzc0LDggKzM3NCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1YWxOYW1lc3BhY2VV
UkkoKSBjb25zdCB7IHJldHVybiBuYW1lc3BhY2VVUkkoKTsgfQogICAgIHZpcnR1YWwgUmVuZGVy
U3R5bGUqIHZpcnR1YWxDb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIgPSBOT1BTRVVETykgeyByZXR1cm4gY29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lm
aWVyKTsgfQogICAgIAotICAgIC8vIGNsb25lTm9kZSBpcyBwcml2YXRlIHNvIHRoYXQgbm9uLXZp
cnR1YWwgY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuIGFuZCBjbG9uZUVsZW1lbnRXaXRob3V0Q2hp
bGRyZW4KLSAgICAvLyBhcmUgdXNlZCBpbnN0ZWFkLgorICAgIC8vIGNsb25lTm9kZSBpcyBwcml2
YXRlIHNvIHRoYXQgY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuIGFuZCBjbG9uZUVsZW1lbnRXaXRo
b3V0Q2hpbGRyZW4gYXJlIHVzZWQgaW5zdGVhZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9k
ZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsK
SW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBz
dGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnCiB9CiAKIC8vIFNjcmlwdEVs
ZW1lbnREYXRhCi1TY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxl
bWVudCogc2NyaXB0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCkKK1NjcmlwdEVsZW1lbnREYXRh
OjpTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBFbGVtZW50
KiBlbGVtZW50LCBib29sIGV2YWx1YXRlZCkKICAgICA6IG1fc2NyaXB0RWxlbWVudChzY3JpcHRF
bGVtZW50KQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX2NhY2hlZFNjcmlwdCgw
KQogICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RlZChmYWxz
ZSkKLSAgICAsIG1fZXZhbHVhdGVkKGZhbHNlKQorICAgICwgbV9ldmFsdWF0ZWQoZXZhbHVhdGVk
KQogICAgICwgbV9maXJlZExvYWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RWxlbWVu
dCk7CkBAIC0yMDUsNiArMjA1LDIxIEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OmV2YWx1YXRl
U2NyaXB0KGMKICAgICB9CiB9CiAKK3ZvaWQgU2NyaXB0RWxlbWVudERhdGE6OmV4ZWN1dGVTY3Jp
cHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKK3sKKyAgICBpZiAobV9ldmFs
dWF0ZWQgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQ
dHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOworICAgIEFTU0VS
VChkb2N1bWVudCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ldmFsdWF0ZWQgPSB0cnVlOwor
CisgICAgZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworfQorCiB2
b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpzdG9wTG9hZFJlcXVlc3QoKQogewogICAgIGlmIChtX2Nh
Y2hlZFNjcmlwdCkgewpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gNzE3MDkpCisrKyBX
ZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgcHJvdGVjdGVkOgogLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rp
b25zIGluIFNjcmlwdEVsZW1lbnQKIGNsYXNzIFNjcmlwdEVsZW1lbnREYXRhIDogcHJpdmF0ZSBD
YWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0RWxlbWVudERhdGEoU2Ny
aXB0RWxlbWVudCosIEVsZW1lbnQqKTsKKyAgICBTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVt
ZW50KiwgRWxlbWVudCosIGJvb2wgZXZhbHVhdGVkKTsKICAgICB2aXJ0dWFsIH5TY3JpcHRFbGVt
ZW50RGF0YSgpOwogCiAgICAgYm9vbCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKQEAgLTc4
LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0OwogICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNv
bnN0OworICAgIGJvb2wgaXNFdmFsdWF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V2YWx1YXRlZDsg
fQogCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQog
ICAgIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGVkQnlQYXJz
ZXI7IH0KQEAgLTg3LDYgKzg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXF1ZXN0U2NyaXB0
KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAgICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSk7CiAgICAgdm9pZCBzdG9wTG9hZFJlcXVlc3QoKTsKIAog
ICAgIHZvaWQgZXhlY3V0ZShDYWNoZWRTY3JpcHQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcAkocmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxTY3JpcHRF
bGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoraW5saW5lIEhUTUxTY3Jp
cHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRl
ZCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9kYXRhKHRo
aXMsIHRoaXMpCisgICAgLCBtX2RhdGEodGhpcywgdGhpcywgZXZhbHVhdGVkKQogewogICAgIEFT
U0VSVChoYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgIG1fZGF0YS5zZXRDcmVhdGVkQnlQYXJz
ZXIoY3JlYXRlZEJ5UGFyc2VyKTsKQEAgLTQ1LDcgKzQ1LDcgQEAgaW5saW5lIEhUTUxTY3JpcHRF
bGVtZW50OjpIVE1MU2NyaXB0RWxlbQogCiBQYXNzUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBI
VE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5
UGFyc2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyLCBmYWxzZSkpOwogfQogCiBib29sIEhUTUxT
Y3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CkBAIC0x
OTQsNCArMTk0LDE3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmUK
ICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQs
IHRydWUsIGZhbHNlKSk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2Vk
IHdpdGggRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCitQYXNzUmVmUHRyPEVs
ZW1lbnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKQor
eworICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxl
bWVudCh0YWdRTmFtZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwgbV9kYXRhLmlzRXZhbHVhdGVkKCkp
KTsKKworICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IGF0dHJpYnV0ZXModHJ1
ZSkpCisgICAgICAgIGNsb25lLT5hdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0
ZU1hcCk7CisKKyAgICBjbG9uZS0+Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXModGhpcyk7CisK
KyAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuaAkocmV2aXNpb24gNzE3MDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiU2Ny
aXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0
U291cmNlQ29kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDggKzQ1LDExIEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGhhdmVGaXJlZExvYWRFdmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5oYXZlRmlyZWRMb2FkRXZlbnQoKTsgfQogCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIGZvciBIVE1MU2NyaXB0UnVubmVyCisgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIHsgcmV0dXJuIG1fZGF0YS5leGVjdXRlU2NyaXB0
KHNvdXJjZUNvZGUpOyB9CisKIHByaXZhdGU6Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIEhU
TUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBzY3Jp
cHRDb250ZW50KCkgY29uc3Q7CiAKQEAgLTcxLDYgKzc1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hF
cnJvckV2ZW50KCk7CiAKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhv
dXRDaGlsZHJlbigpOworCiAgICAgU2NyaXB0RWxlbWVudERhdGEgbV9kYXRhOwogfTsKIApJbmRl
eDogV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCShyZXZpc2lvbiA3MTcw
OSkKKysrIFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEyICszNSwxOCBAQAogI2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJJZ25vcmVEZXN0cnVj
dGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oIgogI2luY2x1ZGUgIk5lc3RpbmdMZXZlbEluY3Jl
bWVudGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1NjcmlwdEVsZW1lbnQuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CkBAIC0xNDAsMjAgKzE0NiwyMSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQ
ZW5kaW5nU2NyCiAgICAgICAgIGlmIChlcnJvck9jY3VycmVkKQogICAgICAgICAgICAgc2NyaXB0
RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRFcnJvckV2ZW50KCkpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CisgICAgICAg
ICAgICBleGVjdXRlU2NyaXB0KHNjcmlwdEVsZW1lbnQuZ2V0KCksIHNvdXJjZUNvZGUpOwogICAg
ICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRMb2FkRXZl
bnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJUKCFtX3NjcmlwdE5lc3RpbmdMZXZl
bCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSBjb25zdAordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIEFTU0VSVChp
c0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICBpZiAoIW1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChzb3VyY2VDb2RlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpKQorICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KGVsZW1lbnQpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNv
ZGUpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50
KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c2NyaXB0VGFnKSkKKyAgICAgICAg
c3RhdGljX2Nhc3Q8U1ZHU2NyaXB0RWxlbWVudCo+KGVsZW1lbnQpLT5leGVjdXRlU2NyaXB0KHNv
dXJjZUNvZGUpOworI2VuZGlmCiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6d2F0Y2hGb3JM
b2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCkBAIC0zMTgsNyArMzI1LDcgQEAgdm9p
ZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudAogICAgICAgICAgICAgLy8gQVNT
RVJUKGRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKICAgICAgICAgICAgIEFT
U0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUg
c291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhl
Y3V0aW9uKG1fZG9jdW1lbnQpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgICAgICAgICAgZXhl
Y3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoc2NyaXB0
LCBzb3VyY2VDb2RlKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5oCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKTsKICAg
ICB2b2lkIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0
Jik7Ci0gICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKSBjb25z
dDsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoRWxlbWVudCosIGNvbnN0IFNjcmlwdFNvdXJjZUNv
ZGUmKSBjb25zdDsKICAgICBib29sIGhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSBjb25zdDsK
ICAgICBib29sIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvc3ZnL1NWR1Nj
cmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogaW5saW5lIFNWR1NjcmlwdEVsZW1lbnQ6OlNWR1NjcmlwdEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAg
LCBtX2RhdGEodGhpcywgdGhpcykKKyAgICAsIG1fZGF0YSh0aGlzLCB0aGlzLCBmYWxzZSkKIHsK
ICAgICBtX2RhdGEuc2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CiB9CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA3MTcwOSkKKysrIFdlYkNvcmUvc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzQxLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IGZvciBIVE1MU2NyaXB0UnVubmVyCisgICAgICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSB7IHJldHVybiBtX2RhdGEuZXhlY3V0ZVNjcmlw
dChzb3VyY2VDb2RlKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHU2NyaXB0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxNzkzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTEtMTAgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2NyaXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2Ugd2hlbiBtb3ZlZCBieSBlZGl0
aW5nIGNvbW1hbmRzLCBvciBhZnRlciBhIGNsb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODk2NgorCisgICAgICAgIEFkZGVkIHRlc3RzIHRvIGVu
c3VyZSBXZWJLaXQgZG9lcyBub3QgZXZhbHVhdGUgdGhlIHNjcmlwdCBvZiBhIGNsb25lIG9mCisg
ICAgICAgIGEgc2NyaXB0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCAo
aGFzIGFscmVhZHkgc3RhcnRlZCkuCisKKyAgICAgICAgU2VlIGFsc286IGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2FscmVhZHktc3RhcnRlZAorCisg
ICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4uaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9wYXJzZXIvbW92ZS1kdXJpbmctcGFyc2luZy1leHBlY3RlZC50
eHQ6CisKIDIwMTAtMTEtMTAgIENocmlzIEd1aWxsb3J5ICA8Y2hyaXMuZ3VpbGxvcnlAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvcGFyc2VyL21vdmUtZHVyaW5nLXBhcnNpbmctZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcGFyc2VyL21vdmUtZHVyaW5nLXBhcnNpbmctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA3MTcwOSkKKysrIExheW91dFRlc3RzL2Zhc3QvcGFyc2VyL21v
dmUtZHVyaW5nLXBhcnNpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NCBAQAotQUxFUlQ6IHBhcnNlci9yZXNvdXJjZXMvbW92ZS1kdXJpbmctcGFyc2luZy1pZnJhbWUu
aHRtbAorQUxFUlQ6IHBhcnNlci9tb3ZlLWR1cmluZy1wYXJzaW5nLmh0bWwKIAogVGhpcyB0ZXh0
IHNob3VsZCBub3Qgc2hvdyBpbnNpZGUgdGhlIGlmcmFtZS4gSXQgc2hvdWxkIHNob3cgaW5zaWRl
IHRoZSBwYXJlbnQuIEZ1cnRoZXJtb3JlLCB0aGVyZSBzaG91bGQgYmUgdGV4dCBzYXlpbmcgIk1p
ZGRsZSBvZiBQYWdlIiBhbmQgdGhlbiAiRW5kIG9mIFBhZ2UiIGJlbG93IChhbHNvIGluIHRoZSBw
YXJlbnQpLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73631</attachid>
            <date>2010-11-11 11:48:51 -0800</date>
            <delta_ts>2010-11-11 13:09:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48966-20101111114849.patch</filename>
            <type>text/plain</type>
            <size>23950</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMTEtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Ny
aXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2UgYWZ0ZXIgYSBjbG9uZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg5NjYKKworICAgICAgICBUaGUgYnVnIHdh
cyBjYXVzZWQgYnkgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuJ3Mgbm90IHByb3BhZ2F0aW5n
ICJldmFsdWF0ZWQiIGZsYWcsCisgICAgICAgIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIG9yIG5v
dCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQsIGFuZCB0aGUgZmFjdAorICAgICAgICBu
ZWl0aGVyIEhUTUxTY3JpcHRSdW5uZXIgbm9yIFhNTERvY3VtZW50UGFyc2VyIHdhcyBzZXR0aW5n
ICJldmFsdWF0ZWQiIGZsYWcgdG8gdHJ1ZS4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IG92
ZXJyaWRpbmcgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuIGluIEhUTUxTY3JpcHRFbGVtZW50
IGFuZCBTVkdTY3JpcHRFbGVtZW50LAorICAgICAgICBhbmQgcmVwbGFjaW5nIGRpcmVjdCBhY2Nl
c3MgdG8gU2NyaXB0Q29udHJvbGxlciBieSBhIGNhbGwgdG8gbmV3IFNjcmlwdEVsZW1lbnREYXRh
OjpleGVjdXRlU2NyaXB0LAorICAgICAgICB3aGljaCB1cGRhdGVzIHRoZSAiZXZhbHVhdGVkIiBm
bGFnIHByb3Blcmx5LgorCisgICAgICAgIFNlZSBhbHNvOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNhbHJlYWR5LXN0YXJ0ZWQKKworICAgICAgICBU
ZXN0czogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWwKKyAgICAgICAgICAgICAgIHN2Zy9k
b20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcKKyAgICAgICAg
ICAgICAgIHN2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCisK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6IEFkZGVkIGNvbW1lbnQgdG8gRWxlbWVudDo6Y2xv
bmVFbGVtZW50V2l0aG91dENoaWxkcmVuLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IE1hZGUg
Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuIHZpcnR1YWwgdG8gb3ZlcnJpZGUgaW4gSFRNTFNj
cmlwdEVsZW1lbnQgYW5kIFNWR1NjcmlwdEVsZW1lbnQuCisgICAgICAgICogZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVs
ZW1lbnREYXRhKTogQWRkZWQgImV2YWx1YXRlZCIgZmxhZyB0byB0aGUgYXJndW1lbnQgbGlzdC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpleGVjdXRlU2NyaXB0KTogRXh0
cmFjdGVkIGZyb20gSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdC4KKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVTY3JpcHQpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmlzRXZhbHVhdGVkKTog
QWRkZWQuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogQ2FsbHMgV2Vi
Q29yZTo6ZXhlY3V0ZVNjcmlwdC4KKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dCk6IEFkZGVkICJldmFsdWF0ZWQiIGZsYWcgdG8gdGhlIGFyZ3VtZW50IGxpc3QuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKTogQ2FsbHMgdGhlIGNvbnN0cnVj
dG9yIHdpdGggdGhlICJldmFsdWF0ZWQiIGZsYWcgc2V0IHRvIGZhbHNlLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbik6IEFk
ZGVkOyBpZGVudGljYWwgdG8gRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCisg
ICAgICAgIGV4Y2VwdCBpdCBwcm9wYWdhdGVzICJldmFsdWF0ZWQiIGZsYWcuCisgICAgICAgICog
aHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuY3BwOiBSZW1vdmVkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1NjcmlwdEFu
ZERpc3BhdGNoRXZlbnQpOiBBZGRlZCBhbiBhc3NlcnRpb24gdGhhdCB3YXMgbG9zdCBpbiBleHRy
YWN0aW5nCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpleGVjdXRlU2NyaXB0
LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBz
dmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVt
ZW50OjpTVkdTY3JpcHRFbGVtZW50KTogQWRkZWQgImV2YWx1YXRlZCIgZmxhZyB0byB0aGUgYXJn
dW1lbnQgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmNyZWF0ZSk6
IENhbGxzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSAiZXZhbHVhdGVkIiBmbGFnIHNldCB0byBm
YWxzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdp
dGhvdXRDaGlsZHJlbik6IEFkZGVkOyBpZGVudGljYWwgdG8gRWxlbWVudDo6Y2xvbmVFbGVtZW50
V2l0aG91dENoaWxkcmVuCisgICAgICAgIGV4Y2VwdCBpdCBwcm9wYWdhdGVzICJldmFsdWF0ZWQi
IGZsYWcuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKwogMjAxMC0xMS0xMSAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0b3Jl
IHRoZSBwb3J0aW9uIG9mIHRoZSBDaGFuZ2VMb2cgcmVtb3ZlZCBpbiBteSBsYXN0IGNvbW1pdC4K
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBF
bGVtZW50OjpjbG9uZUVsZW1lbgogICAgIHJldHVybiBjbG9uZS5yZWxlYXNlKCk7CiB9CiAKKy8v
IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2VkIHdpdGggSFRNTFNjcmlwdEVsZW1lbnQg
YW5kIFNWR1NjcmlwdEVsZW1lbnQKIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVF
bGVtZW50V2l0aG91dENoaWxkcmVuKCkKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gY2xvbmUgPSBk
b2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhZ1FOYW1lKCksIGZhbHNlKTsKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTgsNyArMTk4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkg
Y29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhDaGlsZHJl
bigpOwotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVu
KCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRD
aGlsZHJlbigpOwogCiAgICAgdm9pZCBub3JtYWxpemVBdHRyaWJ1dGVzKCk7CiAgICAgU3RyaW5n
IG5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSBjb25zdDsKQEAgLTM3NCw4ICszNzQsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsTmFtZXNwYWNlVVJJ
KCkgY29uc3QgeyByZXR1cm4gbmFtZXNwYWNlVVJJKCk7IH0KICAgICB2aXJ0dWFsIFJlbmRlclN0
eWxlKiB2aXJ0dWFsQ29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVy
ID0gTk9QU0VVRE8pIHsgcmV0dXJuIGNvbXB1dGVkU3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmll
cik7IH0KICAgICAKLSAgICAvLyBjbG9uZU5vZGUgaXMgcHJpdmF0ZSBzbyB0aGF0IG5vbi12aXJ0
dWFsIGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbiBhbmQgY2xvbmVFbGVtZW50V2l0aG91dENoaWxk
cmVuCi0gICAgLy8gYXJlIHVzZWQgaW5zdGVhZC4KKyAgICAvLyBjbG9uZU5vZGUgaXMgcHJpdmF0
ZSBzbyB0aGF0IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbiBhbmQgY2xvbmVFbGVtZW50V2l0aG91
dENoaWxkcmVuIGFyZSB1c2VkIGluc3RlYWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+
IGNsb25lTm9kZShib29sIGRlZXApOwogCiAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEzICsxMzAsMTMgQEAgc3Rh
dGljIGJvb2wgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZwogfQogCiAvLyBTY3JpcHRFbGVt
ZW50RGF0YQotU2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1lbnREYXRhKFNjcmlwdEVsZW1l
bnQqIHNjcmlwdEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCitTY3JpcHRFbGVtZW50RGF0YTo6
U2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRWxlbWVudCog
ZWxlbWVudCwgYm9vbCBldmFsdWF0ZWQpCiAgICAgOiBtX3NjcmlwdEVsZW1lbnQoc2NyaXB0RWxl
bWVudCkKICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwgbV9jYWNoZWRTY3JpcHQoMCkK
ICAgICAsIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0ZWQoZmFsc2Up
Ci0gICAgLCBtX2V2YWx1YXRlZChmYWxzZSkKKyAgICAsIG1fZXZhbHVhdGVkKGV2YWx1YXRlZCkK
ICAgICAsIG1fZmlyZWRMb2FkKGZhbHNlKQogewogICAgIEFTU0VSVChtX3NjcmlwdEVsZW1lbnQp
OwpAQCAtMjA1LDYgKzIwNSwyMSBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNj
cmlwdChjCiAgICAgfQogfQogCit2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpleGVjdXRlU2NyaXB0
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCit7CisgICAgaWYgKG1fZXZhbHVh
dGVkIHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQo
ZG9jdW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXZhbHVhdGVkID0gdHJ1ZTsKKwor
ICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKK30KKwogdm9p
ZCBTY3JpcHRFbGVtZW50RGF0YTo6c3RvcExvYWRSZXF1ZXN0KCkKIHsKICAgICBpZiAobV9jYWNo
ZWRTY3JpcHQpIHsKQEAgLTM0Myw0ICszNTgsMTUgQEAgU2NyaXB0RWxlbWVudCogdG9TY3JpcHRF
bGVtZW50KEVsZW1lbnQqIAogICAgIHJldHVybiAwOwogfQogCit2b2lkIGV4ZWN1dGVTY3JpcHQo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKK3sK
KyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAm
JiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnQqPihlbGVtZW50KS0+bV9kYXRhLmV4ZWN1dGVTY3Jp
cHQoc291cmNlQ29kZSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChlbGVtZW50LT5p
c1NWR0VsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcp
KQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTY3JpcHRFbGVtZW50Kj4oZWxlbWVudCktPm1fZGF0
YS5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworI2VuZGlmCit9CisKIH0KSW5kZXg6IFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHByb3RlY3RlZDoKIC8vIGFuZCBwYXNz
IGl0IHRvIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBTY3JpcHRFbGVtZW50CiBjbGFz
cyBTY3JpcHRFbGVtZW50RGF0YSA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVi
bGljOgotICAgIFNjcmlwdEVsZW1lbnREYXRhKFNjcmlwdEVsZW1lbnQqLCBFbGVtZW50Kik7Cisg
ICAgU2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCosIEVsZW1lbnQqLCBib29sIGV2YWx1
YXRlZCk7CiAgICAgdmlydHVhbCB+U2NyaXB0RWxlbWVudERhdGEoKTsKIAogICAgIGJvb2wgaWdu
b3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7CkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0OwogICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBj
b25zdDsKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdDsKKyAgICBib29sIGlzRXZhbHVhdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9ldmFsdWF0ZWQ7IH0KIAogICAgIEVsZW1lbnQqIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAgICBib29sIGNyZWF0ZWRCeVBhcnNlcigp
IGNvbnN0IHsgcmV0dXJuIG1fY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC04Nyw2ICs4OCw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7
CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAg
dm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpOwog
ICAgIHZvaWQgc3RvcExvYWRSZXF1ZXN0KCk7CiAKICAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2Ny
aXB0Kik7CkBAIC0xMDUsNiArMTA3LDcgQEAgcHJpdmF0ZToKIH07CiAKIFNjcmlwdEVsZW1lbnQq
IHRvU2NyaXB0RWxlbWVudChFbGVtZW50Kik7Cit2b2lkIGV4ZWN1dGVTY3JpcHQoRWxlbWVudCos
IGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDcgKzkx
MCw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3Vt
ZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgICAgIGV4ZWN1
dGVTY3JpcHQoZWxlbWVudCwgU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRD
b250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKIAog
ICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAgICAg
ICAgaWYgKGlzRGV0YWNoZWQoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAko
cmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1M
U2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoraW5saW5lIEhUTUxTY3JpcHRFbGVtZW50OjpI
VE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCkKICAgICA6IEhU
TUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9kYXRhKHRoaXMsIHRoaXMpCisg
ICAgLCBtX2RhdGEodGhpcywgdGhpcywgZXZhbHVhdGVkKQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKHNjcmlwdFRhZykpOwogICAgIG1fZGF0YS5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5
UGFyc2VyKTsKQEAgLTQ1LDcgKzQ1LDcgQEAgaW5saW5lIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1M
U2NyaXB0RWxlbQogCiBQYXNzUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBIVE1MU2NyaXB0RWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
VE1MU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCwgY3JlYXRlZEJ5UGFyc2VyLCBmYWxzZSkpOwogfQogCiBib29sIEhUTUxTY3JpcHRFbGVtZW50
Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CkBAIC0xOTQsNCArMTk0LDE3
IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmUKICAgICBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNl
KSk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2VkIHdpdGggRWxlbWVu
dDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxT
Y3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKQoreworICAgIFJlZlB0
cjxFbGVtZW50PiBjbG9uZSA9IGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdRTmFt
ZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwgbV9kYXRhLmlzRXZhbHVhdGVkKCkpKTsKKworICAgIGlm
IChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IGF0dHJpYnV0ZXModHJ1ZSkpCisgICAgICAg
IGNsb25lLT5hdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1hcCk7CisKKyAg
ICBjbG9uZS0+Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXModGhpcyk7CisKKyAgICByZXR1cm4g
Y2xvbmUucmVsZWFzZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAko
cmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXZlRmlyZWRM
b2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaGF2ZUZpcmVkTG9hZEV2ZW50KCk7IH0K
IAogcHJpdmF0ZToKLSAgICBIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgSFRNTFNjcmlwdEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJv
b2wgZXZhbHVhdGVkKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25z
dDsKIApAQCAtNzEsNiArNzEsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hMb2FkRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAK
KyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwor
CisgICAgZnJpZW5kIHZvaWQgZXhlY3V0ZVNjcmlwdChFbGVtZW50KiwgY29uc3QgU2NyaXB0U291
cmNlQ29kZSYgc291cmNlQ29kZSk7CisKICAgICBTY3JpcHRFbGVtZW50RGF0YSBtX2RhdGE7CiB9
OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAJKHJldmlz
aW9uIDcxNzk3KQorKysgV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTFNjcmlw
dFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0UnVubmVySG9zdC5oIgogI2luY2x1ZGUg
Iklnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmgiCiAjaW5jbHVkZSAiTmVz
dGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAt
MTQwLDYgKzE0MCw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3IK
ICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5k
aXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdEVycm9yRXZlbnQoKSk7CiAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwogICAgICAgICAgICAgZXhl
Y3V0ZVNjcmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzb3VyY2VDb2RlKTsKICAgICAgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkpOwog
ICAgICAgICB9CkBAIC0xNDcsMTcgKzE0OCw2IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZVBlbmRpbmdTY3IKICAgICBBU1NFUlQoIW1fc2NyaXB0TmVzdGluZ0xldmVsKTsKIH0KIAot
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGVs
ZW1lbnQpOwotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoaXNF
eGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUt
PnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotfQotCiB2b2lkIEhUTUxTY3Jp
cHRSdW5uZXI6OndhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogewog
ICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQoKSk7CkluZGV4OiBXZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KCk7CiAgICAgdm9pZCBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVu
ZGluZ1NjcmlwdCYpOwotICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChFbGVtZW50KiwgY29uc3QgU2Ny
aXB0U291cmNlQ29kZSYpIGNvbnN0OwogICAgIGJvb2wgaGF2ZVBhcnNpbmdCbG9ja2luZ1Njcmlw
dCgpIGNvbnN0OwogICAgIGJvb2wgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKTsKIApJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29y
ZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBTVkdTY3JpcHRFbGVtZW50OjpT
VkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgU1ZHU2NyaXB0RWxlbWVudDo6
U1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCkKICAgICA6IFNW
R0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2RhdGEodGhpcywgdGhpcykKKyAg
ICAsIG1fZGF0YSh0aGlzLCB0aGlzLCBldmFsdWF0ZWQpCiB7CiAgICAgbV9kYXRhLnNldENyZWF0
ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogfQogCiBQYXNzUmVmUHRyPFNWR1NjcmlwdEVs
ZW1lbnQ+IFNWR1NjcmlwdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3Jl
YXRlZEJ5UGFyc2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIsIGZhbHNlKSk7CiB9CiAKIFN0cmlu
ZyBTVkdTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKQEAgLTI0Niw2ICsyNDYs
MTkgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50OjpzaG91bGRFeGVjdXRlQXNKYQogICAgIHJldHVy
biBtX2RhdGEuc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpOwogfQogCisvLyBUaGlzIGZ1bmN0
aW9uIG5lZWRzIHRvIGJlIHN5bmNlZCB3aXRoIEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRD
aGlsZHJlbgorUGFzc1JlZlB0cjxFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1l
bnRXaXRob3V0Q2hpbGRyZW4oKQoreworICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGFkb3B0
UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBt
X2RhdGEuaXNFdmFsdWF0ZWQoKSkpOworCisgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cmlidXRl
TWFwID0gYXR0cmlidXRlcyh0cnVlKSkKKyAgICAgICAgY2xvbmUtPmF0dHJpYnV0ZXMoKS0+c2V0
QXR0cmlidXRlcygqYXR0cmlidXRlTWFwKTsKKworICAgIGNsb25lLT5jb3B5Tm9uQXR0cmlidXRl
UHJvcGVydGllcyh0aGlzKTsKKworICAgIHJldHVybiBjbG9uZS5yZWxlYXNlKCk7Cit9CisKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCShyZXZp
c2lvbiA3MTc5NykKKysrIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
c2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR1Njcmlw
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpOworICAgICAgICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGV2YWx1YXRlZCk7CiAKICAgICAg
ICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q29udGVudCgpIGNvbnN0OwogCkBAIC03NSw2ICs3NSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9h
ZEV2ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKIAor
ICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigp
OworICAgICAgICBmcmllbmQgdm9pZCBleGVjdXRlU2NyaXB0KEVsZW1lbnQqLCBjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKTsKKwogICAgICAgICAvLyBTVkdVUklSZWZlcmVuY2UK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9TVEFUSUNfUFJPUEVSVFlfTkVXKFNWR1NjcmlwdEVs
ZW1lbnQsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBTdHJpbmcsIEhyZWYsIGhyZWYpCiAKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDcxODM2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTEtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU2NyaXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2UgYWZ0ZXIgYSBjbG9uZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg5NjYKKworICAgICAgICBBZGRl
ZCB0ZXN0cyB0byBlbnN1cmUgV2ViS2l0IGRvZXMgbm90IGV2YWx1YXRlIHRoZSBzY3JpcHQgb2Yg
YSBjbG9uZSBvZgorICAgICAgICBhIHNjcmlwdCBlbGVtZW50IHRoYXQgaGFzIGFscmVhZHkgYmVl
biBldmFsdWF0ZWQgKGhhcyBhbHJlYWR5IHN0YXJ0ZWQpLgorCisgICAgICAgIFNlZSBhbHNvOiBo
dHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNhbHJlYWR5
LXN0YXJ0ZWQKKworICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxm
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJl
cnVuLXNlbGYuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJl
cnVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3Jp
cHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZG9tL1NW
R1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVu
LXNlbGYuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2Ny
aXB0LWNsb25lLXJlcnVuLnN2ZzogQWRkZWQuCisKIDIwMTAtMTEtMTEgIE1paGFpIFBhcnBhcml0
YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDsgYWRkIG1pc3Np
bmcgYmFzZWxpbmUgY2hlY2tzdW1zLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LWNsb25lLXJlcnVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3RzIGNsb25pbmcgYSBzY3JpcHQgZWxlbWVu
dCB0aGF0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBkb2N1
bWVudCBkb2VzIG5vdCByZS1ydW4gdGhlIHNjcmlwdC4gWW91IHNob3VsZCBzZWUgUEFTUzoKKwor
UEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1j
bG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3QgcnVucyBhIHNjcmlwdCB0aGF0IGNsb25lcyBh
bmQgaW5zZXJ0cyBpdHMgc2NyaXB0IGVsZW1lbnQuIFRoZSBzY3JpcHQgc2hvdWxkIHJ1biBleGFj
dGx5IG9uY2UgYW5kIHByaW50IFBBU1M6CisKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgordmFyIGkgPSAwOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVz
dCBydW5zIGEgc2NyaXB0IHRoYXQgY2xvbmVzIGFuZCBpbnNlcnRzIGl0cyBzY3JpcHQgZWxlbWVu
dC4gVGhlIHNjcmlwdCBzaG91bGQgcnVuIGV4YWN0bHkgb25jZSBhbmQgcHJpbnQgUEFTUzo8L3A+
Cis8ZGl2PjxzY3JpcHQ+CitpKys7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7Citk
aXYucmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2Rpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2Rl
KHRydWUpKTsKKworPC9zY3JpcHQ+PC9kaXY+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworcmVzdWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlw
dCByYW4gdHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQg
cmFuICcgKyBpICsgJyB0aW1lcyc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgordmFyIGkgPSAwOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
PlRoaXMgdGVzdHMgY2xvbmluZyBhIHNjcmlwdCBlbGVtZW50IHRoYXQgaGFzIGFscmVhZHkgc3Rh
cnRlZCBhbmQgaW5zZXJ0aW5nIGl0IGludG8gdGhlIGRvY3VtZW50IGRvZXMgbm90IHJlLXJ1biB0
aGUgc2NyaXB0LiBZb3Ugc2hvdWxkIHNlZSBQQVNTOjwvcD4KKzxkaXY+PHNjcmlwdD4gaSsrIDwv
c2NyaXB0PjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBzY3JpcHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGl2ID0g
c2NyaXB0LnBhcmVudE5vZGU7CitkaXYucmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2Rpdi5hcHBlbmRD
aGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworcmVzdWx0ID0gJ1BBU1MnOworaWYgKGkg
PT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxzZSBpZiAoaSA+
IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOwor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20v
U1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUt
cmVydW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2RvbS9T
VkdTY3JpcHRFbGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0cyBjbG9uaW5nIGEgc2NyaXB0IGVsZW1lbnQg
dGhhdCBoYXMgYWxyZWFkeSBzdGFydGVkIGFuZCBpbnNlcnRpbmcgaXQgaW50byB0aGUgZG9jdW1l
bnQgZG9lcyBub3QgcmUtcnVuIHRoZSBzY3JpcHQuIFlvdSBzaG91bGQgc2VlIFBBU1M6CitQQVNT
CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25l
LXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9k
b20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2Ny
aXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIgQEAKK1RoaXMgdGVzdCBydW5zIGEgc2NyaXB0IHRoYXQgY2xvbmVzIGFuZCBpbnNlcnRzIGl0
cyBzY3JpcHQgZWxlbWVudC4gVGhlIHNjcmlwdCBzaG91bGQgcnVuIGV4YWN0bHkgb25jZSBhbmQg
cHJpbnQgUEFTUzoKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxl
bWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLnN2Zwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3Jp
cHQtY2xvbmUtcmVydW4tc2VsZi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hsaW5rIiB4bWxuczp4aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+Cis8ZGVmcz4KKzxzY3JpcHQ+Cit2YXIgaSA9IDA7Cis8L3NjcmlwdD4KKzwvZGVmcz4KKzx0
ZXh0IHg9IjE1IiB5PSIzMCIgZm9udC1zaXplPSIxNSI+VGhpcyB0ZXN0IHJ1bnMgYSBzY3JpcHQg
dGhhdCBjbG9uZXMgYW5kIGluc2VydHMgaXRzIHNjcmlwdCBlbGVtZW50LiBUaGUgc2NyaXB0IHNo
b3VsZCBydW4gZXhhY3RseSBvbmNlIGFuZCBwcmludCBQQVNTOjwvdGV4dD4KKzxkZWZzPgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraSsrOworCit2YXIgc2NyaXB0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzFdOwordmFyIGRlZnMgPSBzY3JpcHQu
cGFyZW50Tm9kZTsKK2RlZnMucmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2RlZnMuYXBwZW5kQ2hpbGQo
c2NyaXB0LmNsb25lTm9kZSh0cnVlKSk7CisKKzwvc2NyaXB0PjwvZGVmcz4KKzxkZWZzPjxzY3Jp
cHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCityZXN1bHQgPSAnUEFTUyc7CitpZiAoaSA9PSAyKQor
ICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiB0d2ljZSc7CitlbHNlIGlmIChpID4gMikKKyAg
cmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyArIGkgKyAnIHRpbWVzJzsKKyAgCit2YXIgdGV4
dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiwgInRleHQiKTsKK3RleHRFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0OwordGV4
dEVsZW1lbnQuc2V0QXR0cmlidXRlKCd4JywgMTUpOwordGV4dEVsZW1lbnQuc2V0QXR0cmlidXRl
KCd5JywgNDUrMTApOwordGV4dEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAxNSk7
Citkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQodGV4
dEVsZW1lbnQpOworCis8L3NjcmlwdD48L2RlZnM+Cis8L3N2Zz4KSW5kZXg6IExheW91dFRlc3Rz
L3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUt
cmVydW4uc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3JpcHRF
bGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAl
IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczp4aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCI+Cis8ZGVmcz4KKzxzY3JpcHQ+Cit2YXIgaSA9IDA7Cis8L3NjcmlwdD4KKzwvZGVm
cz4KKzx0ZXh0IHg9IjE1IiB5PSIzMCIgZm9udC1zaXplPSIxNSI+VGhpcyB0ZXN0cyBjbG9uaW5n
IGEgc2NyaXB0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBzdGFydGVkIGFuZCBpbnNlcnRpbmcg
aXQgaW50byB0aGUgZG9jdW1lbnQgZG9lcyBub3QgcmUtcnVuIHRoZSBzY3JpcHQuIFlvdSBzaG91
bGQgc2VlIFBBU1M6PC90ZXh0PgorPGRlZnM+PHNjcmlwdD4gaSsrOyA8L3NjcmlwdD48L2RlZnM+
Cis8ZGVmcz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0
JylbMV07Cit2YXIgZGVmcyA9IHNjcmlwdC5wYXJlbnROb2RlOworZGVmcy5yZW1vdmVDaGlsZChz
Y3JpcHQpOworZGVmcy5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworcmVz
dWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4g
dHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcg
KyBpICsgJyB0aW1lcyc7CisKK3ZhciB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAidGV4dCIpOwordGV4dEVsZW1lbnQu
dGV4dENvbnRlbnQgPSByZXN1bHQ7Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3gnLCAxNSk7
Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3knLCA0NSsxMCk7Cit0ZXh0RWxlbWVudC5zZXRB
dHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsIDE1KTsKK2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdzdmcnKVswXS5hcHBlbmRDaGlsZCh0ZXh0RWxlbWVudCk7CisKKzwvc2NyaXB0PgorPC9kZWZz
PgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73641</attachid>
            <date>2010-11-11 13:09:08 -0800</date>
            <delta_ts>2010-11-11 14:14:15 -0800</delta_ts>
            <desc>Fixed per Darin&apos;s comments</desc>
            <filename>bug-48966-20101111130907.patch</filename>
            <type>text/plain</type>
            <size>25528</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTg0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMTEtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Ny
aXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2UgYWZ0ZXIgYSBjbG9uZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg5NjYKKworICAgICAgICBUaGUgYnVnIHdh
cyBjYXVzZWQgYnkgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuJ3Mgbm90IHByb3BhZ2F0aW5n
IGlzRXZhbHVhdGVkIGZsYWcsCisgICAgICAgIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIG9yIG5v
dCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQsIGFuZCB0aGUgZmFjdAorICAgICAgICBu
ZWl0aGVyIEhUTUxTY3JpcHRSdW5uZXIgbm9yIFhNTERvY3VtZW50UGFyc2VyIHdhcyBzZXR0aW5n
IGlzRXZhbHVhdGVkIGZsYWcgdG8gdHJ1ZS4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IG1h
a2luZyBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4gY2FsbCBhIHZpcnR1YWwgY2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbiwKKyAgICAgICAgYW5kIG92ZXJyaWRlIGl0
IGluIEhUTUxTY3JpcHRFbGVtZW50IGFuZCBTVkdTY3JpcHRFbGVtZW50IHRvIHByb3BhZ2F0ZSBp
c0V2YWx1YXRlZCBmbGFnLAorICAgICAgICBhbmQgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3MgdG8g
U2NyaXB0Q29udHJvbGxlciBieSBhIGNhbGwgdG8gbmV3IFNjcmlwdEVsZW1lbnREYXRhOjpleGVj
dXRlU2NyaXB0LAorICAgICAgICB3aGljaCB1cGRhdGVzIHRoZSBpc0V2YWx1YXRlZCBmbGFnIHBy
b3Blcmx5LgorCisgICAgICAgIFNlZSBhbHNvOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrLyNhbHJlYWR5LXN0YXJ0ZWQKKworICAgICAgICBUZXN0czog
ZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWwKKyAgICAgICAgICAgICAgIHN2Zy9kb20vU1ZH
U2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcKKyAgICAgICAgICAgICAg
IHN2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVs
ZW1lbnRXaXRob3V0Q2hpbGRyZW4pOiBDYWxscyBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4u
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRl
c0FuZENoaWxkcmVuKTogRXh0cmFjdGVkIGZyb20gY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVu
LgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1lbnRE
YXRhKTogQWRkZWQgaXNFdmFsdWF0ZWQgZmxhZyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdCk6IEV4dHJhY3Rl
ZCBmcm9tIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdCk6IFJlbmFtZWQgZXZhbHVhdGVkIHRv
IGlzRXZhbHVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6Omlnbm9y
ZXNMb2FkUmVxdWVzdCk6IFJlbmFtZWQgZXZhbHVhdGVkIHRvIGlzRXZhbHVhdGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQu
aDogUmVuYW1lZCBldmFsdWF0ZWQgdG8gaXNFdmFsdWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFbGVtZW50RGF0YTo6aXNFdmFsdWF0ZWQpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjplbmRFbGVtZW50TnMpOiBDYWxscyBXZWJDb3JlOjpleGVjdXRlU2NyaXB0LgorICAg
ICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KTogQWRkZWQgaXNFdmFsdWF0ZWQgZmxh
ZyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVt
ZW50OjpjcmVhdGUpOiBDYWxscyB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgaXNFdmFsdWF0ZWQg
ZmxhZyBzZXQgdG8gZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6
Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbik6IFByb3BhZ2F0ZXMgaXNF
dmFsdWF0ZWQuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOiBSZW1vdmVkIEhUTUxTY3JpcHRSdW5u
ZXI6OmV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOiBBZGRlZCBhbiBhc3NlcnRpb24g
dGhhdCB3YXMgbG9zdAorICAgICAgICBpbiBleHRyYWN0aW5nIFdlYkNvcmU6OlNjcmlwdEVsZW1l
bnREYXRhOjpleGVjdXRlU2NyaXB0LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaDoKKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpTVkdTY3JpcHRFbGVtZW50KTogQWRkZWQgaXNFdmFs
dWF0ZWQgZmxhZyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Nj
cmlwdEVsZW1lbnQ6OmNyZWF0ZSk6IENhbGxzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBpc0V2
YWx1YXRlZCBmbGFnIHNldCB0byBmYWxzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVs
ZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOiBQcm9wYWdh
dGVzIGlzRXZhbHVhdGVkLgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6CisKIDIw
MTAtMTEtMTEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDcxNzk3KQorKysgV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMyArMTU3LDEwIEBA
IFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVtZW4KICAgICByZXR1cm4gY2xv
bmUucmVsZWFzZSgpOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHN5bmNlZCB3
aXRoIEhUTUxTY3JpcHRFbGVtZW50IGFuZCBTVkdTY3JpcHRFbGVtZW50CiBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpCiB7Ci0gICAgUmVm
UHRyPEVsZW1lbnQ+IGNsb25lID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdRTmFtZSgp
LCBmYWxzZSk7Ci0gICAgLy8gVGhpcyB3aWxsIGNhdGNoIEhUTUwgZWxlbWVudHMgaW4gdGhlIHdy
b25nIG5hbWVzcGFjZSB0aGF0IGFyZSBub3QgY29ycmVjdGx5IGNvcGllZC4KLSAgICAvLyBUaGlz
IGlzIGEgc2FuaXR5IGNoZWNrIGFzIEhUTUwgb3ZlcmxvYWRzIHNvbWUgb2YgdGhlIERPTSBtZXRo
b2RzLgotICAgIEFTU0VSVChpc0hUTUxFbGVtZW50KCkgPT0gY2xvbmUtPmlzSFRNTEVsZW1lbnQo
KSk7Ci0KKyAgICBSZWZQdHI8RWxlbWVudD4gY2xvbmUgPSBjbG9uZUVsZW1lbnRXaXRob3V0QXR0
cmlidXRlc0FuZENoaWxkcmVuKCk7CiAgICAgLy8gQ2FsbCBhdHRyaWJ1dGVzKHRydWUpIHRvIGZv
cmNlIGF0dHJpYnV0ZSBzeW5jaHJvbml6YXRpb24gdG8gb2NjdXIgZm9yIFNWRyBhbmQgc3R5bGUg
YXR0cmlidXRlcy4KICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBhdHRyaWJ1
dGVzKHRydWUpKQogICAgICAgICBjbG9uZS0+YXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1dGVzKCph
dHRyaWJ1dGVNYXApOwpAQCAtMTczLDYgKzE3MCwxNSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEVs
ZW1lbnQ6OmNsb25lRWxlbWVuCiAgICAgcmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKIH0KIAorUGFz
c1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0Fu
ZENoaWxkcmVuKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RWxlbWVudD4gY2xvbmUgPSBkb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KHRhZ1FOYW1lKCksIGZhbHNlKTsKKyAgICAvLyBUaGlzIHdpbGwg
Y2F0Y2ggSFRNTCBlbGVtZW50cyBpbiB0aGUgd3JvbmcgbmFtZXNwYWNlIHRoYXQgYXJlIG5vdCBj
b3JyZWN0bHkgY29waWVkLgorICAgIC8vIFRoaXMgaXMgYSBzYW5pdHkgY2hlY2sgYXMgSFRNTCBv
dmVybG9hZHMgc29tZSBvZiB0aGUgRE9NIG1ldGhvZHMuCisgICAgQVNTRVJUKGlzSFRNTEVsZW1l
bnQoKSA9PSBjbG9uZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICByZXR1cm4gY2xvbmU7Cit9CisK
IHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewpJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbigpOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xv
bmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdDsKIAog
ICAgIHZvaWQgbm9ybWFsaXplQXR0cmlidXRlcygpOwogICAgIFN0cmluZyBub2RlTmFtZVByZXNl
cnZpbmdDYXNlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzE3
OTcpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMwLDEzICsxMzAsMTMgQEAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3Vh
ZwogfQogCiAvLyBTY3JpcHRFbGVtZW50RGF0YQotU2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVs
ZW1lbnREYXRhKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQp
CitTY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0V2YWx1YXRlZCkKICAgICA6IG1f
c2NyaXB0RWxlbWVudChzY3JpcHRFbGVtZW50KQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAg
ICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCiAg
ICAgLCBtX3JlcXVlc3RlZChmYWxzZSkKLSAgICAsIG1fZXZhbHVhdGVkKGZhbHNlKQorICAgICwg
bV9pc0V2YWx1YXRlZChpc0V2YWx1YXRlZCkKICAgICAsIG1fZmlyZWRMb2FkKGZhbHNlKQogewog
ICAgIEFTU0VSVChtX3NjcmlwdEVsZW1lbnQpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgU2Ny
aXB0RWxlbWVudERhdGE6OnJlcXVlc3RTY3JpcHQoY28KIAogdm9pZCBTY3JpcHRFbGVtZW50RGF0
YTo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsK
LSAgICBpZiAobV9ldmFsdWF0ZWQgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkgfHwgIXNob3VsZEV4
ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICBpZiAobV9pc0V2YWx1YXRlZCB8fCBzb3VyY2VDb2Rl
LmlzRW1wdHkoKSB8fCAhc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OmV2YWx1YXRl
U2NyaXB0KGMKICAgICAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRz
KEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBt
X2V2YWx1YXRlZCA9IHRydWU7CisgICAgICAgIG1faXNFdmFsdWF0ZWQgPSB0cnVlOwogCiAgICAg
ICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
I3NjcmlwdAogCkBAIC0yMDUsNiArMjA1LDIxIEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OmV2
YWx1YXRlU2NyaXB0KGMKICAgICB9CiB9CiAKK3ZvaWQgU2NyaXB0RWxlbWVudERhdGE6OmV4ZWN1
dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKK3sKKyAgICBpZiAo
bV9pc0V2YWx1YXRlZCB8fCBzb3VyY2VDb2RlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7Cisg
ICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRXZhbHVhdGVk
ID0gdHJ1ZTsKKworICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2Rl
KTsKK30KKwogdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6c3RvcExvYWRSZXF1ZXN0KCkKIHsKICAg
ICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKQEAgLTIzNCw3ICsyNDksNyBAQCB2b2lkIFNjcmlwdEVs
ZW1lbnREYXRhOjpub3RpZnlGaW5pc2hlZChDCiAKIGJvb2wgU2NyaXB0RWxlbWVudERhdGE6Omln
bm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZXZhbHVhdGVkIHx8IG1f
cmVxdWVzdGVkIHx8IG1fY3JlYXRlZEJ5UGFyc2VyIHx8ICFtX2VsZW1lbnQtPmluRG9jdW1lbnQo
KTsKKyAgICByZXR1cm4gbV9pc0V2YWx1YXRlZCB8fCBtX3JlcXVlc3RlZCB8fCBtX2NyZWF0ZWRC
eVBhcnNlciB8fCAhbV9lbGVtZW50LT5pbkRvY3VtZW50KCk7CiB9CiAKIGJvb2wgU2NyaXB0RWxl
bWVudERhdGE6OnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdApAQCAtMzQzLDQgKzM1
OCwxNSBAQCBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnQoRWxlbWVudCogCiAgICAgcmV0
dXJuIDA7CiB9CiAKK3ZvaWQgZXhlY3V0ZVNjcmlwdChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAg
ICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzY3JpcHRUYWcpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVu
dCo+KGVsZW1lbnQpLT5tX2RhdGEuZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKKyNpZiBFTkFC
TEUoU1ZHKQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIGVsZW1lbnQt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNjcmlwdFRhZykpCisgICAgICAgIHN0YXRpY19jYXN0PFNW
R1NjcmlwdEVsZW1lbnQqPihlbGVtZW50KS0+bV9kYXRhLmV4ZWN1dGVTY3JpcHQoc291cmNlQ29k
ZSk7CisjZW5kaWYKK30KKwogfQpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gNzE3OTcp
CisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcg
KzY4LDcgQEAgcHJvdGVjdGVkOgogLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIg
ZnVuY3Rpb25zIGluIFNjcmlwdEVsZW1lbnQKIGNsYXNzIFNjcmlwdEVsZW1lbnREYXRhIDogcHJp
dmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0RWxlbWVudERh
dGEoU2NyaXB0RWxlbWVudCosIEVsZW1lbnQqKTsKKyAgICBTY3JpcHRFbGVtZW50RGF0YShTY3Jp
cHRFbGVtZW50KiwgRWxlbWVudCosIGJvb2wgaXNFdmFsdWF0ZWQpOwogICAgIHZpcnR1YWwgflNj
cmlwdEVsZW1lbnREYXRhKCk7CiAKICAgICBib29sIGlnbm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0
OwpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQoKSBj
b25zdDsKICAgICBib29sIGlzQXN5bmNocm9ub3VzKCkgY29uc3Q7CiAgICAgYm9vbCBpc0RlZmVy
cmVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0V2YWx1YXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
dmFsdWF0ZWQ7IH0KIAogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQ7IH0KICAgICBib29sIGNyZWF0ZWRCeVBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Jl
YXRlZEJ5UGFyc2VyOyB9CkBAIC04Nyw2ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVx
dWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7CiAgICAgdm9pZCBldmFsdWF0ZVNj
cmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICB2b2lkIHN0b3BMb2FkUmVxdWVzdCgpOwogCiAg
ICAgdm9pZCBleGVjdXRlKENhY2hlZFNjcmlwdCopOwpAQCAtMTAwLDExICsxMDIsMTIgQEAgcHJp
dmF0ZToKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2Ny
aXB0OwogICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7IC8vIEhUTUw1OiAicGFyc2VyLWluc2Vy
dGVkIgogICAgIGJvb2wgbV9yZXF1ZXN0ZWQ7Ci0gICAgYm9vbCBtX2V2YWx1YXRlZDsgLy8gSFRN
TDU6ICJhbHJlYWR5IHN0YXJ0ZWQiCisgICAgYm9vbCBtX2lzRXZhbHVhdGVkOyAvLyBIVE1MNTog
ImFscmVhZHkgc3RhcnRlZCIKICAgICBib29sIG1fZmlyZWRMb2FkOwogfTsKIAogU2NyaXB0RWxl
bWVudCogdG9TY3JpcHRFbGVtZW50KEVsZW1lbnQqKTsKK3ZvaWQgZXhlY3V0ZVNjcmlwdChFbGVt
ZW50KiwgY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTAs
NyArOTEwLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0
ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwg
ZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOworICAgICAgICAgICAg
ZXhlY3V0ZVNjcmlwdChlbGVtZW50LCBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNj
cmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikp
OwogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgog
ICAgICAgICBpZiAoaXNEZXRhY2hlZCgpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTFNjcmlwdEVsZW1lbnQ6
OkhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgSFRNTFNjcmlwdEVsZW1l
bnQ6OkhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFsdWF0ZWQpCiAg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZGF0YSh0aGlzLCB0
aGlzKQorICAgICwgbV9kYXRhKHRoaXMsIHRoaXMsIGlzRXZhbHVhdGVkKQogewogICAgIEFTU0VS
VChoYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgIG1fZGF0YS5zZXRDcmVhdGVkQnlQYXJzZXIo
Y3JlYXRlZEJ5UGFyc2VyKTsKQEAgLTQ1LDcgKzQ1LDcgQEAgaW5saW5lIEhUTUxTY3JpcHRFbGVt
ZW50OjpIVE1MU2NyaXB0RWxlbQogCiBQYXNzUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBIVE1M
U2NyaXB0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFy
c2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyLCBmYWxzZSkpOwogfQogCiBib29sIEhUTUxTY3Jp
cHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CkBAIC0xOTQs
NCArMTk0LDEwIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmUKICAg
ICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRy
dWUsIGZhbHNlKSk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3luY2VkIHdp
dGggRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuCitQYXNzUmVmUHRyPEVsZW1l
bnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENo
aWxkcmVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVt
ZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBtX2RhdGEuaXNFdmFsdWF0ZWQoKSkp
OworfQorCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gNzE3OTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXZlRmlyZWRMb2FkRXZlbnQoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuaGF2ZUZpcmVkTG9hZEV2ZW50KCk7IH0KIAogcHJpdmF0ZToKLSAg
ICBIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29s
IGNyZWF0ZWRCeVBhcnNlcik7CisgICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFsdWF0ZWQp
OwogCiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q29udGVudCgpIGNvbnN0OwogCkBAIC03MSw2
ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogCisgICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29u
c3Q7CisgICAgZnJpZW5kIHZvaWQgZXhlY3V0ZVNjcmlwdChFbGVtZW50KiwgY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSk7CisKICAgICBTY3JpcHRFbGVtZW50RGF0YSBtX2RhdGE7
CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAJKHJl
dmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTFNj
cmlwdFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0UnVubmVySG9zdC5oIgogI2luY2x1
ZGUgIklnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmgiCiAjaW5jbHVkZSAi
TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpA
QCAtMTQwLDYgKzE0MCw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdT
Y3IKICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50
LT5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdEVycm9yRXZlbnQoKSk7CiAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwogICAgICAgICAgICAg
ZXhlY3V0ZVNjcmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzb3VyY2VDb2RlKTsKICAgICAgICAg
ICAgIHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkp
OwogICAgICAgICB9CkBAIC0xNDcsMTcgKzE0OCw2IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6
ZXhlY3V0ZVBlbmRpbmdTY3IKICAgICBBU1NFUlQoIW1fc2NyaXB0TmVzdGluZ0xldmVsKTsKIH0K
IAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBBU1NFUlQo
aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZnJh
bWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotfQotCiB2b2lkIEhUTUxT
Y3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQog
ewogICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQoKSk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkocmV2aXNpb24gNzE3OTcpCisrKyBX
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5n
U2NyaXB0KCk7CiAgICAgdm9pZCBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQo
UGVuZGluZ1NjcmlwdCYpOwotICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChFbGVtZW50KiwgY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYpIGNvbnN0OwogICAgIGJvb2wgaGF2ZVBhcnNpbmdCbG9ja2luZ1Nj
cmlwdCgpIGNvbnN0OwogICAgIGJvb2wgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKTsK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDcxNzk3KQorKysgV2Vi
Q29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICsz
MSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBTVkdTY3JpcHRFbGVtZW50
OjpTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgU1ZHU2NyaXB0RWxlbWVu
dDo6U1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVhdGVkKQogICAg
IDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fZGF0YSh0aGlzLCB0aGlz
KQorICAgICwgbV9kYXRhKHRoaXMsIHRoaXMsIGlzRXZhbHVhdGVkKQogewogICAgIG1fZGF0YS5z
ZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKIH0KIAogUGFzc1JlZlB0cjxTVkdT
Y3JpcHRFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQsIGNyZWF0ZWRCeVBhcnNlcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHU2NyaXB0
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyLCBmYWxzZSkpOwogfQog
CiBTdHJpbmcgU1ZHU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvbnN0CkBAIC0yNDYs
NiArMjQ2LDExIEBAIGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0ZUFzSmEKICAg
ICByZXR1cm4gbV9kYXRhLnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKTsKIH0KIAorUGFzc1Jl
ZlB0cjxFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmli
dXRlc0FuZENoaWxkcmVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1Nj
cmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIG1fZGF0YS5pc0V2YWx1
YXRlZCgpKSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2Ny
aXB0RWxlbWVudC5oCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgICAgICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlz
RXZhbHVhdGVkKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBzY3JpcHRDb250ZW50KCkgY29u
c3Q7CiAKQEAgLTc1LDYgKzc1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRXJyb3JFdmVudCgpOwogCisgICAgICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OworICAgICAgICBmcmllbmQg
dm9pZCBleGVjdXRlU2NyaXB0KEVsZW1lbnQqLCBjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlKTsKKwogICAgICAgICAvLyBTVkdVUklSZWZlcmVuY2UKICAgICAgICAgREVDTEFSRV9B
TklNQVRFRF9TVEFUSUNfUFJPUEVSVFlfTkVXKFNWR1NjcmlwdEVsZW1lbnQsIFhMaW5rTmFtZXM6
OmhyZWZBdHRyLCBTdHJpbmcsIEhyZWYsIGhyZWYpCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxODM2
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTAtMTEtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2NyaXB0IHJ1bnMgbW9y
ZSB0aGFuIG9uY2UgYWZ0ZXIgYSBjbG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDg5NjYKKworICAgICAgICBBZGRlZCB0ZXN0cyB0byBlbnN1cmUg
V2ViS2l0IGRvZXMgbm90IGV2YWx1YXRlIHRoZSBzY3JpcHQgb2YgYSBjbG9uZSBvZgorICAgICAg
ICBhIHNjcmlwdCBlbGVtZW50IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgKGhhcyBh
bHJlYWR5IHN0YXJ0ZWQpLgorCisgICAgICAgIFNlZSBhbHNvOiBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNhbHJlYWR5LXN0YXJ0ZWQKKworICAgICAg
ICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2Ny
aXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcv
ZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLnN2
ZzogQWRkZWQuCisKIDIwMTAtMTEtMTEgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDsgYWRkIG1pc3NpbmcgYmFzZWxpbmUgY2hlY2tz
dW1zLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUt
cmVydW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2NyaXB0LWNsb25lLXJlcnVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
IEBACitUaGlzIHRlc3RzIGNsb25pbmcgYSBzY3JpcHQgZWxlbWVudCB0aGF0IGhhcyBhbHJlYWR5
IHN0YXJ0ZWQgYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBkb2N1bWVudCBkb2VzIG5vdCByZS1y
dW4gdGhlIHNjcmlwdC4gWW91IHNob3VsZCBzZWUgUEFTUzoKKworUEFTUwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1j
bG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitUaGlzIHRlc3QgcnVucyBhIHNjcmlwdCB0aGF0IGNsb25lcyBhbmQgaW5zZXJ0cyBpdHMgc2Ny
aXB0IGVsZW1lbnQuIFRoZSBzY3JpcHQgc2hvdWxkIHJ1biBleGFjdGx5IG9uY2UgYW5kIHByaW50
IFBBU1M6CisKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1y
ZXJ1bi1zZWxmLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LWNsb25lLXJlcnVuLXNlbGYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzMgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFyIGkgPSAwOwor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdCBydW5zIGEgc2NyaXB0IHRo
YXQgY2xvbmVzIGFuZCBpbnNlcnRzIGl0cyBzY3JpcHQgZWxlbWVudC4gVGhlIHNjcmlwdCBzaG91
bGQgcnVuIGV4YWN0bHkgb25jZSBhbmQgcHJpbnQgUEFTUzo8L3A+Cis8ZGl2PjxzY3JpcHQ+Citp
Kys7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0
JylbMV07Cit2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7CitkaXYucmVtb3ZlQ2hpbGQoc2Ny
aXB0KTsKK2Rpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworPC9zY3Jp
cHQ+PC9kaXY+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworcmVzdWx0ID0gJ1BBU1Mn
OworaWYgKGkgPT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxz
ZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1l
cyc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJl
c3VsdCkpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFy
IGkgPSAwOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgY2xvbmlu
ZyBhIHNjcmlwdCBlbGVtZW50IHRoYXQgaGFzIGFscmVhZHkgc3RhcnRlZCBhbmQgaW5zZXJ0aW5n
IGl0IGludG8gdGhlIGRvY3VtZW50IGRvZXMgbm90IHJlLXJ1biB0aGUgc2NyaXB0LiBZb3Ugc2hv
dWxkIHNlZSBQQVNTOjwvcD4KKzxkaXY+PHNjcmlwdD4gaSsrIDwvc2NyaXB0PjwvZGl2PgorPHNj
cmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7
CitkaXYucmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2Rpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVO
b2RlKHRydWUpKTsKKworcmVzdWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAgcmVzdWx0ID0g
J0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9ICdG
QUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOworCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9z
Y3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3Nj
cmlwdC1jbG9uZS1yZXJ1bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBA
QAorVGhpcyB0ZXN0cyBjbG9uaW5nIGEgc2NyaXB0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBz
dGFydGVkIGFuZCBpbnNlcnRpbmcgaXQgaW50byB0aGUgZG9jdW1lbnQgZG9lcyBub3QgcmUtcnVu
IHRoZSBzY3JpcHQuIFlvdSBzaG91bGQgc2VlIFBBU1M6CitQQVNTCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVu
dC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNl
bGYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBy
dW5zIGEgc2NyaXB0IHRoYXQgY2xvbmVzIGFuZCBpbnNlcnRzIGl0cyBzY3JpcHQgZWxlbWVudC4g
VGhlIHNjcmlwdCBzaG91bGQgcnVuIGV4YWN0bHkgb25jZSBhbmQgcHJpbnQgUEFTUzoKK1BBU1MK
SW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUt
cmVydW4tc2VsZi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3Jp
cHRFbGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLnN2ZwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2Vs
Zi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4
bWxuczp4aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8ZGVmcz4KKzxzY3Jp
cHQ+Cit2YXIgaSA9IDA7Cis8L3NjcmlwdD4KKzwvZGVmcz4KKzx0ZXh0IHg9IjE1IiB5PSIzMCIg
Zm9udC1zaXplPSIxNSI+VGhpcyB0ZXN0IHJ1bnMgYSBzY3JpcHQgdGhhdCBjbG9uZXMgYW5kIGlu
c2VydHMgaXRzIHNjcmlwdCBlbGVtZW50LiBUaGUgc2NyaXB0IHNob3VsZCBydW4gZXhhY3RseSBv
bmNlIGFuZCBwcmludCBQQVNTOjwvdGV4dD4KKzxkZWZzPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgoraSsrOworCit2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ3NjcmlwdCcpWzFdOwordmFyIGRlZnMgPSBzY3JpcHQucGFyZW50Tm9kZTsKK2RlZnMu
cmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2RlZnMuYXBwZW5kQ2hpbGQoc2NyaXB0LmNsb25lTm9kZSh0
cnVlKSk7CisKKzwvc2NyaXB0PjwvZGVmcz4KKzxkZWZzPjxzY3JpcHQ+CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCityZXN1bHQgPSAnUEFTUyc7CitpZiAoaSA9PSAyKQorICByZXN1bHQgPSAnRkFJTDog
c2NyaXB0IHJhbiB0d2ljZSc7CitlbHNlIGlmIChpID4gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNj
cmlwdCByYW4gJyArIGkgKyAnIHRpbWVzJzsKKyAgCit2YXIgdGV4dEVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInRleHQiKTsK
K3RleHRFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0OwordGV4dEVsZW1lbnQuc2V0QXR0cmli
dXRlKCd4JywgMTUpOwordGV4dEVsZW1lbnQuc2V0QXR0cmlidXRlKCd5JywgNDUrMTApOwordGV4
dEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAxNSk7Citkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQodGV4dEVsZW1lbnQpOworCis8L3Nj
cmlwdD48L2RlZnM+Cis8L3N2Zz4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0
RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjcmlwdC1jbG9u
ZS1yZXJ1bi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs
aW5rIiB4bWxuczp4aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8ZGVmcz4K
KzxzY3JpcHQ+Cit2YXIgaSA9IDA7Cis8L3NjcmlwdD4KKzwvZGVmcz4KKzx0ZXh0IHg9IjE1IiB5
PSIzMCIgZm9udC1zaXplPSIxNSI+VGhpcyB0ZXN0cyBjbG9uaW5nIGEgc2NyaXB0IGVsZW1lbnQg
dGhhdCBoYXMgYWxyZWFkeSBzdGFydGVkIGFuZCBpbnNlcnRpbmcgaXQgaW50byB0aGUgZG9jdW1l
bnQgZG9lcyBub3QgcmUtcnVuIHRoZSBzY3JpcHQuIFlvdSBzaG91bGQgc2VlIFBBU1M6PC90ZXh0
PgorPGRlZnM+PHNjcmlwdD4gaSsrOyA8L3NjcmlwdD48L2RlZnM+Cis8ZGVmcz4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBzY3JpcHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGVmcyA9
IHNjcmlwdC5wYXJlbnROb2RlOworZGVmcy5yZW1vdmVDaGlsZChzY3JpcHQpOworZGVmcy5hcHBl
bmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworcmVzdWx0ID0gJ1BBU1MnOworaWYg
KGkgPT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxzZSBpZiAo
aSA+IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7CisK
K3ZhciB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciLCAidGV4dCIpOwordGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1
bHQ7Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3gnLCAxNSk7Cit0ZXh0RWxlbWVudC5zZXRB
dHRyaWJ1dGUoJ3knLCA0NSsxMCk7Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6
ZScsIDE1KTsKK2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRD
aGlsZCh0ZXh0RWxlbWVudCk7CisKKzwvc2NyaXB0PgorPC9kZWZzPgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73659</attachid>
            <date>2010-11-11 14:14:23 -0800</date>
            <delta_ts>2010-11-11 23:50:49 -0800</delta_ts>
            <desc>Fixed more</desc>
            <filename>bug-48966-20101111141421.patch</filename>
            <type>text/plain</type>
            <size>26479</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTg0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Ny
aXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2UgYWZ0ZXIgYSBjbG9uZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg5NjYKKworICAgICAgICBUaGUgYnVnIHdh
cyBjYXVzZWQgYnkgY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuJ3Mgbm90IHByb3BhZ2F0aW5n
IGlzRXZhbHVhdGVkIGZsYWcsCisgICAgICAgIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIG9yIG5v
dCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQsIGFuZCB0aGUgZmFjdAorICAgICAgICBu
ZWl0aGVyIEhUTUxTY3JpcHRSdW5uZXIgbm9yIFhNTERvY3VtZW50UGFyc2VyIHdhcyBzZXR0aW5n
IGlzRXZhbHVhdGVkIGZsYWcgdG8gdHJ1ZS4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IG1h
a2luZyBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4gY2FsbCBhIHZpcnR1YWwgY2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbiwKKyAgICAgICAgYW5kIG92ZXJyaWRlIGl0
IGluIEhUTUxTY3JpcHRFbGVtZW50IGFuZCBTVkdTY3JpcHRFbGVtZW50IHRvIHByb3BhZ2F0ZSBp
c0V2YWx1YXRlZCBmbGFnLAorICAgICAgICBhbmQgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3MgdG8g
U2NyaXB0Q29udHJvbGxlciBieSBhIGNhbGwgdG8gbmV3IFNjcmlwdEVsZW1lbnREYXRhOjpleGVj
dXRlU2NyaXB0LAorICAgICAgICB3aGljaCB1cGRhdGVzIHRoZSBpc0V2YWx1YXRlZCBmbGFnIHBy
b3Blcmx5LgorCisgICAgICAgIFNlZSBhbHNvOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrLyNhbHJlYWR5LXN0YXJ0ZWQKKworICAgICAgICBUZXN0czog
ZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWwKKyAgICAgICAgICAgICAgIHN2Zy9kb20vU1ZH
U2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcKKyAgICAgICAgICAgICAg
IHN2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVs
ZW1lbnRXaXRob3V0Q2hpbGRyZW4pOiBDYWxscyBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4u
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRl
c0FuZENoaWxkcmVuKTogRXh0cmFjdGVkIGZyb20gY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVu
LgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1lbnRE
YXRhKTogQWRkZWQgaXNFdmFsdWF0ZWQgZmxhZyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdCk6IEV4dHJhY3Rl
ZCBmcm9tIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdCk6IFJlbmFtZWQgZXZhbHVhdGVkIHRv
IGlzRXZhbHVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6Omlnbm9y
ZXNMb2FkUmVxdWVzdCk6IFJlbmFtZWQgZXZhbHVhdGVkIHRvIGlzRXZhbHVhdGVkLgorICAgICAg
ICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6IFJlbmFtZWQgZXZhbHVhdGVkIHRvIGlzRXZhbHVhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmlzRXZhbHVhdGVkKTogQWRk
ZWQuCisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKTogQ2FsbHMgU2NyaXB0
RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdC4KKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxl
bWVudCk6IEFkZGVkIGlzRXZhbHVhdGVkIGZsYWcgdG8gdGhlIGFyZ3VtZW50IGxpc3QuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKTogQ2FsbHMgdGhlIGNvbnN0
cnVjdG9yIHdpdGggdGhlIGlzRXZhbHVhdGVkIGZsYWcgc2V0IHRvIGZhbHNlLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVz
QW5kQ2hpbGRyZW4pOiBQcm9wYWdhdGVzIGlzRXZhbHVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQpOiBBZGRlZDsgY2FsbHMgU2NyaXB0RWxl
bWVudERhdGE6OmV4ZWN1dGVTY3JpcHQuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNw
YXRjaEV2ZW50KTogQWRkZWQgYW4gYXNzZXJ0aW9uIHRoYXQgd2FzIGxvc3QKKyAgICAgICAgaW4g
ZXh0cmFjdGluZyBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdCk6IENhbGxzIFNjcmlwdEVsZW1lbnRE
YXRhOjpleGVjdXRlU2NyaXB0LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuaDoKKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTY3JpcHRFbGVtZW50OjpTVkdTY3JpcHRFbGVtZW50KTogQWRkZWQgaXNFdmFsdWF0
ZWQgZmxhZyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Njcmlw
dEVsZW1lbnQ6OmNyZWF0ZSk6IENhbGxzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBpc0V2YWx1
YXRlZCBmbGFnIHNldCB0byBmYWxzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1l
bnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOiBQcm9wYWdhdGVz
IGlzRXZhbHVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6ZXhlY3V0
ZVNjcmlwdCk6IEFkZGVkOyBjYWxscyBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdC4K
KyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5oOgorCiAyMDEwLTExLTExICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDExICsxNTksNyBAQCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IEVsZW1lbnQ6OmNsb25lRWxlbWVuCiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVu
dDo6Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCkKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4g
Y2xvbmUgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhZ1FOYW1lKCksIGZhbHNlKTsKLSAg
ICAvLyBUaGlzIHdpbGwgY2F0Y2ggSFRNTCBlbGVtZW50cyBpbiB0aGUgd3JvbmcgbmFtZXNwYWNl
IHRoYXQgYXJlIG5vdCBjb3JyZWN0bHkgY29waWVkLgotICAgIC8vIFRoaXMgaXMgYSBzYW5pdHkg
Y2hlY2sgYXMgSFRNTCBvdmVybG9hZHMgc29tZSBvZiB0aGUgRE9NIG1ldGhvZHMuCi0gICAgQVNT
RVJUKGlzSFRNTEVsZW1lbnQoKSA9PSBjbG9uZS0+aXNIVE1MRWxlbWVudCgpKTsKLQorICAgIFJl
ZlB0cjxFbGVtZW50PiBjbG9uZSA9IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hp
bGRyZW4oKTsKICAgICAvLyBDYWxsIGF0dHJpYnV0ZXModHJ1ZSkgdG8gZm9yY2UgYXR0cmlidXRl
IHN5bmNocm9uaXphdGlvbiB0byBvY2N1ciBmb3IgU1ZHIGFuZCBzdHlsZSBhdHRyaWJ1dGVzLgog
ICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IGF0dHJpYnV0ZXModHJ1ZSkpCiAg
ICAgICAgIGNsb25lLT5hdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1hcCk7
CkBAIC0xNzMsNiArMTY5LDE1IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVF
bGVtZW4KICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPEVsZW1l
bnQ+IEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBj
b25zdAoreworICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQodGFnUU5hbWUoKSwgZmFsc2UpOworICAgIC8vIFRoaXMgd2lsbCBjYXRjaCBIVE1MIGVs
ZW1lbnRzIGluIHRoZSB3cm9uZyBuYW1lc3BhY2UgdGhhdCBhcmUgbm90IGNvcnJlY3RseSBjb3Bp
ZWQuCisgICAgLy8gVGhpcyBpcyBhIHNhbml0eSBjaGVjayBhcyBIVE1MIG92ZXJsb2FkcyBzb21l
IG9mIHRoZSBET00gbWV0aG9kcy4KKyAgICBBU1NFUlQoaXNIVE1MRWxlbWVudCgpID09IGNsb25l
LT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBjbG9uZTsKK30KKwogdm9pZCBFbGVtZW50
OjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7CkluZGV4OiBXZWJDb3JlL2RvbS9F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA3
MTc5NykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYg
KzE5OSw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50
V2l0aENoaWxkcmVuKCk7CiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRo
b3V0Q2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OwogCiAgICAgdm9pZCBub3Jt
YWxpemVBdHRyaWJ1dGVzKCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTMgKzEzMCwx
MyBAQCBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRMYW5ndWFnCiB9CiAKIC8vIFNj
cmlwdEVsZW1lbnREYXRhCi1TY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2Ny
aXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCkKK1NjcmlwdEVsZW1l
bnREYXRhOjpTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBF
bGVtZW50KiBlbGVtZW50LCBib29sIGlzRXZhbHVhdGVkKQogICAgIDogbV9zY3JpcHRFbGVtZW50
KHNjcmlwdEVsZW1lbnQpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fY2FjaGVk
U2NyaXB0KDApCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKICAgICAsIG1fcmVxdWVz
dGVkKGZhbHNlKQotICAgICwgbV9ldmFsdWF0ZWQoZmFsc2UpCisgICAgLCBtX2lzRXZhbHVhdGVk
KGlzRXZhbHVhdGVkKQogICAgICwgbV9maXJlZExvYWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RWxlbWVudCk7CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0
YTo6cmVxdWVzdFNjcmlwdChjbwogCiB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNj
cmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIGlmIChtX2V2
YWx1YXRlZCB8fCBzb3VyY2VDb2RlLmlzRW1wdHkoKSB8fCAhc2hvdWxkRXhlY3V0ZUFzSmF2YVNj
cmlwdCgpKQorICAgIGlmIChtX2lzRXZhbHVhdGVkIHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpIHx8
ICFzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCk7CkBAIC0xODks
NyArMTg5LDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3JpcHQoYwogICAg
ICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1
dGVTY3JpcHQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZXZhbHVhdGVkID0g
dHJ1ZTsKKyAgICAgICAgbV9pc0V2YWx1YXRlZCA9IHRydWU7CiAKICAgICAgICAgLy8gaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0CiAKQEAg
LTIwNSw2ICsyMDUsMjEgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3JpcHQo
YwogICAgIH0KIH0KIAordm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdChjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQoreworICAgIGlmIChtX2lzRXZhbHVhdGVk
IHx8IHNvdXJjZUNvZGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPERv
Y3VtZW50PiBkb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNFdmFsdWF0ZWQgPSB0cnVlOworCisg
ICAgZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworfQorCiB2b2lk
IFNjcmlwdEVsZW1lbnREYXRhOjpzdG9wTG9hZFJlcXVlc3QoKQogewogICAgIGlmIChtX2NhY2hl
ZFNjcmlwdCkgewpAQCAtMjM0LDcgKzI0OSw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6Om5v
dGlmeUZpbmlzaGVkKEMKIAogYm9vbCBTY3JpcHRFbGVtZW50RGF0YTo6aWdub3Jlc0xvYWRSZXF1
ZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ldmFsdWF0ZWQgfHwgbV9yZXF1ZXN0ZWQgfHwg
bV9jcmVhdGVkQnlQYXJzZXIgfHwgIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpOworICAgIHJldHVy
biBtX2lzRXZhbHVhdGVkIHx8IG1fcmVxdWVzdGVkIHx8IG1fY3JlYXRlZEJ5UGFyc2VyIHx8ICFt
X2VsZW1lbnQtPmluRG9jdW1lbnQoKTsKIH0KIAogYm9vbCBTY3JpcHRFbGVtZW50RGF0YTo6c2hv
dWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCShyZXZp
c2lvbiA3MTc5NykKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hh
cnNldCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZh
U2NyaXB0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIHVzZWQgYnkgb3VyIHBhcmVudCBjbGFzc2VzLgpAQCAtNjgsNyArNjksNyBAQCBwcm90
ZWN0ZWQ6CiAvLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4g
U2NyaXB0RWxlbWVudAogY2xhc3MgU2NyaXB0RWxlbWVudERhdGEgOiBwcml2YXRlIENhY2hlZFJl
c291cmNlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBTY3JpcHRFbGVtZW50RGF0YShTY3JpcHRFbGVt
ZW50KiwgRWxlbWVudCopOworICAgIFNjcmlwdEVsZW1lbnREYXRhKFNjcmlwdEVsZW1lbnQqLCBF
bGVtZW50KiwgYm9vbCBpc0V2YWx1YXRlZCk7CiAgICAgdmlydHVhbCB+U2NyaXB0RWxlbWVudERh
dGEoKTsKIAogICAgIGJvb2wgaWdub3Jlc0xvYWRSZXF1ZXN0KCkgY29uc3Q7CkBAIC03OCw2ICs3
OSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0OwogICAgIGJv
b2wgaXNBc3luY2hyb25vdXMoKSBjb25zdDsKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdDsK
KyAgICBib29sIGlzRXZhbHVhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0V2YWx1YXRlZDsgfQog
CiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogICAg
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGVkQnlQYXJzZXI7
IH0KQEAgLTg3LDYgKzg5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXF1ZXN0U2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlVXJsKTsKICAgICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291
cmNlQ29kZSYpOwogICAgIHZvaWQgc3RvcExvYWRSZXF1ZXN0KCk7CiAKICAgICB2b2lkIGV4ZWN1
dGUoQ2FjaGVkU2NyaXB0Kik7CkBAIC0xMDAsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwogICAgIGJvb2wg
bV9jcmVhdGVkQnlQYXJzZXI7IC8vIEhUTUw1OiAicGFyc2VyLWluc2VydGVkIgogICAgIGJvb2wg
bV9yZXF1ZXN0ZWQ7Ci0gICAgYm9vbCBtX2V2YWx1YXRlZDsgLy8gSFRNTDU6ICJhbHJlYWR5IHN0
YXJ0ZWQiCisgICAgYm9vbCBtX2lzRXZhbHVhdGVkOyAvLyBIVE1MNTogImFscmVhZHkgc3RhcnRl
ZCIKICAgICBib29sIG1fZmlyZWRMb2FkOwogfTsKIApJbmRleDogV2ViQ29yZS9kb20vWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCw3ICs5MTAs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVu
dCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgICAgICBzY3JpcHRF
bGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2Ny
aXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7
CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAg
ICAgICAgIGlmIChpc0RldGFjaGVkKCkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBIVE1MU2NyaXB0RWxlbWVudDo6
SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK2lubGluZSBIVE1MU2NyaXB0RWxlbWVu
dDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBpc0V2YWx1YXRlZCkKICAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9kYXRhKHRoaXMsIHRo
aXMpCisgICAgLCBtX2RhdGEodGhpcywgdGhpcywgaXNFdmFsdWF0ZWQpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgbV9kYXRhLnNldENyZWF0ZWRCeVBhcnNlcihj
cmVhdGVkQnlQYXJzZXIpOwpAQCAtNDUsNyArNDUsNyBAQCBpbmxpbmUgSFRNTFNjcmlwdEVsZW1l
bnQ6OkhUTUxTY3JpcHRFbGVtCiAKIFBhc3NSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IEhUTUxT
Y3JpcHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJz
ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTY3JpcHRFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIsIGZhbHNlKSk7CiB9CiAKIGJvb2wgSFRNTFNjcmlw
dEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKQEAgLTE5NCw0
ICsxOTQsMTQgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJvckV2ZQogICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1
ZSwgZmFsc2UpKTsKIH0KIAorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MU2NyaXB0RWxlbWVudDo6
Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1bWVu
dCgpLCBmYWxzZSwgbV9kYXRhLmlzRXZhbHVhdGVkKCkpKTsKK30KKwordm9pZCBIVE1MU2NyaXB0
RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
KQoreworICAgIHJldHVybiBtX2RhdGEuZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKK30KKwog
fQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDcxNzk3KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmhhdmVGaXJlZExvYWRFdmVudCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFNj
cmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpOworICAgIEhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29sIGlzRXZhbHVhdGVkKTsKIAogICAg
IHZpcnR1YWwgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25zdDsKIApAQCAtNzEsNiArNzEsOSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKIAorICAgIFBhc3NSZWZQdHI8RWxlbWVu
dD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OworICAg
IHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKTsK
KwogICAgIFNjcmlwdEVsZW1lbnREYXRhIG1fZGF0YTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAkocmV2aXNpb24gNzE3OTcpCisrKyBXZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5
ICszMiw5IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0UnVubmVySG9zdC5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSWdub3JlRGVzdHJ1Y3RpdmVXcml0
ZUNvdW50SW5jcmVtZW50ZXIuaCIKICNpbmNsdWRlICJOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlci5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xMzMsMzEgKzEzMywyMiBAQCB2b2lk
IEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyCiAgICAgICAgIHN0b3BXYXRjaGlu
Z0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiAKICAgICAvLyBDbGVhciB0aGUgcGVuZGluZyBzY3Jp
cHQgYmVmb3JlIHBvc3NpYmxlIHJlbnRyYW5jeSBmcm9tIGV4ZWN1dGVTY3JpcHQoKQotICAgIFJl
ZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gcGVuZGluZ1NjcmlwdC5yZWxlYXNlRWxlbWVu
dEFuZENsZWFyKCk7Ci0gICAgeworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gcGVuZGlu
Z1NjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7CisgICAgU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChlbGVtZW50LmdldCgpKTsKKyAgICBpZiAoc2Ny
aXB0RWxlbWVudCkgewogICAgICAgICBOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2
ZWxJbmNyZW1lbnRlcihtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAgICAgIElnbm9yZURlc3Ry
dWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudElu
Y3JlbWVudGVyKG1fZG9jdW1lbnQpOwogICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAg
ICAgICAgIHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0RXJyb3JFdmVu
dCgpKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0RXJy
b3JFdmVudCgpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNj
cmlwdEVsZW1lbnQuZ2V0KCksIHNvdXJjZUNvZGUpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVu
dC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7CisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5l
eGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAgICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hF
dmVudChjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNT
RVJUKCFtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6
ZXhlY3V0ZVNjcmlwdChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlKSBjb25zdAotewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBBU1NFUlQoZWxl
bWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAg
IEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlw
dChzb3VyY2VDb2RlKTsKLX0KLQogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjp3YXRjaEZvckxvYWQo
UGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsKICAgICBBU1NFUlQoIXBlbmRpbmdTY3Jp
cHQud2F0Y2hpbmdGb3JMb2FkKCkpOwpAQCAtMzIwLDcgKzMxMSw3IEBAIHZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQKICAgICAgICAgICAgIC8vIEFTU0VSVChkb2N1bWVu
dCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXNFeGVj
dXRpbmdTY3JpcHQoKSk7CiAgICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUo
c2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2Rv
Y3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBleGVjdXRlU2NyaXB0
KHNjcmlwdCwgc291cmNlQ29kZSk7CisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRl
U2NyaXB0KHNvdXJjZUNvZGUpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgp
OwogICAgIHZvaWQgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdT
Y3JpcHQmKTsKLSAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoRWxlbWVudCosIGNvbnN0IFNjcmlwdFNv
dXJjZUNvZGUmKSBjb25zdDsKICAgICBib29sIGhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSBj
b25zdDsKICAgICBib29sIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7CiAKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTc5NykKKysrIFdlYkNvcmUvc3Zn
L1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgU1ZHU2NyaXB0RWxlbWVudDo6U1ZHU2Ny
aXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1l
bnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoraW5saW5lIFNWR1NjcmlwdEVsZW1lbnQ6OlNWR1Nj
cmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBpc0V2YWx1YXRlZCkKICAgICA6IFNWR0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2RhdGEodGhpcywgdGhpcykKKyAgICAs
IG1fZGF0YSh0aGlzLCB0aGlzLCBpc0V2YWx1YXRlZCkKIHsKICAgICBtX2RhdGEuc2V0Q3JlYXRl
ZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHU2NyaXB0RWxl
bWVudD4gU1ZHU2NyaXB0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVh
dGVkQnlQYXJzZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlciwgZmFsc2UpKTsKIH0KIAogU3RyaW5n
IFNWR1NjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQoKSBjb25zdApAQCAtMjQ2LDYgKzI0Niwx
NiBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6OnNob3VsZEV4ZWN1dGVBc0phCiAgICAgcmV0dXJu
IG1fZGF0YS5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCk7CiB9CiAKK1Bhc3NSZWZQdHI8RWxl
bWVudD4gU1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRD
aGlsZHJlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVt
ZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBtX2RhdGEuaXNFdmFsdWF0ZWQoKSkp
OworfQorCit2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSkKK3sKKyAgICBtX2RhdGEuZXhlY3V0ZVNjcmlwdChzb3Vy
Y2VDb2RlKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmgJKHJldmlzaW9uIDcxNzk3KQorKysgV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgU1ZHU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
LCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgICAgIFNWR1NjcmlwdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIGJvb2wgaXNF
dmFsdWF0ZWQpOwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25z
dDsKIApAQCAtNzUsNiArNzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hFcnJvckV2ZW50KCk7CiAKKyAgICAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1l
bnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3Q7CisgICAgICAgIHZvaWQgZXhl
Y3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKTsKKwogICAgICAg
ICAvLyBTVkdVUklSZWZlcmVuY2UKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9TVEFUSUNfUFJP
UEVSVFlfTkVXKFNWR1NjcmlwdEVsZW1lbnQsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBTdHJpbmcs
IEhyZWYsIGhyZWYpCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxODM2KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTEtMTEgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2NyaXB0IHJ1bnMgbW9yZSB0aGFuIG9uY2UgYWZ0ZXIg
YSBjbG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg5NjYKKworICAgICAgICBBZGRlZCB0ZXN0cyB0byBlbnN1cmUgV2ViS2l0IGRvZXMgbm90IGV2
YWx1YXRlIHRoZSBzY3JpcHQgb2YgYSBjbG9uZSBvZgorICAgICAgICBhIHNjcmlwdCBlbGVtZW50
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgKGhhcyBhbHJlYWR5IHN0YXJ0ZWQpLgor
CisgICAgICAgIFNlZSBhbHNvOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrLyNhbHJlYWR5LXN0YXJ0ZWQKKworICAgICAgICAqIGZhc3QvZG9tL3Njcmlw
dC1jbG9uZS1yZXJ1bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3Nj
cmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9kb20v
U1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNl
bGYtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1l
bnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZG9t
L1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLnN2ZzogQWRkZWQuCisKIDIwMTAt
MTEtMTEgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZDsgYWRkIG1pc3NpbmcgYmFzZWxpbmUgY2hlY2tzdW1zLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVu
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3RzIGNs
b25pbmcgYSBzY3JpcHQgZWxlbWVudCB0aGF0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgYW5kIGluc2Vy
dGluZyBpdCBpbnRvIHRoZSBkb2N1bWVudCBkb2VzIG5vdCByZS1ydW4gdGhlIHNjcmlwdC4gWW91
IHNob3VsZCBzZWUgUEFTUzoKKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2Ny
aXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3QgcnVucyBh
IHNjcmlwdCB0aGF0IGNsb25lcyBhbmQgaW5zZXJ0cyBpdHMgc2NyaXB0IGVsZW1lbnQuIFRoZSBz
Y3JpcHQgc2hvdWxkIHJ1biBleGFjdGx5IG9uY2UgYW5kIHByaW50IFBBU1M6CisKK1BBU1MKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1yZXJ1bi1zZWxmLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1jbG9uZS1y
ZXJ1bi1zZWxmLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRT4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFyIGkgPSAwOworPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwPlRoaXMgdGVzdCBydW5zIGEgc2NyaXB0IHRoYXQgY2xvbmVzIGFuZCBpbnNl
cnRzIGl0cyBzY3JpcHQgZWxlbWVudC4gVGhlIHNjcmlwdCBzaG91bGQgcnVuIGV4YWN0bHkgb25j
ZSBhbmQgcHJpbnQgUEFTUzo8L3A+Cis8ZGl2PjxzY3JpcHQ+CitpKys7CisKK3ZhciBzY3JpcHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGl2ID0g
c2NyaXB0LnBhcmVudE5vZGU7CitkaXYucmVtb3ZlQ2hpbGQoc2NyaXB0KTsKK2Rpdi5hcHBlbmRD
aGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworPC9zY3JpcHQ+PC9kaXY+Cis8c2NyaXB0
PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworcmVzdWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAg
cmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJl
c3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7Citkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC1j
bG9uZS1yZXJ1bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Njcmlw
dC1jbG9uZS1yZXJ1bi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2NyaXB0LWNsb25lLXJlcnVuLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwh
RE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFyIGkgPSAwOworPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgY2xvbmluZyBhIHNjcmlwdCBlbGVtZW50
IHRoYXQgaGFzIGFscmVhZHkgc3RhcnRlZCBhbmQgaW5zZXJ0aW5nIGl0IGludG8gdGhlIGRvY3Vt
ZW50IGRvZXMgbm90IHJlLXJ1biB0aGUgc2NyaXB0LiBZb3Ugc2hvdWxkIHNlZSBQQVNTOjwvcD4K
KzxkaXY+PHNjcmlwdD4gaSsrIDwvc2NyaXB0PjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2Ny
aXB0JylbMV07Cit2YXIgZGl2ID0gc2NyaXB0LnBhcmVudE5vZGU7CitkaXYucmVtb3ZlQ2hpbGQo
c2NyaXB0KTsKK2Rpdi5hcHBlbmRDaGlsZChzY3JpcHQuY2xvbmVOb2RlKHRydWUpKTsKKworcmVz
dWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4g
dHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9ICdGQUlMOiBzY3JpcHQgcmFuICcg
KyBpICsgJyB0aW1lcyc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHJlc3VsdCkpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4t
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0
RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0cyBjbG9u
aW5nIGEgc2NyaXB0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBzdGFydGVkIGFuZCBpbnNlcnRp
bmcgaXQgaW50byB0aGUgZG9jdW1lbnQgZG9lcyBub3QgcmUtcnVuIHRoZSBzY3JpcHQuIFlvdSBz
aG91bGQgc2VlIFBBU1M6CitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZG9tL1NWR1Njcmlw
dEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVy
dW4tc2VsZi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvZG9t
L1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWNsb25lLXJlcnVuLXNlbGYtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBydW5zIGEgc2NyaXB0IHRoYXQg
Y2xvbmVzIGFuZCBpbnNlcnRzIGl0cyBzY3JpcHQgZWxlbWVudC4gVGhlIHNjcmlwdCBzaG91bGQg
cnVuIGV4YWN0bHkgb25jZSBhbmQgcHJpbnQgUEFTUzoKK1BBU1MKSW5kZXg6IExheW91dFRlc3Rz
L3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjcmlwdC1j
bG9uZS1yZXJ1bi1zZWxmLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9kb20v
U1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4tc2VsZi5zdmcJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHN2ZyB3aWR0aD0iMTAw
JSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5z
OnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczp4aHRtbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8ZGVmcz4KKzxzY3JpcHQ+Cit2YXIgaSA9IDA7Cis8
L3NjcmlwdD4KKzwvZGVmcz4KKzx0ZXh0IHg9IjE1IiB5PSIzMCIgZm9udC1zaXplPSIxNSI+VGhp
cyB0ZXN0IHJ1bnMgYSBzY3JpcHQgdGhhdCBjbG9uZXMgYW5kIGluc2VydHMgaXRzIHNjcmlwdCBl
bGVtZW50LiBUaGUgc2NyaXB0IHNob3VsZCBydW4gZXhhY3RseSBvbmNlIGFuZCBwcmludCBQQVNT
OjwvdGV4dD4KKzxkZWZzPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraSsrOwor
Cit2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzFd
OwordmFyIGRlZnMgPSBzY3JpcHQucGFyZW50Tm9kZTsKK2RlZnMucmVtb3ZlQ2hpbGQoc2NyaXB0
KTsKK2RlZnMuYXBwZW5kQ2hpbGQoc2NyaXB0LmNsb25lTm9kZSh0cnVlKSk7CisKKzwvc2NyaXB0
PjwvZGVmcz4KKzxkZWZzPjxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCityZXN1bHQgPSAn
UEFTUyc7CitpZiAoaSA9PSAyKQorICByZXN1bHQgPSAnRkFJTDogc2NyaXB0IHJhbiB0d2ljZSc7
CitlbHNlIGlmIChpID4gMikKKyAgcmVzdWx0ID0gJ0ZBSUw6IHNjcmlwdCByYW4gJyArIGkgKyAn
IHRpbWVzJzsKKyAgCit2YXIgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInRleHQiKTsKK3RleHRFbGVtZW50LnRleHRD
b250ZW50ID0gcmVzdWx0OwordGV4dEVsZW1lbnQuc2V0QXR0cmlidXRlKCd4JywgMTUpOwordGV4
dEVsZW1lbnQuc2V0QXR0cmlidXRlKCd5JywgNDUrMTApOwordGV4dEVsZW1lbnQuc2V0QXR0cmli
dXRlKCdmb250LXNpemUnLCAxNSk7Citkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3Zn
JylbMF0uYXBwZW5kQ2hpbGQodGV4dEVsZW1lbnQpOworCis8L3NjcmlwdD48L2RlZnM+Cis8L3N2
Zz4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtY2xv
bmUtcmVydW4uc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9kb20vU1ZHU2NyaXB0
RWxlbWVudC9zY3JpcHQtY2xvbmUtcmVydW4uc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjcmlwdC1jbG9uZS1yZXJ1bi5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHN2ZyB3aWR0
aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczp4aHRtbD0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8ZGVmcz4KKzxzY3JpcHQ+Cit2YXIgaSA9
IDA7Cis8L3NjcmlwdD4KKzwvZGVmcz4KKzx0ZXh0IHg9IjE1IiB5PSIzMCIgZm9udC1zaXplPSIx
NSI+VGhpcyB0ZXN0cyBjbG9uaW5nIGEgc2NyaXB0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBz
dGFydGVkIGFuZCBpbnNlcnRpbmcgaXQgaW50byB0aGUgZG9jdW1lbnQgZG9lcyBub3QgcmUtcnVu
IHRoZSBzY3JpcHQuIFlvdSBzaG91bGQgc2VlIFBBU1M6PC90ZXh0PgorPGRlZnM+PHNjcmlwdD4g
aSsrOyA8L3NjcmlwdD48L2RlZnM+Cis8ZGVmcz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMV07Cit2YXIgZGVmcyA9IHNjcmlwdC5wYXJlbnROb2Rl
OworZGVmcy5yZW1vdmVDaGlsZChzY3JpcHQpOworZGVmcy5hcHBlbmRDaGlsZChzY3JpcHQuY2xv
bmVOb2RlKHRydWUpKTsKKworcmVzdWx0ID0gJ1BBU1MnOworaWYgKGkgPT0gMikKKyAgcmVzdWx0
ID0gJ0ZBSUw6IHNjcmlwdCByYW4gdHdpY2UnOworZWxzZSBpZiAoaSA+IDIpCisgIHJlc3VsdCA9
ICdGQUlMOiBzY3JpcHQgcmFuICcgKyBpICsgJyB0aW1lcyc7CisKK3ZhciB0ZXh0RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAi
dGV4dCIpOwordGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1bHQ7Cit0ZXh0RWxlbWVudC5z
ZXRBdHRyaWJ1dGUoJ3gnLCAxNSk7Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3knLCA0NSsx
MCk7Cit0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsIDE1KTsKK2RvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZCh0ZXh0RWxlbWVudCk7
CisKKzwvc2NyaXB0PgorPC9kZWZzPgorPC9zdmc+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>