<?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>49786</bug_id>
          
          <creation_ts>2010-11-18 23:24:08 -0800</creation_ts>
          <short_desc>Implement (non-EventListener) marquee IDL attributes from HTML5.</short_desc>
          <delta_ts>2010-12-02 19:42:30 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49788</blocked>
    
    <blocked>50434</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311304</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-18 23:24:08 -0800</bug_when>
    <thetext>Implement (non-EventListener) marquee IDL attributes from HTML5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311308</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-18 23:37:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/7863203&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311312</commentid>
    <comment_count>2</comment_count>
      <attachid>74359</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-18 23:50:29 -0800</bug_when>
    <thetext>Created attachment 74359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311557</commentid>
    <comment_count>3</comment_count>
      <attachid>74359</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-19 10:37:35 -0800</bug_when>
    <thetext>Comment on attachment 74359
Patch

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

This seems OK, but could easily be event better.

&gt; WebCore/html/HTMLMarqueeElement.cpp:135
&gt; +    if (NamedNodeMap* namedNodeMap = attributes()) {
&gt; +        if (Attribute* scrollAmount = namedNodeMap-&gt;getAttributeItem(scrollamountAttr))
&gt; +            return scrollAmount-&gt;value().string().toUInt();
&gt; +    }

This should be written like this:

    const AtomicString&amp; scrollamount = fastGetAttribute(scrollAmountAttr);
    if (!scrollAmount.isNull())
        return scrollAmount.string().toUInt();

Also, I don’t see the test cases about edge cases of parsing that would verify whether toUInt is appropriate, such as garbage after a numeric string or the empty string, a string with a non-digit in it a string with a negative number in it a string with a number but some leading whitespace, a string with the largest integer in it, or a string with the largest integer plus one. Depending on how those edge cases should work, this code might or might not be correct.

&gt; WebCore/html/HTMLMarqueeElement.cpp:149
&gt; +    if (NamedNodeMap* namedNodeMap = attributes()) {
&gt; +        if (Attribute* scrollDelay = namedNodeMap-&gt;getAttributeItem(scrolldelayAttr))
&gt; +            return scrollDelay-&gt;value().string().toUInt();
&gt; +    }

Same thing here. It’s not right to use attributes(). You should use fastGetAttribute instead.

I’d like to see more test cases about parsing edge cases as I mentioned above.

&gt; WebCore/html/HTMLMarqueeElement.cpp:166
&gt; +    if (NamedNodeMap* namedNodeMap = attributes()) {
&gt; +        if (Attribute* loop = namedNodeMap-&gt;getAttributeItem(loopAttr)) {
&gt; +            int loopVal = loop-&gt;value().string().toInt();
&gt; +            return (loopVal &gt; 0 ? loopVal : -1);
&gt; +        }
&gt; +    }
&gt; +    return -1;

This can be written like this:

    int loopValue = fastGetAttribute(loopAttr).string().toInt();
    return loopValue &gt; 0 ? loopValue : -1;

I’d like to see more test cases about parsing edge cases as I mentioned above.

&gt; WebCore/html/HTMLMarqueeElement.cpp:172
&gt; +    if (loop &gt; 0 || loop == -1)
&gt; +        setIntegralAttribute(loopAttr, loop);

The loop == -1 case is not covered by the test case.

&gt; WebCore/html/HTMLMarqueeElement.idl:27
&gt; +        attribute [Reflect=bgcolor] DOMString bgColor;

No need for &quot;=bgcolor&quot; here. [Reflect] handles the case difference automatically. You can see examples of this in other files such as HTMLBodyElement.idl.

&gt; WebCore/html/HTMLMarqueeElement.idl:34
&gt; +        attribute [Reflect=truespeed] boolean trueSpeed;

No need for &quot;=truespeed&quot; here. [Reflect] handles the case difference automatically.

&gt; LayoutTests/fast/html/script-tests/marquee-element.js:1
&gt; +description(&apos;Various tests for the marquee element.&apos;);

Does this test pass on IE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311588</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-19 11:37:53 -0800</bug_when>
    <thetext>&gt;    const AtomicString&amp; scrollamount = fastGetAttribute(scrollAmountAttr);
&gt;    if (!scrollAmount.isNull())
&gt;        return scrollAmount.string().toUInt();

These are mapped presentation attributes, is this the right solution to get them from attribute map and then duplicate code that applies a default? When looking at this patch, I thought that it wasn&apos;t, and there are very few calls to fastGetAttribute in DOM code, but I&apos;m not sure what we usually do. 

&gt; LayoutTests/fast/html/script-tests/marquee-element.js:1

I&apos;d really love for everyone to stop splitting tests into separate JS files. It only causes inconvenience when you can&apos;t see test code directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311614</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-19 12:14:31 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;    const AtomicString&amp; scrollamount = fastGetAttribute(scrollAmountAttr);
&gt; &gt;    if (!scrollAmount.isNull())
&gt; &gt;        return scrollAmount.string().toUInt();
&gt; 
&gt; These are mapped presentation attributes, is this the right solution to get them from attribute map and then duplicate code that applies a default? When looking at this patch, I thought that it wasn&apos;t, and there are very few calls to fastGetAttribute in DOM code, but I&apos;m not sure what we usually do. 

Older code uses getAttribute. There are existing functions like this one, such as:

    HTMLTextAreaElement::maxLength
    HTMLVideoElement::height
    HTMLVideoElement::width

If this element was in HTML5 I’m sure looking there could give us a clearer idea of whether these can be implemented as something that simply reflects the content attribute. Is it in HTML5?

&gt; &gt; LayoutTests/fast/html/script-tests/marquee-element.js:1
&gt; 
&gt; I&apos;d really love for everyone to stop splitting tests into separate JS files. It only causes inconvenience when you can&apos;t see test code directly.

You should bring this up on webkit-dev. There’s some benefit in not writing boilerplate over and over again which can be achieved multiple ways, and also major cost in having tests that are spread across two files instead of one self-contained file or one file that references some standard library file. But there’s also confusion about the notion of pure-JavaScript tests that can be run outside run-webkit-tests, which is where the whole script-tests thing began but has never actually been implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311620</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-19 12:23:55 -0800</bug_when>
    <thetext>&gt; If this element was in HTML5 I’m sure looking there could give us a clearer idea of whether these can be implemented as something that simply reflects the content attribute. Is it in HTML5?

Yes. HTML5 says &quot;the scrollAmount IDL attribute must reflect the scrollamount content attribute. The default value is 6.&quot; This is a relatively uncommon case of reflection, but it is discussed in section 2.8.1 &quot;Reflecting content attributes in IDL attributes.&quot;

&gt; You should bring this up on webkit-dev.

IIRC I have, and I even convinced some people back then. Trying personal attacks now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311621</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-19 12:24:48 -0800</bug_when>
    <thetext>&gt; This is a relatively uncommon case of reflection

Meaning that I couldn&apos;t easily identify a pattern in how we implement those. It seemed that we usually had a member variable in the DOM class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315250</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-30 12:46:24 -0800</bug_when>
    <thetext>Thanks for the feedback Darin. Testing setting an unsigned property to a negative value demonstrated that this patch is certainly wrong. Unfortunately, simply making a reflected property &apos;unsigned&apos; in the IDL does not mean that the generated code handles it according to HTML5&apos;s &apos;rules for parsing non-negative integers&apos; (2.5.4.1). Specifically, negative values just get casted to unsigned instead of raising an error.

The way we handle unsigned properties in other elements (e.g. HTMLInputElement::maxLength) is to actually make the property signed in the IDL and write a custom setter that raises INDEX_SIZE_ERR if the value is less than zero.

It seems like it would be better to have the bindings generator handle this so we don&apos;t have to write custom code each time we add a new unsigned IDL property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315912</commentid>
    <comment_count>9</comment_count>
      <attachid>75329</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-12-01 15:51:10 -0800</bug_when>
    <thetext>Created attachment 75329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315925</commentid>
    <comment_count>10</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-12-01 16:01:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=75329) [details]
&gt; Patch

This patch address Darin&apos;s and Alexey&apos;s review comments. It also handles certain edge cases correctly, as opposed to the previous patch.

Darin, you asked if the test cases pass in IE, and the answer is yes with a few exceptions. IE disagrees with how HTML5 specs marquee in two cases AFAICT:

1) For scrollAmount, scrollDelay and loop, IE does not allow the content attribute value to contain trailing non-numeric characters, although such characters are allowed according to HTML5&apos;s &quot;rules for parsing non-negative integers&quot; (section 2.5.4.1). IE will return the default value for these attributes if non-numeric characters are encountered, but HTML5 says to parse up to the first non-number and return that value.

2) For scrollAmount, scrollDelay and loop, if a value is specified that exceeds 2^31-1, IE will return 2^31-1. HTML5 says that for reflected unsigned longs, if a value is larger than 2^31-1, the default value should be returned (section 2.8.1).

In both these cases, I chose to follow HTML5 rather than IE, which causes a handful of test failures in IE. Since my understanding of marquee is that it started as a proprietary element in IE, I&apos;m a little surprised HTML5 specs it in a way that disagrees with IE&apos;s behavior. Perhaps this is a bug in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316385</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-12-02 13:15:15 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316391</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-02 13:22:49 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73189 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316603</commentid>
    <comment_count>13</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-02 18:54:19 -0800</bug_when>
    <thetext>Hi, it seemed your change broke Chromium&apos;s clang build:

&gt;/b/build/slave/Chromium_Mac_Debug_Clang/build/src/third_party/WebKit/WebCore/WebCore.gyp/../html/HTMLMarqueeElement.cpp:150:35:error: operands of ? are integers of different signs: &apos;int&apos; and &apos;unsigned int&apos; [-Wsign-compare]
&gt;    return ok &amp;&amp; scrollDelay &gt;= 0 ? scrollDelay : RenderStyle::initialMarqueeSpeed();
&gt;                                  ^ ~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&gt;1 error generated.

I think RenderStyle::initialMarqueeSpeed() should return int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316605</commentid>
    <comment_count>14</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-12-02 18:58:48 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Hi, it seemed your change broke Chromium&apos;s clang build:
&gt; 
&gt; &gt;/b/build/slave/Chromium_Mac_Debug_Clang/build/src/third_party/WebKit/WebCore/WebCore.gyp/../html/HTMLMarqueeElement.cpp:150:35:error: operands of ? are integers of different signs: &apos;int&apos; and &apos;unsigned int&apos; [-Wsign-compare]
&gt; &gt;    return ok &amp;&amp; scrollDelay &gt;= 0 ? scrollDelay : RenderStyle::initialMarqueeSpeed();
&gt; &gt;                                  ^ ~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&gt; &gt;1 error generated.
&gt; 
&gt; I think RenderStyle::initialMarqueeSpeed() should return int.

I think you&apos;re right. My change to initialMarqueeSpeed() stopped making sense once scrollDelay() no longer returned an unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316608</commentid>
    <comment_count>15</comment_count>
      <attachid>75450</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-02 19:02:41 -0800</bug_when>
    <thetext>Created attachment 75450
Fix clang build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316621</commentid>
    <comment_count>16</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-02 19:31:50 -0800</bug_when>
    <thetext>No need to wait for review?

(In reply to comment #15)
&gt; Created an attachment (id=75450) [details]
&gt; Fix clang build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316624</commentid>
    <comment_count>17</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-02 19:41:47 -0800</bug_when>
    <thetext>Committed r73230: &lt;http://trac.webkit.org/changeset/73230&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74359</attachid>
            <date>2010-11-18 23:50:29 -0800</date>
            <delta_ts>2010-12-01 15:51:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49786-20101118235028.patch</filename>
            <type>text/plain</type>
            <size>14080</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjM2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTEtMTggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCAobm9uLUV2ZW50TGlzdGVuZXIpIG1hcnF1ZWUgSURMIGF0dHJpYnV0ZXMgZnJvbSBIVE1M
NS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5Nzg2
CisKKyAgICAgICAgVGVzdDogZmFzdC9odG1sL21hcnF1ZWUtZWxlbWVudC5odG1sCisKKyAgICAg
ICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWFycXVlZUVsZW1lbnQ6OnNjcm9sbEFtb3VudCk6IFJldHVybiB0aGUgc2Nyb2xsYW1vdW50Cisg
ICAgICAgIGNvbnRlbnQgYXR0cmlidXRlLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBubyBhdHRy
aWJ1dGUgaXMgcHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudDo6
c2V0U2Nyb2xsQW1vdW50KTogU2V0IHRoZSBzY3JvbGxhbW91bnQKKyAgICAgICAgY29udGVudCBh
dHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNjcm9sbERl
bGF5KTogUmV0dXJuIHRoZSBzY3JvbGxkZWxheQorICAgICAgICBjb250ZW50IGF0dHJpYnV0ZSwg
b3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgbm8gYXR0cmlidXRlIGlzIHByZXNlbnQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNldFNjcm9sbERlbGF5KTogU2V0IHRoZSBz
Y3JvbGxkZWxheQorICAgICAgICBjb250ZW50IGF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNYXJxdWVlRWxlbWVudDo6bG9vcCk6IElmIHRoZSBsb29wIGNvbnRlbnQgYXR0cmlidXRl
IGlzbid0CisgICAgICAgIHByZXNlbnQgb3IgaXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHpl
cm8sIHJldHVybiAtMS4gT3RoZXJ3aXNlIHJldHVybgorICAgICAgICB0aGUgdmFsdWUgb2YgdGhl
IGNvbnRlbnQgYXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50
OjpzZXRMb29wKTogU2V0IHRoZSBsb29wIGNvbnRlbnQgYXR0cmlidXRlCisgICAgICAgIGlmIGl0
IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIGlzIC0xLiBPdGhlcndpc2UsIGlnbm9yZSB0aGUgdmFs
dWUuCisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5pZGw6IFN5bmMgb3VyIElETCB3aXRoIEhUTUw1LgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5o
ZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXJxdWVlU3BlZWQpOgorCiAyMDEwLTExLTAxICBNT1JJVEEg
SGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IEh5YXR0LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAJKHJldmlzaW9uIDcy
MjQwKQorKysgV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw2ICsxMjcsNTEgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnN0b3AoKQog
ICAgICAgICBtYXJxdWVlUmVuZGVyZXItPnN0b3AoKTsKIH0KIAordW5zaWduZWQgSFRNTE1hcnF1
ZWVFbGVtZW50OjpzY3JvbGxBbW91bnQoKSBjb25zdAoreworICAgIGlmIChOYW1lZE5vZGVNYXAq
IG5hbWVkTm9kZU1hcCA9IGF0dHJpYnV0ZXMoKSkgeworICAgICAgICBpZiAoQXR0cmlidXRlKiBz
Y3JvbGxBbW91bnQgPSBuYW1lZE5vZGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oc2Nyb2xsYW1vdW50
QXR0cikpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQW1vdW50LT52YWx1ZSgpLnN0cmluZygp
LnRvVUludCgpOworICAgIH0KKyAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVl
SW5jcmVtZW50KCkudmFsdWUoKTsKK30KKyAgICAKK3ZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50Ojpz
ZXRTY3JvbGxBbW91bnQodW5zaWduZWQgc2Nyb2xsQW1vdW50KQoreworICAgIHNldFVuc2lnbmVk
SW50ZWdyYWxBdHRyaWJ1dGUoc2Nyb2xsYW1vdW50QXR0ciwgc2Nyb2xsQW1vdW50KTsKK30KKyAg
ICAKK3Vuc2lnbmVkIEhUTUxNYXJxdWVlRWxlbWVudDo6c2Nyb2xsRGVsYXkoKSBjb25zdAorewor
ICAgIGlmIChOYW1lZE5vZGVNYXAqIG5hbWVkTm9kZU1hcCA9IGF0dHJpYnV0ZXMoKSkgeworICAg
ICAgICBpZiAoQXR0cmlidXRlKiBzY3JvbGxEZWxheSA9IG5hbWVkTm9kZU1hcC0+Z2V0QXR0cmli
dXRlSXRlbShzY3JvbGxkZWxheUF0dHIpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbERlbGF5
LT52YWx1ZSgpLnN0cmluZygpLnRvVUludCgpOworICAgIH0KKyAgICByZXR1cm4gUmVuZGVyU3R5
bGU6OmluaXRpYWxNYXJxdWVlU3BlZWQoKTsKK30KKwordm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6
OnNldFNjcm9sbERlbGF5KHVuc2lnbmVkIHNjcm9sbERlbGF5KQoreworICAgIHNldFVuc2lnbmVk
SW50ZWdyYWxBdHRyaWJ1dGUoc2Nyb2xsZGVsYXlBdHRyLCBzY3JvbGxEZWxheSk7Cit9CisgICAg
CitpbnQgSFRNTE1hcnF1ZWVFbGVtZW50Ojpsb29wKCkgY29uc3QKK3sKKyAgICBpZiAoTmFtZWRO
b2RlTWFwKiBuYW1lZE5vZGVNYXAgPSBhdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKEF0dHJp
YnV0ZSogbG9vcCA9IG5hbWVkTm9kZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShsb29wQXR0cikpIHsK
KyAgICAgICAgICAgIGludCBsb29wVmFsID0gbG9vcC0+dmFsdWUoKS5zdHJpbmcoKS50b0ludCgp
OworICAgICAgICAgICAgcmV0dXJuIChsb29wVmFsID4gMCA/IGxvb3BWYWwgOiAtMSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorICAgIAordm9pZCBIVE1MTWFycXVlZUVs
ZW1lbnQ6OnNldExvb3AoaW50IGxvb3ApCit7CisgICAgaWYgKGxvb3AgPiAwIHx8IGxvb3AgPT0g
LTEpCisgICAgICAgIHNldEludGVncmFsQXR0cmlidXRlKGxvb3BBdHRyLCBsb29wKTsKK30KKwog
Ym9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6OmNhblN1c3BlbmQoKSBjb25zdAogewogICAgIHJldHVy
biB0cnVlOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaAkocmV2aXNpb24gNzIyNDAp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9w
KCk7CiAgICAgCisgICAgdW5zaWduZWQgc2Nyb2xsQW1vdW50KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTY3JvbGxBbW91bnQodW5zaWduZWQpOworICAgIAorICAgIHVuc2lnbmVkIHNjcm9sbERlbGF5
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxEZWxheSh1bnNpZ25lZCk7CisgICAgCisgICAg
aW50IGxvb3AoKSBjb25zdDsKKyAgICB2b2lkIHNldExvb3AoaW50KTsKKyAgICAKIHByaXZhdGU6
CiAgICAgSFRNTE1hcnF1ZWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmlkbAkocmV2aXNpb24gNzIyNDAp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsMjMgQEAgbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBIVE1MTWFycXVl
ZUVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgICAgIHZvaWQgc3RhcnQoKTsKICAgICAgICAg
dm9pZCBzdG9wKCk7CisgICAgICAgIAorICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0
cmluZyBiZWhhdmlvcjsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0PWJnY29sb3JdIERPTVN0
cmluZyBiZ0NvbG9yOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBkaXJl
Y3Rpb247CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIGhlaWdodDsKKyAg
ICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSB1bnNpZ25lZCBsb25nIGhzcGFjZTsKKyAgICAgICAg
YXR0cmlidXRlIGxvbmcgbG9vcDsKKyAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2Ny
b2xsQW1vdW50OworICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzY3JvbGxEZWxheTsK
KyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0PXRydWVzcGVlZF0gYm9vbGVhbiB0cnVlU3BlZWQ7
CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gdW5zaWduZWQgbG9uZyB2c3BhY2U7CisgICAg
ICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHdpZHRoOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBGaW5kIG91dCB3aGF0IFdpbklFIGV4cG9zZXMgYXMgYXR0cmlidXRlcy4KKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGUgZm9sbG93aW5nIGV2ZW50IGhhbmRsZXIgYXR0cmlidXRl
cworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3
ODgKKyAgICAgICAgLy8gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ib3VuY2U7CisgICAgICAg
IC8vIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZmluaXNoOworICAgICAgICAvLyBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbnN0YXJ0OwogICAgIH07Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gNzIyNDApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM4LDcgKzEyMzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEVCb3hTaXppbmcgaW5pdGlhbEJveFNpemluZygpIHsg
cmV0dXJuIENPTlRFTlRfQk9YOyB9CiAgICAgc3RhdGljIFN0eWxlUmVmbGVjdGlvbiogaW5pdGlh
bEJveFJlZmxlY3QoKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGljIGludCBpbml0aWFsTWFycXVl
ZUxvb3BDb3VudCgpIHsgcmV0dXJuIC0xOyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFsTWFycXVl
ZVNwZWVkKCkgeyByZXR1cm4gODU7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW5pdGlhbE1hcnF1
ZWVTcGVlZCgpIHsgcmV0dXJuIDg1OyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWFycXVl
ZUluY3JlbWVudCgpIHsgcmV0dXJuIExlbmd0aCg2LCBGaXhlZCk7IH0KICAgICBzdGF0aWMgRU1h
cnF1ZWVCZWhhdmlvciBpbml0aWFsTWFycXVlZUJlaGF2aW9yKCkgeyByZXR1cm4gTVNDUk9MTDsg
fQogICAgIHN0YXRpYyBFTWFycXVlZURpcmVjdGlvbiBpbml0aWFsTWFycXVlZURpcmVjdGlvbigp
IHsgcmV0dXJuIE1BVVRPOyB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MjM2OSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTE4
ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgKG5vbi1FdmVudExpc3RlbmVyKSBt
YXJxdWVlIElETCBhdHRyaWJ1dGVzIGZyb20gSFRNTDUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTc4NgorCisgICAgICAgICogZmFzdC9odG1sL21h
cnF1ZWUtZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaHRtbC9t
YXJxdWVlLWVsZW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9odG1sL3NjcmlwdC10
ZXN0cy9tYXJxdWVlLWVsZW1lbnQuanM6IEFkZGVkLgorCiAyMDEwLTExLTE4ICBEYXZpZCBMZXZp
biAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVwZGF0ZS9BZGQg
YmFzZWxpbmVzIGZvciByNzIzNjIgYW5kIHI3MjM1NS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
aHRtbC9tYXJxdWVlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvaHRtbC9tYXJxdWVlLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9odG1sL21hcnF1ZWUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK1ZhcmlvdXMgdGVzdHMgZm9yIHRoZSBtYXJxdWVl
IGVsZW1lbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisiYmVoYXZpb3IiIElE
TCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6CitQQVNTIG1hcnF1ZWUuYmVo
YXZpb3IgaXMgInNsaWRlIgorImJnQ29sb3IiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVu
dCBhdHRyaWJ1dGU6CitQQVNTIG1hcnF1ZWUuYmdDb2xvciBpcyAicmVkIgorImRpcmVjdGlvbiIg
SURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5k
aXJlY3Rpb24gaXMgInJpZ2h0IgorImhlaWdodCIgSURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250
ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5oZWlnaHQgaXMgIjEwMHB4IgorImhzcGFjZSIg
SURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5o
c3BhY2UgaXMgMTAKKyJsb29wIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmli
dXRlOgorUEFTUyBtYXJxdWVlLmxvb3AgaXMgMworInNjcm9sbEFtb3VudCIgSURMIGF0dHJpYnV0
ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5zY3JvbGxBbW91bnQg
aXMgNQorInNjcm9sbERlbGF5IiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmli
dXRlOgorUEFTUyBtYXJxdWVlLnNjcm9sbERlbGF5IGlzIDUwCisidHJ1ZVNwZWVkIiBJREwgYXR0
cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmlidXRlOgorUEFTUyBtYXJxdWVlLnRydWVTcGVl
ZCBpcyB0cnVlCisidnNwYWNlIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmli
dXRlOgorUEFTUyBtYXJxdWVlLnZzcGFjZSBpcyAxMAorRGVmYXVsdCAic2Nyb2xsQW1vdW50IiB2
YWx1ZSBpcyA2OgorUEFTUyBtYXJxdWVlLnNjcm9sbEFtb3VudCBpcyA2CitEZWZhdWx0ICJzY3Jv
bGxEZWxheSIgdmFsdWUgaXMgODU6CitQQVNTIG1hcnF1ZWUuc2Nyb2xsRGVsYXkgaXMgODUKK0Rl
ZmF1bHQgImxvb3AiIGlzIC0xOgorUEFTUyBtYXJxdWVlLmxvb3AgaXMgLTEKKyJsb29wIiByZXNl
dHMgdG8gLTEgd2hlbiBzZXQgdG8gMDoKK1BBU1MgbWFycXVlZS5sb29wIGlzIC0xCisibG9vcCIg
cmVzZXRzIHRvIC0xIHdoZW4gc2V0IHRvIGEgbmVnYXRpdmUgdmFsdWU6CitQQVNTIG1hcnF1ZWUu
bG9vcCBpcyAtMQorImxvb3AiIHZhbHVlcyA8PSAwIGFyZSBpZ25vcmVkIHdoZW4gc2V0IGJ5IHNj
cmlwdDoKK1BBU1MgbWFycXVlZS5sb29wIGlzIDUKKyJsb29wIiB2YWx1ZXMgPD0gMCBhcmUgaWdu
b3JlZCB3aGVuIHNldCBieSBzY3JpcHQ6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyA1CitQZXJjZW50
YWdlICJzY3JvbGxBbW91bnQiIHZhbHVlcyBjYW4gYmUgcXVlcmllZCBieSBzY3JpcHQ6CitQQVNT
IG1hcnF1ZWUuc2Nyb2xsQW1vdW50IGlzIDEwCitQZXJjZW50YWdlICJzY3JvbGxBbW91bnQiIHZh
bHVlcyBjYW5ub3QgYmUgc2V0IGJ5IHNjcmlwdDoKK1BBU1MgbWFycXVlZS5zY3JvbGxBbW91bnQg
aXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCit0
ZXN0CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2h0bWwvbWFycXVlZS1lbGVtZW50Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9odG1sL21hcnF1ZWUtZWxlbWVudC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9odG1sL21hcnF1ZWUtZWxlbWVudC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9tYXJxdWVlLWVsZW1l
bnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2h0bWwvc2NyaXB0LXRlc3RzL21hcnF1ZWUtZWxlbWVudC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2h0bWwvc2NyaXB0LXRlc3RzL21hcnF1ZWUtZWxlbWVudC5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaHRtbC9zY3JpcHQtdGVzdHMvbWFy
cXVlZS1lbGVtZW50LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorZGVzY3JpcHRp
b24oJ1ZhcmlvdXMgdGVzdHMgZm9yIHRoZSBtYXJxdWVlIGVsZW1lbnQuJyk7CisKK3ZhciBtYXJx
dWVlOwordmFyIHRlc3RQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdFBhcmVudCk7CisKK2RlYnVnKCciYmVoYXZpb3Ii
IElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0UGFyZW50
LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgYmVoYXZpb3I9InNsaWRlIj50ZXN0
PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUn
KTsKK3Nob3VsZEJlKCdtYXJxdWVlLmJlaGF2aW9yJywgJyJzbGlkZSInKTsKKworZGVidWcoJyJi
Z0NvbG9yIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmlidXRlOicpOwordGVz
dFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGJnY29sb3I9InJlZCI+
dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJx
dWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5iZ0NvbG9yJywgJyJyZWQiJyk7CisKK2RlYnVnKCci
ZGlyZWN0aW9uIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmlidXRlOicpOwor
dGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGRpcmVjdGlvbj0i
cmlnaHQiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUuZGlyZWN0aW9uJywgJyJyaWdodCInKTsK
KworZGVidWcoJyJoZWlnaHQiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1
dGU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgaGVp
Z2h0PSIxMDBweCI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5oZWlnaHQnLCAnIjEwMHB4Iicp
OworCitkZWJ1ZygnImhzcGFjZSIgSURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJp
YnV0ZTonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBo
c3BhY2U9IjEwIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmhzcGFjZScsICcxMCcpOworCitk
ZWJ1ZygnImxvb3AiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7
Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgbG9vcD0iMyI+
dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJx
dWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5sb29wJywgJzMnKTsKKworZGVidWcoJyJzY3JvbGxB
bW91bnQiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0
UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xsYW1vdW50PSI1
Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21h
cnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbEFtb3VudCcsICc1Jyk7CisKK2RlYnVn
KCcic2Nyb2xsRGVsYXkiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6
Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xs
ZGVsYXk9IjUwIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbERlbGF5JywgJzUwJyk7
CisKK2RlYnVnKCcidHJ1ZVNwZWVkIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0
cmlidXRlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUi
IHRydWVzcGVlZD0idHJ1ZSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZVRydWUoJ21hcnF1ZWUudHJ1ZVNwZWVk
Jyk7CisKK2RlYnVnKCcidnNwYWNlIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0
cmlidXRlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUi
IHZzcGFjZT0iMTAiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUudnNwYWNlJywgJzEwJyk7CisK
K2RlYnVnKCdEZWZhdWx0ICJzY3JvbGxBbW91bnQiIHZhbHVlIGlzIDY6Jyk7Cit0ZXN0UGFyZW50
LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSI+dGVzdDwvbWFycXVlZT4nOworbWFy
cXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFy
cXVlZS5zY3JvbGxBbW91bnQnLCAnNicpOworCitkZWJ1ZygnRGVmYXVsdCAic2Nyb2xsRGVsYXki
IHZhbHVlIGlzIDg1OicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1h
cnF1ZWUiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUuc2Nyb2xsRGVsYXknLCAnODUnKTsKKwor
ZGVidWcoJ0RlZmF1bHQgImxvb3AiIGlzIC0xOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAn
PG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICct
MScpOworCitkZWJ1ZygnImxvb3AiIHJlc2V0cyB0byAtMSB3aGVuIHNldCB0byAwOicpOwordGVz
dFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGxvb3A9IjAiPnRlc3Q8
L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScp
Oworc2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICctMScpOworCitkZWJ1ZygnImxvb3AiIHJlc2V0
cyB0byAtMSB3aGVuIHNldCB0byBhIG5lZ2F0aXZlIHZhbHVlOicpOwordGVzdFBhcmVudC5pbm5l
ckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGxvb3A9Ii01Ij50ZXN0PC9tYXJxdWVlPic7
CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJl
KCdtYXJxdWVlLmxvb3AnLCAnLTEnKTsKKworZGVidWcoJyJsb29wIiB2YWx1ZXMgPD0gMCBhcmUg
aWdub3JlZCB3aGVuIHNldCBieSBzY3JpcHQ6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8
bWFycXVlZSBpZD0ibWFycXVlZSIgbG9vcD0iNSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CittYXJxdWVlLmxvb3AgPSAwOwor
c2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICc1Jyk7CisKK2RlYnVnKCcibG9vcCIgdmFsdWVzIDw9
IDAgYXJlIGlnbm9yZWQgd2hlbiBzZXQgYnkgc2NyaXB0OicpOwordGVzdFBhcmVudC5pbm5lckhU
TUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGxvb3A9IjUiPnRlc3Q8L21hcnF1ZWU+JzsKK21h
cnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworbWFycXVlZS5sb29w
ID0gLTU7CitzaG91bGRCZSgnbWFycXVlZS5sb29wJywgJzUnKTsKKworZGVidWcoJ1BlcmNlbnRh
Z2UgInNjcm9sbEFtb3VudCIgdmFsdWVzIGNhbiBiZSBxdWVyaWVkIGJ5IHNjcmlwdDonKTsKK3Rl
c3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBzY3JvbGxhbW91bnQ9
IjEwJSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxBbW91bnQnLCAnMTAnKTsKKwor
ZGVidWcoJ1BlcmNlbnRhZ2UgInNjcm9sbEFtb3VudCIgdmFsdWVzIGNhbm5vdCBiZSBzZXQgYnkg
c2NyaXB0OicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUi
PnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFy
cXVlZScpOworbWFycXVlZS5zY3JvbGxBbW91bnQgPSAiMTAlIjsKK3Nob3VsZEJlKCdtYXJxdWVl
LnNjcm9sbEFtb3VudCcsICcwJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75329</attachid>
            <date>2010-12-01 15:51:10 -0800</date>
            <delta_ts>2010-12-01 16:38:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49786-20101201155108.patch</filename>
            <type>text/plain</type>
            <size>24498</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzA3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMTItMDEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCAobm9uLUV2ZW50TGlzdGVuZXIpIG1hcnF1ZWUgSURMIGF0dHJpYnV0ZXMgZnJvbSBIVE1M
NS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5Nzg2
CisKKyAgICAgICAgVGVzdDogZmFzdC9odG1sL21hcnF1ZWUtZWxlbWVudC5odG1sCisKKyAgICAg
ICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWFycXVlZUVsZW1lbnQ6OnNjcm9sbEFtb3VudCk6IElmIHRoZSBjb250ZW50IGF0dHJpYnV0ZQor
ICAgICAgICBjYW4gYmUgY29udmVydGVkIHRvIGEgc2lnbmVkIGludGVnZXIgYW5kIGlzID49IDAs
IHJldHVybiBpdC4KKyAgICAgICAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGRlZmF1bHQgc2Nyb2xs
QW1vdW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpzZXRT
Y3JvbGxBbW91bnQpOiBVcGRhdGUgdGhlIGNvbnRlbnQKKyAgICAgICAgYXR0cmlidXRlIGlmIGl0
IGlzID49IDAuIE90aGVyd2lzZSwgcmFpc2UgSU5ERVhfU0laRV9FUlIuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNjcm9sbERlbGF5KTogU2FtZSBhcyBzY3JvbGxBbW91
bnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNldFNjcm9sbERlbGF5
KTogU2FtZSBhcyBzZXRTY3JvbGxBbW91bnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVl
ZUVsZW1lbnQ6Omxvb3ApOiBJZiB0aGUgY29udGVudCBhdHRyaWJ1dGUgY2FuIGJlCisgICAgICAg
IGNvbnZlcnRlZCB0byBhIHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBncmVhdGVyIHRoYW4gMCBvciBl
cXVhbCB0byAtMSwKKyAgICAgICAgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiB0aGUgZGVm
YXVsdCBsb29wIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Ojpz
ZXRMb29wKTogVXBkYXRlIHRoZSBjb250ZW50IGF0dHJpYnV0ZSBpZgorICAgICAgICBpdCBpcyBn
cmVhdGVyIHRoYW4gMCBvciBlcXVhbCB0byAtMS4gT3RoZXJ3aXNlLCByYWlzZSBJTkRFWF9TSVpF
X0VSUi4KKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmlkbDogVXBkYXRlIHRoZSBJREwgdG8gbWF0Y2ggd2hhdCBp
cyBpbiBIVE1MNS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjppbml0aWFsTWFycXVlZVNwZWVkKToKKwog
MjAxMC0xMi0wMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNw
cAkocmV2aXNpb24gNzI0NzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw1MSBAQCB2b2lkIEhUTUxNYXJxdWVlRWxl
bWVudDo6c3RvcCgpCiAgICAgICAgIG1hcnF1ZWVSZW5kZXJlci0+c3RvcCgpOwogfQogCitpbnQg
SFRNTE1hcnF1ZWVFbGVtZW50OjpzY3JvbGxBbW91bnQoKSBjb25zdAoreworICAgIGJvb2wgb2s7
CisgICAgaW50IHNjcm9sbEFtb3VudCA9IGZhc3RHZXRBdHRyaWJ1dGUoc2Nyb2xsYW1vdW50QXR0
cikudG9JbnQoJm9rKTsKKyAgICByZXR1cm4gb2sgJiYgc2Nyb2xsQW1vdW50ID49IDAgPyBzY3Jv
bGxBbW91bnQgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVJbmNyZW1lbnQoKS52YWx1ZSgp
OworfQorICAgIAordm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnNldFNjcm9sbEFtb3VudChpbnQg
c2Nyb2xsQW1vdW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoc2Nyb2xsQW1vdW50
IDwgMCkKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICBlbHNlCisgICAgICAgIHNl
dEludGVncmFsQXR0cmlidXRlKHNjcm9sbGFtb3VudEF0dHIsIHNjcm9sbEFtb3VudCk7Cit9Cisg
ICAgCitpbnQgSFRNTE1hcnF1ZWVFbGVtZW50OjpzY3JvbGxEZWxheSgpIGNvbnN0Cit7CisgICAg
Ym9vbCBvazsKKyAgICBpbnQgc2Nyb2xsRGVsYXkgPSBmYXN0R2V0QXR0cmlidXRlKHNjcm9sbGRl
bGF5QXR0cikudG9JbnQoJm9rKTsKKyAgICByZXR1cm4gb2sgJiYgc2Nyb2xsRGVsYXkgPj0gMCA/
IHNjcm9sbERlbGF5IDogUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlU3BlZWQoKTsKK30KKwor
dm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnNldFNjcm9sbERlbGF5KGludCBzY3JvbGxEZWxheSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHNjcm9sbERlbGF5IDwgMCkKKyAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICBlbHNlCisgICAgICAgIHNldEludGVncmFsQXR0cmli
dXRlKHNjcm9sbGRlbGF5QXR0ciwgc2Nyb2xsRGVsYXkpOworfQorICAgIAoraW50IEhUTUxNYXJx
dWVlRWxlbWVudDo6bG9vcCgpIGNvbnN0Cit7CisgICAgYm9vbCBvazsKKyAgICBpbnQgbG9vcFZh
bHVlID0gZmFzdEdldEF0dHJpYnV0ZShsb29wQXR0cikudG9JbnQoJm9rKTsKKyAgICByZXR1cm4g
b2sgJiYgbG9vcFZhbHVlID4gMCA/IGxvb3BWYWx1ZSA6IC0xOworfQorICAgIAordm9pZCBIVE1M
TWFycXVlZUVsZW1lbnQ6OnNldExvb3AoaW50IGxvb3AsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGlmIChsb29wIDw9IDAgJiYgbG9vcCAhPSAtMSkKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpF
X0VSUjsKKyAgICBlbHNlCisgICAgICAgIHNldEludGVncmFsQXR0cmlidXRlKGxvb3BBdHRyLCBs
b29wKTsKK30KKwogYm9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6OmNhblN1c3BlbmQoKSBjb25zdAog
ewogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaAkocmV2
aXNpb24gNzI0NzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KCk7CiAg
ICAgdm9pZCBzdG9wKCk7CiAgICAgCisgICAgaW50IHNjcm9sbEFtb3VudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2Nyb2xsQW1vdW50KGludCwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorICAgIGlu
dCBzY3JvbGxEZWxheSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2Nyb2xsRGVsYXkoaW50LCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgaW50IGxvb3AoKSBjb25zdDsKKyAgICB2b2lkIHNldExv
b3AoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgCiBwcml2YXRlOgogICAgIEhUTUxNYXJxdWVl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5pZGwJKHJldmlzaW9uIDcyNDc0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDIzIEBA
IG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgSFRNTE1hcnF1ZWVFbGVtZW50IDogSFRNTEVs
ZW1lbnQgewogICAgICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgICAgIHZvaWQgc3RvcCgpOworICAg
ICAgICAKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgYmVoYXZpb3I7Cisg
ICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIGJnQ29sb3I7CisgICAgICAgIGF0
dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIGRpcmVjdGlvbjsKKyAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBET01TdHJpbmcgaGVpZ2h0OworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3Rd
IHVuc2lnbmVkIGxvbmcgaHNwYWNlOworICAgICAgICBhdHRyaWJ1dGUgbG9uZyBsb29wIHNldHRl
ciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgYXR0cmlidXRlIGxvbmcgc2Nyb2xsQW1v
dW50IHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgYXR0cmlidXRlIGxvbmcg
c2Nyb2xsRGVsYXkgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3RdIGJvb2xlYW4gdHJ1ZVNwZWVkOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxl
Y3RdIHVuc2lnbmVkIGxvbmcgdnNwYWNlOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERP
TVN0cmluZyB3aWR0aDsKIAotICAgICAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBl
eHBvc2VzIGFzIGF0dHJpYnV0ZXMuCisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIGZv
bGxvd2luZyBldmVudCBoYW5kbGVyIGF0dHJpYnV0ZXMKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5Nzg4CisgICAgICAgIC8vIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uYm91bmNlOworICAgICAgICAvLyBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmZpbmlzaDsKKyAgICAgICAgLy8gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdGFydDsK
ICAgICB9OwotCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJl
dmlzaW9uIDcyNDc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIzOCw3ICsxMjM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBF
Qm94U2l6aW5nIGluaXRpYWxCb3hTaXppbmcoKSB7IHJldHVybiBDT05URU5UX0JPWDsgfQogICAg
IHN0YXRpYyBTdHlsZVJlZmxlY3Rpb24qIGluaXRpYWxCb3hSZWZsZWN0KCkgeyByZXR1cm4gMDsg
fQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbE1hcnF1ZWVMb29wQ291bnQoKSB7IHJldHVybiAtMTsg
fQotICAgIHN0YXRpYyBpbnQgaW5pdGlhbE1hcnF1ZWVTcGVlZCgpIHsgcmV0dXJuIDg1OyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGluaXRpYWxNYXJxdWVlU3BlZWQoKSB7IHJldHVybiA4NTsgfQog
ICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbE1hcnF1ZWVJbmNyZW1lbnQoKSB7IHJldHVybiBMZW5n
dGgoNiwgRml4ZWQpOyB9CiAgICAgc3RhdGljIEVNYXJxdWVlQmVoYXZpb3IgaW5pdGlhbE1hcnF1
ZWVCZWhhdmlvcigpIHsgcmV0dXJuIE1TQ1JPTEw7IH0KICAgICBzdGF0aWMgRU1hcnF1ZWVEaXJl
Y3Rpb24gaW5pdGlhbE1hcnF1ZWVEaXJlY3Rpb24oKSB7IHJldHVybiBNQVVUTzsgfQpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzMwNzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wMSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IChub24tRXZlbnRMaXN0ZW5lcikgbWFycXVlZSBJREwgYXR0cmlidXRlcyBmcm9t
IEhUTUw1LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDk3ODYKKworICAgICAgICAqIGZhc3QvaHRtbC9tYXJxdWVlLWVsZW1lbnQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2h0bWwvbWFycXVlZS1lbGVtZW50Lmh0bWw6IEFkZGVk
LgorCiAyMDEwLTEyLTAxICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgb25lIG1vcmUgdHJ5IHRvIGdldCBjaHJvbWl1bSBkcnQgYm90cyBncmVl
bi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaHRtbC9tYXJxdWVlLWVsZW1lbnQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaHRtbC9tYXJxdWVlLWVsZW1lbnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9odG1sL21hcnF1
ZWUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACitW
YXJpb3VzIHRlc3RzIGZvciB0aGUgbWFycXVlZSBlbGVtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworImJlaGF2aW9yIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQg
YXR0cmlidXRlOgorUEFTUyBtYXJxdWVlLmJlaGF2aW9yIGlzICJzbGlkZSIKKyJiZWhhdmlvciIg
SURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9kaWZpZWQ6CitQQVNTIG1hcnF1ZWUuYmVoYXZpb3IgaXMg
ImFsdGVybmF0ZSIKKyJiZ0NvbG9yIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0
cmlidXRlOgorUEFTUyBtYXJxdWVlLmJnQ29sb3IgaXMgInJlZCIKKyJiZ0NvbG9yIiBJREwgYXR0
cmlidXRlIGNhbiBiZSBtb2RpZmllZDoKK1BBU1MgbWFycXVlZS5iZ0NvbG9yIGlzICJibHVlIgor
ImRpcmVjdGlvbiIgSURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BB
U1MgbWFycXVlZS5kaXJlY3Rpb24gaXMgInJpZ2h0IgorImRpcmVjdGlvbiIgSURMIGF0dHJpYnV0
ZSBjYW4gYmUgbW9kaWZpZWQ6CitQQVNTIG1hcnF1ZWUuZGlyZWN0aW9uIGlzICJsZWZ0IgorImhl
aWdodCIgSURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFy
cXVlZS5oZWlnaHQgaXMgIjEwMHB4IgorImhlaWdodCIgSURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9k
aWZpZWQ6CitQQVNTIG1hcnF1ZWUuaGVpZ2h0IGlzICIyMDBweCIKKyJoc3BhY2UiIElETCBhdHRy
aWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6CitQQVNTIG1hcnF1ZWUuaHNwYWNlIGlz
IDEwCisiaHNwYWNlIiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2RpZmllZDoKK1BBU1MgbWFycXVl
ZS5oc3BhY2UgaXMgMjAKKyJsb29wIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0
cmlidXRlOgorUEFTUyBtYXJxdWVlLmxvb3AgaXMgMworImxvb3AiIElETCBhdHRyaWJ1dGUgY2Fu
IGJlIG1vZGlmaWVkOgorUEFTUyBtYXJxdWVlLmxvb3AgaXMgNAorInNjcm9sbEFtb3VudCIgSURM
IGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5zY3Jv
bGxBbW91bnQgaXMgNQorInNjcm9sbEFtb3VudCIgSURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9kaWZp
ZWQ6CitQQVNTIG1hcnF1ZWUuc2Nyb2xsQW1vdW50IGlzIDYKKyJzY3JvbGxEZWxheSIgSURMIGF0
dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS5zY3JvbGxE
ZWxheSBpcyA1MAorInNjcm9sbERlbGF5IiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2RpZmllZDoK
K1BBU1MgbWFycXVlZS5zY3JvbGxEZWxheSBpcyA2MAorInRydWVTcGVlZCIgSURMIGF0dHJpYnV0
ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZToKK1BBU1MgbWFycXVlZS50cnVlU3BlZWQgaXMg
dHJ1ZQorInRydWVTcGVlZCIgSURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9kaWZpZWQ6CitQQVNTIG1h
cnF1ZWUudHJ1ZVNwZWVkIGlzIGZhbHNlCisidnNwYWNlIiBJREwgYXR0cmlidXRlIHJlZmxlY3Rz
IGNvbnRlbnQgYXR0cmlidXRlOgorUEFTUyBtYXJxdWVlLnZzcGFjZSBpcyAxMAorInZzcGFjZSIg
SURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9kaWZpZWQ6CitQQVNTIG1hcnF1ZWUudnNwYWNlIGlzIDIw
CitEZWZhdWx0ICJzY3JvbGxBbW91bnQiIHZhbHVlIGlzIDY6CitQQVNTIG1hcnF1ZWUuc2Nyb2xs
QW1vdW50IGlzIDYKKyJzY3JvbGxBbW91bnQiIHVzZXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGNvbnRl
bnQgYXR0cmlidXRlIGlzIG5vdCBhIG51bWJlcjoKK1BBU1MgbWFycXVlZS5zY3JvbGxBbW91bnQg
aXMgNgorInNjcm9sbEFtb3VudCIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRy
aWJ1dGUgaXMgdG9vIGxhcmdlOgorUEFTUyBtYXJxdWVlLnNjcm9sbEFtb3VudCBpcyA2Cisic2Ny
b2xsQW1vdW50IiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hlbiBjb250ZW50IGF0dHJpYnV0ZSBpcyBu
ZWdhdGl2ZToKK1BBU1MgbWFycXVlZS5zY3JvbGxBbW91bnQgaXMgNgorInNjcm9sbEFtb3VudCIg
Y2FuIGJlIHNldCB0byAwOgorUEFTUyBtYXJxdWVlLnNjcm9sbEFtb3VudCBpcyAwCisic2Nyb2xs
QW1vdW50IiBjYW4gYmUgc2V0IHRvIDJeMzEtMToKK1BBU1MgbWFycXVlZS5zY3JvbGxBbW91bnQg
aXMgMjE0NzQ4MzY0NworInNjcm9sbEFtb3VudCIgY2FuIGNvbnRhaW4gd2hpdGVzcGFjZToKK1BB
U1MgbWFycXVlZS5zY3JvbGxBbW91bnQgaXMgNQorInNjcm9sbEFtb3VudCIgY2FuIGNvbnRhaW4g
dHJhaWxpbmcgbm9uLW51bWVyaWMgdmFsdWVzOgorUEFTUyBtYXJxdWVlLnNjcm9sbEFtb3VudCBp
cyA1CitTZXR0aW5nICJzY3JvbGxBbW91bnQiIHRvIGEgbmVnYXRpdmUgdmFsdWUgcmFpc2VzIGFu
IGV4Y2VwdGlvbjoKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnF1ZWUiKS5zY3Jv
bGxBbW91bnQgPSAtMTsgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTkRFWF9TSVpFX0VSUjogRE9N
IEV4Y2VwdGlvbiAxLgorU2V0dGluZyAic2Nyb2xsQW1vdW50IiB0byBhIHZhbHVlIHRoYXQgaXMg
dG9vIGxhcmdlIHJhaXNlcyBhbiBleGNlcHRpb246CitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtYXJxdWVlIikuc2Nyb2xsQW1vdW50ID0gMjE0NzQ4MzY0ODsgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxLgorRGVmYXVsdCAic2Nyb2xs
RGVsYXkiIHZhbHVlIGlzIDg1OgorUEFTUyBtYXJxdWVlLnNjcm9sbERlbGF5IGlzIDg1Cisic2Ny
b2xsRGVsYXkiIHVzZXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGNvbnRlbnQgYXR0cmlidXRlIGlzIG5v
dCBhIG51bWJlcjoKK1BBU1MgbWFycXVlZS5zY3JvbGxEZWxheSBpcyA4NQorInNjcm9sbERlbGF5
IiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hlbiBjb250ZW50IGF0dHJpYnV0ZSBpcyB0b28gbGFyZ2U6
CitQQVNTIG1hcnF1ZWUuc2Nyb2xsRGVsYXkgaXMgODUKKyJzY3JvbGxEZWxheSIgdXNlcyBkZWZh
dWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRyaWJ1dGUgaXMgbmVnYXRpdmU6CitQQVNTIG1hcnF1
ZWUuc2Nyb2xsRGVsYXkgaXMgODUKKyJzY3JvbGxEZWxheSIgY2FuIGJlIHNldCB0byAwOgorUEFT
UyBtYXJxdWVlLnNjcm9sbERlbGF5IGlzIDAKKyJzY3JvbGxEZWxheSIgY2FuIGJlIHNldCB0byAy
XjMxLTE6CitQQVNTIG1hcnF1ZWUuc2Nyb2xsRGVsYXkgaXMgMjE0NzQ4MzY0NworInNjcm9sbERl
bGF5IiBjYW4gY29udGFpbiB3aGl0ZXNwYWNlOgorUEFTUyBtYXJxdWVlLnNjcm9sbERlbGF5IGlz
IDUKKyJzY3JvbGxEZWxheSIgY2FuIGNvbnRhaW4gdHJhaWxpbmcgbm9uLW51bWVyaWMgdmFsdWVz
OgorUEFTUyBtYXJxdWVlLnNjcm9sbERlbGF5IGlzIDUKK1NldHRpbmcgInNjcm9sbERlbGF5IiB0
byBhIG5lZ2F0aXZlIHZhbHVlIHJhaXNlcyBhbiBleGNlcHRpb246CitQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYXJxdWVlIikuc2Nyb2xsRGVsYXkgPSAtMTsgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxLgorU2V0dGluZyAic2Nyb2xs
RGVsYXkiIHRvIGEgdmFsdWUgdGhhdCBpcyB0b28gbGFyZ2UgcmFpc2VzIGFuIGV4Y2VwdGlvbjoK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnF1ZWUiKS5zY3JvbGxEZWxheSA9IDIx
NDc0ODM2NDg7IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNl
cHRpb24gMS4KK0RlZmF1bHQgImxvb3AiIHZhbHVlIGlzIC0xOgorUEFTUyBtYXJxdWVlLmxvb3Ag
aXMgLTEKKyJsb29wIiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hlbiBjb250ZW50IGF0dHJpYnV0ZSBp
cyBub3QgYSBudW1iZXI6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyAtMQorImxvb3AiIHVzZXMgZGVm
YXVsdCB2YWx1ZSB3aGVuIGNvbnRlbnQgYXR0cmlidXRlIGlzIHRvbyBsYXJnZToKK1BBU1MgbWFy
cXVlZS5sb29wIGlzIC0xCisibG9vcCIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBh
dHRyaWJ1dGUgaXMgbmVnYXRpdmU6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyAtMQorImxvb3AiIHVz
ZXMgZGVmYXVsdCB2YWx1ZSB3aGVuIHNldCB0byAwOgorUEFTUyBtYXJxdWVlLmxvb3AgaXMgLTEK
KyJsb29wIiBjYW4gYmUgc2V0IHRvIDE6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyAxCisibG9vcCIg
Y2FuIGJlIHNldCB0byAyXjMxLTE6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyAyMTQ3NDgzNjQ3Cisi
bG9vcCIgY2FuIGNvbnRhaW4gd2hpdGVzcGFjZToKK1BBU1MgbWFycXVlZS5sb29wIGlzIDUKKyJs
b29wIiBjYW4gY29udGFpbiB0cmFpbGluZyBub24tbnVtZXJpYyB2YWx1ZXM6CitQQVNTIG1hcnF1
ZWUubG9vcCBpcyA1CitTZXR0aW5nICJsb29wIiB0byAwIHJhaXNlcyBhbiBleGNlcHRpb246CitQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXJxdWVlIikubG9vcCA9IDA7IHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMS4KK1NldHRpbmcg
Imxvb3AiIHRvIGEgbmVnYXRpdmUgdmFsdWUgcmFpc2VzIGFuIGV4Y2VwdGlvbjoKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnF1ZWUiKS5zY3JvbGxEZWxheSA9IC01OyB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCisibG9vcCIg
Y2FuIGJlIHNldCB0byAtMSBieSBzY3JpcHQ6CitQQVNTIG1hcnF1ZWUubG9vcCBpcyAtMQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvaHRtbC9tYXJxdWVlLWVsZW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2h0bWwvbWFycXVlZS1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2h0bWwvbWFycXVlZS1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjg2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGRpdiBpZD0idGVzdFBhcmVudCIgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuIj48L2Rp
dj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVmFyaW91cyB0ZXN0cyBmb3IgdGhlIG1hcnF1ZWUg
ZWxlbWVudC4nKTsKKwordmFyIG1hcnF1ZWU7Cit2YXIgdGVzdFBhcmVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0UGFyZW50Iik7CisKK2RlYnVnKCciYmVoYXZpb3IiIElETCBhdHRy
aWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRN
TCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgYmVoYXZpb3I9InNsaWRlIj50ZXN0PC9tYXJxdWVl
Pic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3Vs
ZEJlKCdtYXJxdWVlLmJlaGF2aW9yJywgJyJzbGlkZSInKTsKKworZGVidWcoJyJiZWhhdmlvciIg
SURMIGF0dHJpYnV0ZSBjYW4gYmUgbW9kaWZpZWQ6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9
ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgYmVoYXZpb3I9InNsaWRlIj50ZXN0PC9tYXJxdWVlPic7
CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK21hcnF1ZWUu
YmVoYXZpb3I9ImFsdGVybmF0ZSI7CitzaG91bGRCZSgnbWFycXVlZS5iZWhhdmlvcicsICciYWx0
ZXJuYXRlIicpOworCitkZWJ1ZygnImJnQ29sb3IiIElETCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29u
dGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0i
bWFycXVlZSIgYmdjb2xvcj0icmVkIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmJnQ29sb3In
LCAnInJlZCInKTsKKworZGVidWcoJyJiZ0NvbG9yIiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2Rp
ZmllZDonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBi
Z2NvbG9yPSJyZWQiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbWFycXVlZScpOworbWFycXVlZS5iZ0NvbG9yPSJibHVlIjsKK3Nob3VsZEJlKCdt
YXJxdWVlLmJnQ29sb3InLCAnImJsdWUiJyk7CisKK2RlYnVnKCciZGlyZWN0aW9uIiBJREwgYXR0
cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmlidXRlOicpOwordGVzdFBhcmVudC5pbm5lckhU
TUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGRpcmVjdGlvbj0icmlnaHQiPnRlc3Q8L21hcnF1
ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworc2hv
dWxkQmUoJ21hcnF1ZWUuZGlyZWN0aW9uJywgJyJyaWdodCInKTsKKworZGVidWcoJyJkaXJlY3Rp
b24iIElETCBhdHRyaWJ1dGUgY2FuIGJlIG1vZGlmaWVkOicpOwordGVzdFBhcmVudC5pbm5lckhU
TUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIGRpcmVjdGlvbj0icmlnaHQiPnRlc3Q8L21hcnF1
ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworbWFy
cXVlZS5kaXJlY3Rpb249ImxlZnQiOworc2hvdWxkQmUoJ21hcnF1ZWUuZGlyZWN0aW9uJywgJyJs
ZWZ0IicpOworCitkZWJ1ZygnImhlaWdodCIgSURMIGF0dHJpYnV0ZSByZWZsZWN0cyBjb250ZW50
IGF0dHJpYnV0ZTonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJx
dWVlIiBoZWlnaHQ9IjEwMHB4Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmhlaWdodCcsICci
MTAwcHgiJyk7CisKK2RlYnVnKCciaGVpZ2h0IiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2RpZmll
ZDonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBoZWln
aHQ9IjEwMHB4Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21hcnF1ZWUnKTsKK21hcnF1ZWUuaGVpZ2h0PSIyMDBweCI7CitzaG91bGRCZSgnbWFy
cXVlZS5oZWlnaHQnLCAnIjIwMHB4IicpOworCitkZWJ1ZygnImhzcGFjZSIgSURMIGF0dHJpYnV0
ZSByZWZsZWN0cyBjb250ZW50IGF0dHJpYnV0ZTonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0g
JzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBoc3BhY2U9IjEwIj50ZXN0PC9tYXJxdWVlPic7CittYXJx
dWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJx
dWVlLmhzcGFjZScsICcxMCcpOworCitkZWJ1ZygnImhzcGFjZSIgSURMIGF0dHJpYnV0ZSBjYW4g
YmUgbW9kaWZpZWQ6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFy
cXVlZSIgaHNwYWNlPSIxMCI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CittYXJxdWVlLmhzcGFjZT0yMDsKK3Nob3VsZEJlKCdt
YXJxdWVlLmhzcGFjZScsICcyMCcpOworCitkZWJ1ZygnImxvb3AiIElETCBhdHRyaWJ1dGUgcmVm
bGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFy
cXVlZSBpZD0ibWFycXVlZSIgbG9vcD0iMyI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5sb29w
JywgJzMnKTsKKworZGVidWcoJyJsb29wIiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2RpZmllZDon
KTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBsb29wPSIz
Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21h
cnF1ZWUnKTsKK21hcnF1ZWUubG9vcD00Oworc2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICc0Jyk7
CisKK2RlYnVnKCcic2Nyb2xsQW1vdW50IiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQg
YXR0cmlidXRlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1
ZWUiIHNjcm9sbGFtb3VudD0iNSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxBbW91
bnQnLCAnNScpOworCitkZWJ1ZygnInNjcm9sbEFtb3VudCIgSURMIGF0dHJpYnV0ZSBjYW4gYmUg
bW9kaWZpZWQ6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVl
ZSIgc2Nyb2xsYW1vdW50PSI1Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK21hcnF1ZWUuc2Nyb2xsQW1vdW50PTY7CitzaG91
bGRCZSgnbWFycXVlZS5zY3JvbGxBbW91bnQnLCAnNicpOworCitkZWJ1ZygnInNjcm9sbERlbGF5
IiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNvbnRlbnQgYXR0cmlidXRlOicpOwordGVzdFBhcmVu
dC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIHNjcm9sbGRlbGF5PSI1MCI+dGVz
dDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVl
Jyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxEZWxheScsICc1MCcpOworCitkZWJ1ZygnInNj
cm9sbERlbGF5IiBJREwgYXR0cmlidXRlIGNhbiBiZSBtb2RpZmllZDonKTsKK3Rlc3RQYXJlbnQu
aW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBzY3JvbGxkZWxheT0iNTAiPnRlc3Q8
L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScp
OworbWFycXVlZS5zY3JvbGxEZWxheT02MDsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbERlbGF5
JywgJzYwJyk7CisKK2RlYnVnKCcidHJ1ZVNwZWVkIiBJREwgYXR0cmlidXRlIHJlZmxlY3RzIGNv
bnRlbnQgYXR0cmlidXRlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9
Im1hcnF1ZWUiIHRydWVzcGVlZD0idHJ1ZSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZVRydWUoJ21hcnF1ZWUu
dHJ1ZVNwZWVkJyk7CisKK2RlYnVnKCcidHJ1ZVNwZWVkIiBJREwgYXR0cmlidXRlIGNhbiBiZSBt
b2RpZmllZDonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVl
IiB0cnVlc3BlZWQ9InRydWUiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworbWFycXVlZS50cnVlU3BlZWQ9ZmFsc2U7CitzaG91
bGRCZSgnbWFycXVlZS50cnVlU3BlZWQnLCAnZmFsc2UnKTsKKworZGVidWcoJyJ2c3BhY2UiIElE
TCBhdHRyaWJ1dGUgcmVmbGVjdHMgY29udGVudCBhdHRyaWJ1dGU6Jyk7Cit0ZXN0UGFyZW50Lmlu
bmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgdnNwYWNlPSIxMCI+dGVzdDwvbWFycXVl
ZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91
bGRCZSgnbWFycXVlZS52c3BhY2UnLCAnMTAnKTsKKworZGVidWcoJyJ2c3BhY2UiIElETCBhdHRy
aWJ1dGUgY2FuIGJlIG1vZGlmaWVkOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1
ZWUgaWQ9Im1hcnF1ZWUiIHZzcGFjZT0iMTAiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworbWFycXVlZS52c3BhY2U9MjA7Citz
aG91bGRCZSgnbWFycXVlZS52c3BhY2UnLCAnMjAnKTsKKworZGVidWcoJ0RlZmF1bHQgInNjcm9s
bEFtb3VudCIgdmFsdWUgaXMgNjonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVl
IGlkPSJtYXJxdWVlIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbEFtb3VudCcsICc2
Jyk7CisKK2RlYnVnKCcic2Nyb2xsQW1vdW50IiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hlbiBjb250
ZW50IGF0dHJpYnV0ZSBpcyBub3QgYSBudW1iZXI6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9
ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xsYW1vdW50PSJhMSI+dGVzdDwvbWFycXVlZT4n
OworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRC
ZSgnbWFycXVlZS5zY3JvbGxBbW91bnQnLCAnNicpOworCitkZWJ1ZygnInNjcm9sbEFtb3VudCIg
dXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRyaWJ1dGUgaXMgdG9vIGxhcmdlOicp
OwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIHNjcm9sbGFt
b3VudD0iMjE0NzQ4MzY0OCI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxBbW91bnQn
LCAnNicpOworCitkZWJ1ZygnInNjcm9sbEFtb3VudCIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4g
Y29udGVudCBhdHRyaWJ1dGUgaXMgbmVnYXRpdmU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9
ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xsYW1vdW50PSItMSI+dGVzdDwvbWFycXVlZT4n
OworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRC
ZSgnbWFycXVlZS5zY3JvbGxBbW91bnQnLCAnNicpOworCitkZWJ1ZygnInNjcm9sbEFtb3VudCIg
Y2FuIGJlIHNldCB0byAwOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9
Im1hcnF1ZWUiIHNjcm9sbGFtb3VudD0iMCI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3Jv
bGxBbW91bnQnLCAnMCcpOworCitkZWJ1ZygnInNjcm9sbEFtb3VudCIgY2FuIGJlIHNldCB0byAy
XjMxLTE6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIg
c2Nyb2xsYW1vdW50PSIyMTQ3NDgzNjQ3Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9s
bEFtb3VudCcsICcyMTQ3NDgzNjQ3Jyk7CisKK2RlYnVnKCcic2Nyb2xsQW1vdW50IiBjYW4gY29u
dGFpbiB3aGl0ZXNwYWNlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9
Im1hcnF1ZWUiIHNjcm9sbGFtb3VudD0iIDUgIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNj
cm9sbEFtb3VudCcsICc1Jyk7CisKK2RlYnVnKCcic2Nyb2xsQW1vdW50IiBjYW4gY29udGFpbiB0
cmFpbGluZyBub24tbnVtZXJpYyB2YWx1ZXM6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8
bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xsYW1vdW50PSI1YSI+dGVzdDwvbWFycXVlZT4nOwor
bWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgn
bWFycXVlZS5zY3JvbGxBbW91bnQnLCAnNScpOworCitkZWJ1ZygnU2V0dGluZyAic2Nyb2xsQW1v
dW50IiB0byBhIG5lZ2F0aXZlIHZhbHVlIHJhaXNlcyBhbiBleGNlcHRpb246Jyk7Cit0ZXN0UGFy
ZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSI+dGVzdDwvbWFycXVlZT4nOwor
c2hvdWxkVGhyb3coJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXJxdWVlIikuc2Nyb2xsQW1v
dW50ID0gLTE7Jyk7CisKK2RlYnVnKCdTZXR0aW5nICJzY3JvbGxBbW91bnQiIHRvIGEgdmFsdWUg
dGhhdCBpcyB0b28gbGFyZ2UgcmFpc2VzIGFuIGV4Y2VwdGlvbjonKTsKK3Rlc3RQYXJlbnQuaW5u
ZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIj50ZXN0PC9tYXJxdWVlPic7CitzaG91bGRU
aHJvdygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnF1ZWUiKS5zY3JvbGxBbW91bnQgPSAy
MTQ3NDgzNjQ4OycpOworCitkZWJ1ZygnRGVmYXVsdCAic2Nyb2xsRGVsYXkiIHZhbHVlIGlzIDg1
OicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiPnRlc3Q8
L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScp
Oworc2hvdWxkQmUoJ21hcnF1ZWUuc2Nyb2xsRGVsYXknLCAnODUnKTsKKworZGVidWcoJyJzY3Jv
bGxEZWxheSIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRyaWJ1dGUgaXMgbm90
IGEgbnVtYmVyOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1
ZWUiIHNjcm9sbGRlbGF5PSJhMSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxEZWxh
eScsICc4NScpOworCitkZWJ1ZygnInNjcm9sbERlbGF5IiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hl
biBjb250ZW50IGF0dHJpYnV0ZSBpcyB0b28gbGFyZ2U6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRN
TCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIgc2Nyb2xsZGVsYXk9IjIxNDc0ODM2NDgiPnRlc3Q8
L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScp
Oworc2hvdWxkQmUoJ21hcnF1ZWUuc2Nyb2xsRGVsYXknLCAnODUnKTsKKworZGVidWcoJyJzY3Jv
bGxEZWxheSIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRyaWJ1dGUgaXMgbmVn
YXRpdmU6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0ibWFycXVlZSIg
c2Nyb2xsZGVsYXk9Ii0xIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbERlbGF5Jywg
Jzg1Jyk7CisKK2RlYnVnKCcic2Nyb2xsRGVsYXkiIGNhbiBiZSBzZXQgdG8gMDonKTsKK3Rlc3RQ
YXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBzY3JvbGxkZWxheT0iMCI+
dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJx
dWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxEZWxheScsICcwJyk7CisKK2RlYnVnKCci
c2Nyb2xsRGVsYXkiIGNhbiBiZSBzZXQgdG8gMl4zMS0xOicpOwordGVzdFBhcmVudC5pbm5lckhU
TUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIHNjcm9sbGRlbGF5PSIyMTQ3NDgzNjQ3Ij50ZXN0
PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUn
KTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbERlbGF5JywgJzIxNDc0ODM2NDcnKTsKKworZGVi
dWcoJyJzY3JvbGxEZWxheSIgY2FuIGNvbnRhaW4gd2hpdGVzcGFjZTonKTsKK3Rlc3RQYXJlbnQu
aW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBzY3JvbGxkZWxheT0iIDUgIj50ZXN0
PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUn
KTsKK3Nob3VsZEJlKCdtYXJxdWVlLnNjcm9sbERlbGF5JywgJzUnKTsKKworZGVidWcoJyJzY3Jv
bGxEZWxheSIgY2FuIGNvbnRhaW4gdHJhaWxpbmcgbm9uLW51bWVyaWMgdmFsdWVzOicpOwordGVz
dFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiIHNjcm9sbGRlbGF5PSI1
YSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
YXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5zY3JvbGxEZWxheScsICc1Jyk7CisKK2RlYnVn
KCdTZXR0aW5nICJzY3JvbGxEZWxheSIgdG8gYSBuZWdhdGl2ZSB2YWx1ZSByYWlzZXMgYW4gZXhj
ZXB0aW9uOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUi
PnRlc3Q8L21hcnF1ZWU+JzsKK3Nob3VsZFRocm93KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bWFycXVlZSIpLnNjcm9sbERlbGF5ID0gLTE7Jyk7CisKK2RlYnVnKCdTZXR0aW5nICJzY3JvbGxE
ZWxheSIgdG8gYSB2YWx1ZSB0aGF0IGlzIHRvbyBsYXJnZSByYWlzZXMgYW4gZXhjZXB0aW9uOicp
OwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUiPnRlc3Q8L21h
cnF1ZWU+JzsKK3Nob3VsZFRocm93KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFycXVlZSIp
LnNjcm9sbERlbGF5ID0gMjE0NzQ4MzY0ODsnKTsKKworZGVidWcoJ0RlZmF1bHQgImxvb3AiIHZh
bHVlIGlzIC0xOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1
ZWUiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICctMScpOworCitkZWJ1ZygnImxv
b3AiIHVzZXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGNvbnRlbnQgYXR0cmlidXRlIGlzIG5vdCBhIG51
bWJlcjonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBs
b29wPSJhMSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5sb29wJywgJy0xJyk7CisKK2RlYnVn
KCcibG9vcCIgdXNlcyBkZWZhdWx0IHZhbHVlIHdoZW4gY29udGVudCBhdHRyaWJ1dGUgaXMgdG9v
IGxhcmdlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9Im1hcnF1ZWUi
IGxvb3A9IjIxNDc0ODM2NDgiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworc2hvdWxkQmUoJ21hcnF1ZWUubG9vcCcsICctMScp
OworCitkZWJ1ZygnImxvb3AiIHVzZXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGNvbnRlbnQgYXR0cmli
dXRlIGlzIG5lZ2F0aXZlOicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1hcnF1ZWUgaWQ9
Im1hcnF1ZWUiIGxvb3A9Ii01Ij50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmxvb3AnLCAnLTEn
KTsKKworZGVidWcoJyJsb29wIiB1c2VzIGRlZmF1bHQgdmFsdWUgd2hlbiBzZXQgdG8gMDonKTsK
K3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBsb29wPSIwIj50
ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1
ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmxvb3AnLCAnLTEnKTsKKworZGVidWcoJyJsb29wIiBj
YW4gYmUgc2V0IHRvIDE6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFycXVlZSBpZD0i
bWFycXVlZSIgbG9vcD0iMSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5sb29wJywgJzEnKTsK
KworZGVidWcoJyJsb29wIiBjYW4gYmUgc2V0IHRvIDJeMzEtMTonKTsKK3Rlc3RQYXJlbnQuaW5u
ZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIiBsb29wPSIyMTQ3NDgzNjQ3Ij50ZXN0PC9t
YXJxdWVlPic7CittYXJxdWVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsK
K3Nob3VsZEJlKCdtYXJxdWVlLmxvb3AnLCAnMjE0NzQ4MzY0NycpOworCitkZWJ1ZygnImxvb3Ai
IGNhbiBjb250YWluIHdoaXRlc3BhY2U6Jyk7Cit0ZXN0UGFyZW50LmlubmVySFRNTCA9ICc8bWFy
cXVlZSBpZD0ibWFycXVlZSIgbG9vcD0iIDUgIj50ZXN0PC9tYXJxdWVlPic7CittYXJxdWVlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcnF1ZWUnKTsKK3Nob3VsZEJlKCdtYXJxdWVlLmxv
b3AnLCAnNScpOworCitkZWJ1ZygnImxvb3AiIGNhbiBjb250YWluIHRyYWlsaW5nIG5vbi1udW1l
cmljIHZhbHVlczonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJx
dWVlIiBsb29wPSI1YSI+dGVzdDwvbWFycXVlZT4nOworbWFycXVlZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdtYXJxdWVlJyk7CitzaG91bGRCZSgnbWFycXVlZS5sb29wJywgJzUnKTsKKwor
ZGVidWcoJ1NldHRpbmcgImxvb3AiIHRvIDAgcmFpc2VzIGFuIGV4Y2VwdGlvbjonKTsKK3Rlc3RQ
YXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJtYXJxdWVlIj50ZXN0PC9tYXJxdWVlPic7
CitzaG91bGRUaHJvdygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnF1ZWUiKS5sb29wID0g
MDsnKTsKKworZGVidWcoJ1NldHRpbmcgImxvb3AiIHRvIGEgbmVnYXRpdmUgdmFsdWUgcmFpc2Vz
IGFuIGV4Y2VwdGlvbjonKTsKK3Rlc3RQYXJlbnQuaW5uZXJIVE1MID0gJzxtYXJxdWVlIGlkPSJt
YXJxdWVlIj50ZXN0PC9tYXJxdWVlPic7CitzaG91bGRUaHJvdygnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm1hcnF1ZWUiKS5zY3JvbGxEZWxheSA9IC01OycpOworCitkZWJ1ZygnImxvb3AiIGNh
biBiZSBzZXQgdG8gLTEgYnkgc2NyaXB0OicpOwordGVzdFBhcmVudC5pbm5lckhUTUwgPSAnPG1h
cnF1ZWUgaWQ9Im1hcnF1ZWUiIGxvb3A9IjUiPnRlc3Q8L21hcnF1ZWU+JzsKK21hcnF1ZWUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFycXVlZScpOworbWFycXVlZS5sb29wID0gLTE7Citz
aG91bGRCZSgnbWFycXVlZS5sb29wJywgJy0xJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="66115"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75450</attachid>
            <date>2010-12-02 19:02:41 -0800</date>
            <delta_ts>2010-12-02 19:36:45 -0800</delta_ts>
            <desc>Fix clang build</desc>
            <filename>bug-49786-20101203120239.patch</filename>
            <type>text/plain</type>
            <size>1498</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmEzMjNiMTdiYTIxZjBkYTg4Y2Q1ZjFkOWMyZTA5NmRkOWRkMGViMS4uNDRiYWNkZjFjMTYyNzVi
NWQ0NDY3ZGNmNjBmMDVhMmFhMDk3NDY1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0xMi0wMiAgWXV0
YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIGZpeCBDaHJvbWl1bSdzIGNs
YW5nIGJ1aWxkLgorCisgICAgICAgIEltcGxlbWVudCAobm9uLUV2ZW50TGlzdGVuZXIpIG1hcnF1
ZWUgSURMIGF0dHJpYnV0ZXMgZnJvbSBIVE1MNS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5Nzg2CisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjppbml0aWFs
TWFycXVlZVNwZWVkKToKKwogMjAxMC0xMi0wMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggYWE1NjIyYTRmZWEyZDc2YzFkN2MyMWE0NWFl
NzIxMWU2MjEyNWE1ZC4uNjJjNDU0ODkyMDFiYTZkM2FmZDkyOTI1NDE3NWQ5MDRkZjFjYWZhNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0xMjM4LDcgKzEyMzgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEVCb3hTaXppbmcgaW5pdGlhbEJveFNpemluZygpIHsgcmV0
dXJuIENPTlRFTlRfQk9YOyB9CiAgICAgc3RhdGljIFN0eWxlUmVmbGVjdGlvbiogaW5pdGlhbEJv
eFJlZmxlY3QoKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGljIGludCBpbml0aWFsTWFycXVlZUxv
b3BDb3VudCgpIHsgcmV0dXJuIC0xOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIGluaXRpYWxNYXJx
dWVlU3BlZWQoKSB7IHJldHVybiA4NTsgfQorICAgIHN0YXRpYyBpbnQgaW5pdGlhbE1hcnF1ZWVT
cGVlZCgpIHsgcmV0dXJuIDg1OyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWFycXVlZUlu
Y3JlbWVudCgpIHsgcmV0dXJuIExlbmd0aCg2LCBGaXhlZCk7IH0KICAgICBzdGF0aWMgRU1hcnF1
ZWVCZWhhdmlvciBpbml0aWFsTWFycXVlZUJlaGF2aW9yKCkgeyByZXR1cm4gTVNDUk9MTDsgfQog
ICAgIHN0YXRpYyBFTWFycXVlZURpcmVjdGlvbiBpbml0aWFsTWFycXVlZURpcmVjdGlvbigpIHsg
cmV0dXJuIE1BVVRPOyB9Cg==
</data>
<flag name="review"
          id="66255"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>