<?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>42055</bug_id>
          
          <creation_ts>2010-07-11 23:59:30 -0700</creation_ts>
          <short_desc>AX: aria-checked not recognized on image map radio buttons</short_desc>
          <delta_ts>2010-07-14 15:10:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>249703</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-11 23:59:30 -0700</bug_when>
    <thetext>aria-checked not recognized on image map radio buttons</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249711</commentid>
    <comment_count>1</comment_count>
      <attachid>61195</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-12 01:08:29 -0700</bug_when>
    <thetext>Created attachment 61195
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249712</commentid>
    <comment_count>2</comment_count>
      <attachid>61196</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-12 01:10:34 -0700</bug_when>
    <thetext>Created attachment 61196
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250358</commentid>
    <comment_count>3</comment_count>
      <attachid>61336</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-13 00:13:59 -0700</bug_when>
    <thetext>Created attachment 61336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250578</commentid>
    <comment_count>4</comment_count>
      <attachid>61336</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-13 09:50:31 -0700</bug_when>
    <thetext>Comment on attachment 61336
Patch

&gt; +void AccessibilityObject::retrieveIntValue(int&amp; result) const

The code from this function should be in the AccessibilityObject::intValue function; a separate function is not helpful here. AccessibilityRenderObject::intValue could just &quot;return AccessibilityObject::intValue()&quot; at the end and get the same result we get the way it&apos;s written in the patch. Both functions return 0 if there is no int value, so there&apos;s no need for a &quot;don&apos;t touch the int&quot; or a boolean result to indicate that there is no intValue. The more roundabout way that makes use the magic number -1 gives the same end result and is unneeded.

&gt; +    // If this is an ARIA checkbox or radio, check the aria-checked attribute rather than node()-&gt;checked()
&gt; +    if (isCheckboxOrRadio()) {
&gt; +        const AtomicString&amp; checked = getAttribute(node(), aria_checkedAttr);
&gt; +        if (equalIgnoringCase(checked, &quot;true&quot;))
&gt; +            result = 1;
&gt; +        else if (equalIgnoringCase(checked, &quot;false&quot;))
&gt; +            result = 0;
&gt; +    }

The way I&apos;d write this is by saying that if it&apos;s a &quot;real&quot; checkbox or radio we&apos;ll never get here, so this simply has the logic correct for when it&apos;s an ARIA one.

    if (isCheckboxOrRadio())
        return equalIgnoringCase(getAttribute(node(), aria_checkedAttr), &quot;true&quot;);

Now that the node() virtual function is in the AccessibilityObhject class, I think you should do a cleanup pass of static member functions that take Node* and consider whether you can replace them with member functions that do not have a Node* argument. You will need to check that callers do not have some need to pass a different Node*. This would be good for getAttribute and might also apply to one or more of these:

    anchorElementForNode
    firstAccessibleObjectFromNode
    language
    listMarkerTextForNodeAndPosition
    renderListItemContainerForNode

&gt; -    Node* node() const 
&gt; +    virtual Node* node() const 
&gt;      { 
&gt;          return m_renderer ? m_renderer-&gt;node() : 0; 
&gt;      };

There&apos;s a stray semicolon here. Also, having this function body in the header doesn&apos;t do any good. Typically it&apos;s not useful to have virtual functions also inlined.

I’m going to say r=me because this patch is OK as-is, but I think it’s straightforward to improve it given my comments above.

Also not sure why the Win EWS failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251011</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-14 00:46:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 61336 [details])
&gt; &gt; +void AccessibilityObject::retrieveIntValue(int&amp; result) const
&gt; 
&gt; The code from this function should be in the AccessibilityObject::intValue function; a separate function is not helpful here. AccessibilityRenderObject::intValue could just &quot;return AccessibilityObject::intValue()&quot; at the end and get the same result we get the way it&apos;s written in the patch. Both functions return 0 if there is no int value, so there&apos;s no need for a &quot;don&apos;t touch the int&quot; or a boolean result to indicate that there is no intValue. The more roundabout way that makes use the magic number -1 gives the same end result and is unneeded.
&gt; 

Thanks for this good feedback

&gt; Now that the node() virtual function is in the AccessibilityObhject class, I think you should do a cleanup pass of static member functions that take Node* and consider whether you can replace them with member functions that do not have a Node* argument. You will need to check that callers do not have some need to pass a different Node*. This would be good for getAttribute and might also apply to one or more of these:
&gt; 
&gt;     anchorElementForNode
&gt;     firstAccessibleObjectFromNode
&gt;     language
&gt;     listMarkerTextForNodeAndPosition
&gt;     renderListItemContainerForNode
&gt; 

I was able to change a lot of instances of getAttribute(Node*) to the member function that uses node() implicitly, but there were still some cases where the Node* variant was needed, so I have two variants (one with node, one without)

In the list you mentioned, I was only able to change language(). The other ones are pretty tightly tied to having arbitrary nodes passed in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251014</commentid>
    <comment_count>6</comment_count>
      <attachid>61479</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-14 01:14:03 -0700</bug_when>
    <thetext>Created attachment 61479
patch to test against other bots

adding patch after changes from darin&apos;s comments so that it can run against the bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251450</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-14 15:10:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/63358</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61195</attachid>
            <date>2010-07-12 01:08:29 -0700</date>
            <delta_ts>2010-07-12 01:10:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14342</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDctMTIgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogYXJpYS1jaGVja2VkIG5vdCByZWNvZ25pemVkIG9uIGltYWdlIG1hcCByYWRpbyBidXR0
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1
NQorCisgICAgICAgIFJlb3JnYW5pemUgaW50VmFsdWUoKSBjb2RlIHVzZWQgZm9yIGNoZWNrYm94
ZXMgYW5kIHJhZGlvIGJveGVzIHNvIHRoYXQKKyAgICAgICAgbm9uLXJlbmRlcmVyIEFjY2Vzc2li
aWxpdHkgb2JqZWN0cyAobGlrZSBpbWFnZSBtYXAgbGlua3MpIGNhbiBiZW5lZml0LgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQt
YXMtcmFkaW9idXR0b24uaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rOjpub2RlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmV0cmlldmVJbnRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNJbnRWYWx1ZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0NoZWNrYm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUmFkaW9CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNDaGVja2JveE9yUmFkaW8pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50VmFsdWUpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9kZSk6CisKIDIwMTAtMDctMTEgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluay5oCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDcgQEAKICAgICB2b2lkIHNldEhUTUxNYXBFbGVtZW50KEhUTUxNYXBFbGVtZW50KiBlbGVtZW50
KSB7IG1fbWFwRWxlbWVudCA9IGVsZW1lbnQ7IH0gICAgCiAgICAgSFRNTE1hcEVsZW1lbnQqIG1h
cEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21hcEVsZW1lbnQ7IH0KICAgICAKKyAgICB2aXJ0
dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FyZWFFbGVtZW50OyB9CiAgICAgdm9p
ZCBzZXRQYXJlbnQoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFy
ZW50OyB9CiAgICAgICAgIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVl
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDYzMDQxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNiBAQAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNXZWJBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0lucHV0SW1hZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNQ
cm9ncmVzc0luZGljYXRvcigpIGNvbnN0OwpAQCAtMTEyLDggKzExMSw2IEBACiAgICAgdmlydHVh
bCBib29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNh
blNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzSW50
VmFsdWUoKSBjb25zdDsKLSAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXNzaWJsZU5hbWUo
U3RyaW5nJik7CiAgICAgCiAgICAgLy8gUHJvdmlkZXMgY29tbW9uIGxvZ2ljIHVzZWQgYnkgYWxs
IGVsZW1lbnRzIHdoZW4gZGV0ZXJtaW5pbmcgaXNJZ25vcmVkLgpAQCAtMTY5LDcgKzE2Niw3IEBA
CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1f
cmVuZGVyZXIgPSByZW5kZXJlcjsgfQogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmVyOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IAorICAgIHZp
cnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0IAogICAgIHsgCiAgICAgICAgIHJldHVybiBtX3JlbmRl
cmVyID8gbV9yZW5kZXJlci0+bm9kZSgpIDogMDsgCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gNjMwNDEpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQsNyArMjY0LDggQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTmF0aXZlVGV4dENvbnRy
b2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkFyZWEo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94T3JS
YWRpbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2ti
b3goKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBDaGVja0JveFJvbGU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09
IFJhZGlvQnV0dG9uUm9sZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RCb3goKSBjb25zdCB7
IHJldHVybiByb2xlVmFsdWUoKSA9PSBMaXN0Qm94Um9sZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c01lZGlhVGltZWxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc01lbnVSZWxhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI5OCw2ICsyOTks
NyBAQAogICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9
PSBTY3JvbGxCYXJSb2xlOyB9CiAgICAgYm9vbCBpc0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJv
bGVWYWx1ZSgpID09IEJ1dHRvblJvbGU7IH0KICAgICBib29sIGlzTGlzdEl0ZW0oKSBjb25zdCB7
IHJldHVybiByb2xlVmFsdWUoKSA9PSBMaXN0SXRlbVJvbGU7IH0KKyAgICBib29sIGlzQ2hlY2ti
b3hPclJhZGlvKCkgY29uc3QgeyByZXR1cm4gaXNDaGVja2JveCgpIHx8IGlzUmFkaW9CdXR0b24o
KTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMzI1LDE2ICszMjcsMTggQEAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0
ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzSW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotCisgICAgYm9vbCBoYXNJbnRWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVJ
bnRWYWx1ZShpbnQmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW50VmFsdWUoKSBj
b25zdDsKKyAgICAKICAgICAvLyBBIHByb2dyYW1tYXRpYyB3YXkgdG8gc2V0IGEgbmFtZSBvbiBh
biBBY2Nlc3NpYmxlT2JqZWN0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nlc3NpYmxlTmFtZShT
dHJpbmcmKSB7IH0KICAgICAKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAgICAgYm9vbCBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSBjb25zdCAgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBpbnQgaGVhZGluZ0xldmVs
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGludFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIDAuMGY7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1heFZhbHVlRm9yUmFu
Z2UoKSBjb25zdCB7IHJldHVybiAwLjBmOyB9CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgwLDYgKzk4MCw0NCBAQAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGl2ZVJlZ2lvbiA9IGFy
aWFMaXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGxpdmVS
ZWdpb24sICJwb2xpdGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShsaXZlUmVnaW9uLCAiYXNzZXJ0
aXZlIik7CiB9CisgICAgCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWUoKSBjb25z
dAoreworICAgIGludCByZXN1bHQgPSAwOworICAgIHJldHJpZXZlSW50VmFsdWUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQogCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJldHJp
ZXZlSW50VmFsdWUoaW50JiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgICAgICByZXR1cm47CiAgICAgCisgICAgaWYgKGlzSGVhZGluZygpKSB7CisgICAg
ICAgIHJlc3VsdCA9IGhlYWRpbmdMZXZlbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIElmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywgY2hlY2sgdGhl
IGFyaWEtY2hlY2tlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4gbm9kZSgpLT5jaGVja2VkKCkKKyAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcm9sZVZhbHVlKCk7CisgICAgaWYgKHJvbGUgPT0g
UmFkaW9CdXR0b25Sb2xlIHx8IHJvbGUgPT0gQ2hlY2tCb3hSb2xlKSB7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2hlY2tlZCA9IGdldEF0dHJpYnV0ZShub2RlKCksIGFyaWFfY2hlY2tl
ZEF0dHIpOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY2hlY2tlZCwgInRydWUiKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGNoZWNrZWQsICJmYWxzZSIpKQorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICB9Cit9
CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzSW50VmFsdWUoKSBjb25zdAoreworICAg
IGlmIChpc0hlYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlz
Q2hlY2tib3hPclJhZGlvKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDYzMDQxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMTIgKzQ3Niw2IEBACiAKICAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NoZWNrYm94T3JSYWRpbygpIGNvbnN0Ci17Ci0gICAgQWNj
ZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwotICAgIHJldHVybiByb2xlID09IFJh
ZGlvQnV0dG9uUm9sZSB8fCByb2xlID09IENoZWNrQm94Um9sZTsKLX0gICAgCiAgICAgCiBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7
CkBAIC0xMDMwLDM4ICsxMDI0LDE5IEBACiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omhhc0ludFZhbHVlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaXNIZWFkaW5nKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3Jl
bmRlcmVyLT5ub2RlKCkgJiYgaXNDaGVja2JveE9yUmFkaW8oKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbnQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aW50VmFsdWUoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlciB8fCBpc1Bh
c3N3b3JkRmllbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IHJlc3VsdCA9IC0xOwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJldHJpZXZlSW50VmFsdWUocmVzdWx0KTsKICAgICAK
LSAgICBpZiAoaXNIZWFkaW5nKCkpCi0gICAgICAgIHJldHVybiBoZWFkaW5nTGV2ZWwoKTsKKyAg
ICBpZiAocmVzdWx0ICE9IC0xKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAotICAgIE5v
ZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpc0NoZWNr
Ym94T3JSYWRpbygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIElmIHRoaXMgaXMgYW4g
QVJJQSBjaGVja2JveCBvciByYWRpbywgY2hlY2sgdGhlIGFyaWEtY2hlY2tlZCBhdHRyaWJ1dGUg
cmF0aGVyIHRoYW4gbm9kZSgpLT5jaGVja2VkKCkKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlh
Um9sZSA9IGFyaWFSb2xlQXR0cmlidXRlKCk7Ci0gICAgaWYgKGFyaWFSb2xlID09IFJhZGlvQnV0
dG9uUm9sZSB8fCBhcmlhUm9sZSA9PSBDaGVja0JveFJvbGUpIHsKLSAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX2NoZWNrZWRBdHRyKS5zdHJpbmcoKSwgInRy
dWUiKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIE5vZGUqIGVsZW1lbnROb2RlID0gbm9kZSgpOworICAgIGlmIChlbGVtZW50Tm9k
ZSAmJiBlbGVtZW50Tm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudE5vZGUpLT5jaGVja2VkKCk7CiAg
ICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+Y2hl
Y2tlZCgpOworICAgIHJldHVybiAwOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2lt
YWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1IEBACitQYXBlciBDb2xvcjoKKworVGhpcyB0ZXN0cyB0aGF0IGFuIGlt
YWdlIG1hcCBsaW5rIGNhbiBiZSBtYWRlIGludG8gYSByYWRpbyBidXR0b24gd2l0aCBhcmlhIGFu
ZCBoYXZlIHRoZSByaWdodCBBWFZhbHVlIHdoZW4gYXJpYS1jaGVja2VkIGlzIHVzZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmZvY3VzZWRFbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVlOiAxJworUEFTUyBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5yb2xlIGlzICdBWFJvbGU6IEFYUmFkaW9C
dXR0b24nCitQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmlu
Z1ZhbHVlIGlzICdBWFZhbHVlOiAwJworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudC5yb2xlIGlzICdBWFJvbGU6IEFYUmFkaW9CdXR0b24nCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1
dHRvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1s
aW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKworPGRpdiBpZD0icGFwZXJjb2xvciIgY2xhc3M9ImxhYmVsIj5QYXBlciBD
b2xvcjo8L2Rpdj4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvY2FrZS5wbmciIHVzZW1hcD0iI2JhY2tz
aWRlbWFwIiBpZD0iYmFja0ltZyIgYWx0PSIiIHdpZHRoPSIyMjUiIGhlaWdodD0iMjA2Ij4KKzxt
YXAgbmFtZT0iYmFja3NpZGVtYXAiIGFyaWEtbGFiZWxsZWRieT0icGFwZXJjb2xvciIgcm9sZT0i
cmFkaW9ncm91cCI+CisgICAgICAgIDxhcmVhIHJvbGU9InJhZGlvIiBzaGFwZT0icmVjdCIgdGFi
aW5kZXg9IjAiIGFsdD0ieWVsbG93IiBocmVmPSIjIiBhcmlhLWNoZWNrZWQ9InRydWUiICBjb29y
ZHM9IjE5LDI4LDQ2LDUyIiBpZD0ieWVsbG93Ij4KKyAgICAgICAgPGFyZWEgcm9sZT0icmFkaW8i
IHNoYXBlPSJyZWN0IiB0YWJpbmRleD0iMCIgYWx0PSJvcmFuZ2UiIGhyZWY9IiMiIGFyaWEtY2hl
Y2tlZD0iZmFsc2UiIGNvb3Jkcz0iNTgsMjgsODUsNTIiIGlkPSJvcmFuZ2UiPgorPC9tYXA+CisK
KworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYW4gaW1hZ2UgbWFw
IGxpbmsgY2FuIGJlIG1hZGUgaW50byBhIHJhZGlvIGJ1dHRvbiB3aXRoIGFyaWEgYW5kIGhhdmUg
dGhlIHJpZ2h0IEFYVmFsdWUgd2hlbiBhcmlhLWNoZWNrZWQgaXMgdXNlZC4iKTsKKworICAgIGlm
ICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInllbGxvdyIpLmZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTog
MSciKTsKKyAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50LnJvbGUiLCAiJ0FYUm9sZTogQVhSYWRpb0J1dHRvbiciKTsKKworICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgib3JhbmdlIikuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmUo
ImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ1ZhbHVlIiwgIidB
WFZhbHVlOiAwJyIpOworICAgICAgICBzaG91bGRCZSgiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Zm9jdXNlZEVsZW1lbnQucm9sZSIsICInQVhSb2xlOiBBWFJhZGlvQnV0dG9uJyIpOworICAgIH0K
KworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
CisKKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9h
cmlhLWNoZWNrYm94LWNoZWNrZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1jaGVja2VkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjMwNDEpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gt
Y2hlY2tlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyLDkgKzEyLDkgQEAKIFBB
U1MgY2hlY2tib3guaXNDaGVja2VkIGlzIGZhbHNlCiBQQVNTIGNoZWNrYm94LmlzQ2hlY2tlZCBp
cyB0cnVlCiBQQVNTIGNoZWNrYm94LmlzQ2hlY2tlZCBpcyBmYWxzZQotUEFTUyBjaGVja2JveC5p
c0NoZWNrZWQgaXMgdHJ1ZQogUEFTUyBjaGVja2JveC5pc0NoZWNrZWQgaXMgZmFsc2UKIFBBU1Mg
Y2hlY2tib3guaXNDaGVja2VkIGlzIHRydWUKK1BBU1MgY2hlY2tib3guaXNDaGVja2VkIGlzIHRy
dWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWNoZWNrYm94LWNoZWNrZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtY2hl
Y2tlZC5odG1sCShyZXZpc2lvbiA2MzA0MSkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
YXJpYS1jaGVja2JveC1jaGVja2VkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDgg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICBbICJjaGVjazMiLCAiZmFsc2UiIF0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyAiY2hlY2s0IiwgInRydWUiIF0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyAiY2hlY2s1IiwgImZhbHNlIiBdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFsgImNoZWNrNiIsICJ0cnVlIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsgImNo
ZWNrNyIsICJmYWxzZSIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbICJjaGVjazYiLCAi
ZmFsc2UiIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyAiY2hlY2s3IiwgInRydWUiIF0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgWyAiY2hlY2s4IiwgInRydWUiIF1dOwogCiAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbnN3ZXJzLmxlbmd0aDsgaSsrKSB7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA2MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA3LTEyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQVg6IGFyaWEtY2hlY2tlZCBub3QgcmVjb2duaXplZCBvbiBpbWFnZSBtYXAgcmFkaW8g
YnV0dG9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDIwNTUKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1jaGVja2VkLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtY2hlY2tl
ZC5odG1sOgorICAgICAgICAgICAgIEluY29ycmVjdCBhc3N1bXB0aW9uIGluIGxheW91dCB0ZXN0
LiBBUklBIHZhbHVlcyBzaG91bGQgYWx3YXlzIG92ZXJyaWRlIG5hdGl2ZSB2YWx1ZXMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFz
LXJhZGlvYnV0dG9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1dHRvbi5odG1sOiBB
ZGRlZC4KKwogMjAxMC0wNy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61196</attachid>
            <date>2010-07-12 01:10:34 -0700</date>
            <delta_ts>2010-07-13 00:13:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14271</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDctMTIgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogYXJpYS1jaGVja2VkIG5vdCByZWNvZ25pemVkIG9uIGltYWdlIG1hcCByYWRpbyBidXR0
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1
NQorCisgICAgICAgIFJlb3JnYW5pemUgaW50VmFsdWUoKSBjb2RlIHVzZWQgZm9yIGNoZWNrYm94
ZXMgYW5kIHJhZGlvIGJveGVzIHNvIHRoYXQKKyAgICAgICAgbm9uLXJlbmRlcmVyIEFjY2Vzc2li
aWxpdHkgb2JqZWN0cyAobGlrZSBpbWFnZSBtYXAgbGlua3MpIGNhbiBiZW5lZml0LgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQt
YXMtcmFkaW9idXR0b24uaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rOjpub2RlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmV0cmlldmVJbnRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNJbnRWYWx1ZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0NoZWNrYm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUmFkaW9CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNDaGVja2JveE9yUmFkaW8pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50VmFsdWUpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9kZSk6CisKIDIwMTAtMDctMTEgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluay5oCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDcgQEAKICAgICB2b2lkIHNldEhUTUxNYXBFbGVtZW50KEhUTUxNYXBFbGVtZW50KiBlbGVtZW50
KSB7IG1fbWFwRWxlbWVudCA9IGVsZW1lbnQ7IH0gICAgCiAgICAgSFRNTE1hcEVsZW1lbnQqIG1h
cEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21hcEVsZW1lbnQ7IH0KICAgICAKKyAgICB2aXJ0
dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FyZWFFbGVtZW50OyB9CiAgICAgdm9p
ZCBzZXRQYXJlbnQoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFy
ZW50OyB9CiAgICAgICAgIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVl
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDYzMDQxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNiBAQAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNXZWJBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0lucHV0SW1hZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNQ
cm9ncmVzc0luZGljYXRvcigpIGNvbnN0OwpAQCAtMTEyLDggKzExMSw2IEBACiAgICAgdmlydHVh
bCBib29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNh
blNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzSW50
VmFsdWUoKSBjb25zdDsKLSAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXNzaWJsZU5hbWUo
U3RyaW5nJik7CiAgICAgCiAgICAgLy8gUHJvdmlkZXMgY29tbW9uIGxvZ2ljIHVzZWQgYnkgYWxs
IGVsZW1lbnRzIHdoZW4gZGV0ZXJtaW5pbmcgaXNJZ25vcmVkLgpAQCAtMTY5LDcgKzE2Niw3IEBA
CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1f
cmVuZGVyZXIgPSByZW5kZXJlcjsgfQogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmVyOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IAorICAgIHZp
cnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0IAogICAgIHsgCiAgICAgICAgIHJldHVybiBtX3JlbmRl
cmVyID8gbV9yZW5kZXJlci0+bm9kZSgpIDogMDsgCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gNjMwNDEpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQsNyArMjY0LDggQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTmF0aXZlVGV4dENvbnRy
b2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkFyZWEo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94T3JS
YWRpbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2ti
b3goKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBDaGVja0JveFJvbGU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09
IFJhZGlvQnV0dG9uUm9sZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RCb3goKSBjb25zdCB7
IHJldHVybiByb2xlVmFsdWUoKSA9PSBMaXN0Qm94Um9sZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c01lZGlhVGltZWxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc01lbnVSZWxhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI5OCw2ICsyOTks
NyBAQAogICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9
PSBTY3JvbGxCYXJSb2xlOyB9CiAgICAgYm9vbCBpc0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJv
bGVWYWx1ZSgpID09IEJ1dHRvblJvbGU7IH0KICAgICBib29sIGlzTGlzdEl0ZW0oKSBjb25zdCB7
IHJldHVybiByb2xlVmFsdWUoKSA9PSBMaXN0SXRlbVJvbGU7IH0KKyAgICBib29sIGlzQ2hlY2ti
b3hPclJhZGlvKCkgY29uc3QgeyByZXR1cm4gaXNDaGVja2JveCgpIHx8IGlzUmFkaW9CdXR0b24o
KTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMzI1LDE2ICszMjcsMTggQEAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0
ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzSW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotCisgICAgYm9vbCBoYXNJbnRWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVJ
bnRWYWx1ZShpbnQmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW50VmFsdWUoKSBj
b25zdDsKKyAgICAKICAgICAvLyBBIHByb2dyYW1tYXRpYyB3YXkgdG8gc2V0IGEgbmFtZSBvbiBh
biBBY2Nlc3NpYmxlT2JqZWN0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nlc3NpYmxlTmFtZShT
dHJpbmcmKSB7IH0KICAgICAKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAgICAgYm9vbCBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSBjb25zdCAgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBpbnQgaGVhZGluZ0xldmVs
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGludFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIDAuMGY7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1heFZhbHVlRm9yUmFu
Z2UoKSBjb25zdCB7IHJldHVybiAwLjBmOyB9CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgwLDYgKzk4MCw0MyBAQAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGl2ZVJlZ2lvbiA9IGFy
aWFMaXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGxpdmVS
ZWdpb24sICJwb2xpdGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShsaXZlUmVnaW9uLCAiYXNzZXJ0
aXZlIik7CiB9CisgICAgCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWUoKSBjb25z
dAoreworICAgIGludCByZXN1bHQgPSAwOworICAgIHJldHJpZXZlSW50VmFsdWUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQogCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJldHJp
ZXZlSW50VmFsdWUoaW50JiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgICAgICByZXR1cm47CiAgICAgCisgICAgaWYgKGlzSGVhZGluZygpKSB7CisgICAg
ICAgIHJlc3VsdCA9IGhlYWRpbmdMZXZlbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIElmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywgY2hlY2sgdGhl
IGFyaWEtY2hlY2tlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4gbm9kZSgpLT5jaGVja2VkKCkKKyAg
ICBpZiAoaXNDaGVja2JveE9yUmFkaW8oKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNoZWNrZWQgPSBnZXRBdHRyaWJ1dGUobm9kZSgpLCBhcmlhX2NoZWNrZWRBdHRyKTsKKyAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGNoZWNrZWQsICJ0cnVlIikpCisgICAgICAgICAgICBy
ZXN1bHQgPSAxOworICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShjaGVja2VkLCAi
ZmFsc2UiKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgfQorfQorCitib29sIEFjY2Vz
c2liaWxpdHlPYmplY3Q6Omhhc0ludFZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNIZWFkaW5n
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0NoZWNrYm94T3JSYWRp
bygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA2MzA0MSkK
KysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc2LDEyICs0NzYsNiBAQAogCiAgICAgcmV0dXJuIGlucHV0RWxl
bWVudC0+aXNQYXNzd29yZEZpZWxkKCk7CiB9Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aXNDaGVja2JveE9yUmFkaW8oKSBjb25zdAotewotICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGUgPSByb2xlVmFsdWUoKTsKLSAgICByZXR1cm4gcm9sZSA9PSBSYWRpb0J1dHRvblJvbGUg
fHwgcm9sZSA9PSBDaGVja0JveFJvbGU7Ci19ICAgIAogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdAogewpAQCAtMTAzMCwzOCAr
MTAyNCwxOSBAQAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpoYXNJbnRWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSGVhZGluZygp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+bm9kZSgp
ICYmIGlzQ2hlY2tib3hPclJhZGlvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludFZh
bHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgaXNQYXNzd29yZEZpZWxkKCkp
Ci0gICAgICAgIHJldHVybiAwOworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpyZXRyaWV2ZUludFZhbHVlKHJlc3VsdCk7CiAgICAgCi0gICAgaWYgKGlzSGVh
ZGluZygpKQotICAgICAgICByZXR1cm4gaGVhZGluZ0xldmVsKCk7CisgICAgaWYgKHJlc3VsdCAh
PSAtMSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKLSAgICBOb2RlKiBub2RlID0gbV9y
ZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXNDaGVja2JveE9yUmFkaW8oKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGFuIEFSSUEgY2hlY2tib3gg
b3IgcmFkaW8sIGNoZWNrIHRoZSBhcmlhLWNoZWNrZWQgYXR0cmlidXRlIHJhdGhlciB0aGFuIG5v
ZGUoKS0+Y2hlY2tlZCgpCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9s
ZUF0dHJpYnV0ZSgpOwotICAgIGlmIChhcmlhUm9sZSA9PSBSYWRpb0J1dHRvblJvbGUgfHwgYXJp
YVJvbGUgPT0gQ2hlY2tCb3hSb2xlKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShn
ZXRBdHRyaWJ1dGUoYXJpYV9jaGVja2VkQXR0cikuc3RyaW5nKCksICJ0cnVlIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBOb2Rl
KiBlbGVtZW50Tm9kZSA9IG5vZGUoKTsKKyAgICBpZiAoZWxlbWVudE5vZGUgJiYgZWxlbWVudE5v
ZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGVsZW1lbnROb2RlKS0+Y2hlY2tlZCgpOwogICAgIAotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSktPmNoZWNrZWQoKTsKKyAgICBy
ZXR1cm4gMDsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZhbHVlRGVz
Y3JpcHRpb24oKSBjb25zdApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1dHRvbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2Ut
bWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1dHRvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11
c2VkLWFzLXJhZGlvYnV0dG9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorUGFwZXIgQ29sb3I6CisKK1RoaXMgdGVzdHMgdGhhdCBhbiBpbWFnZSBtYXAgbGluayBj
YW4gYmUgbWFkZSBpbnRvIGEgcmFkaW8gYnV0dG9uIHdpdGggYXJpYSBhbmQgaGF2ZSB0aGUgcmln
aHQgQVhWYWx1ZSB3aGVuIGFyaWEtY2hlY2tlZCBpcyB1c2VkLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dC5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1ZTogMScKK1BBU1MgYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuZm9jdXNlZEVsZW1lbnQucm9sZSBpcyAnQVhSb2xlOiBBWFJhZGlvQnV0dG9uJworUEFTUyBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdWYWx1ZSBpcyAnQVhW
YWx1ZTogMCcKK1BBU1MgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQucm9s
ZSBpcyAnQVhSb2xlOiBBWFJhZGlvQnV0dG9uJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1t
YXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJh
ZGlvYnV0dG9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IGZhbHNlOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisK
KzxkaXYgaWQ9InBhcGVyY29sb3IiIGNsYXNzPSJsYWJlbCI+UGFwZXIgQ29sb3I6PC9kaXY+Cis8
aW1nIHNyYz0icmVzb3VyY2VzL2Nha2UucG5nIiB1c2VtYXA9IiNiYWNrc2lkZW1hcCIgaWQ9ImJh
Y2tJbWciIGFsdD0iIiB3aWR0aD0iMjI1IiBoZWlnaHQ9IjIwNiI+Cis8bWFwIG5hbWU9ImJhY2tz
aWRlbWFwIiBhcmlhLWxhYmVsbGVkYnk9InBhcGVyY29sb3IiIHJvbGU9InJhZGlvZ3JvdXAiPgor
ICAgICAgICA8YXJlYSByb2xlPSJyYWRpbyIgc2hhcGU9InJlY3QiIHRhYmluZGV4PSIwIiBhbHQ9
InllbGxvdyIgaHJlZj0iIyIgYXJpYS1jaGVja2VkPSJ0cnVlIiAgY29vcmRzPSIxOSwyOCw0Niw1
MiIgaWQ9InllbGxvdyI+CisgICAgICAgIDxhcmVhIHJvbGU9InJhZGlvIiBzaGFwZT0icmVjdCIg
dGFiaW5kZXg9IjAiIGFsdD0ib3JhbmdlIiBocmVmPSIjIiBhcmlhLWNoZWNrZWQ9ImZhbHNlIiBj
b29yZHM9IjU4LDI4LDg1LDUyIiBpZD0ib3JhbmdlIj4KKzwvbWFwPgorCisKKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFuIGltYWdlIG1hcCBsaW5rIGNhbiBiZSBt
YWRlIGludG8gYSByYWRpbyBidXR0b24gd2l0aCBhcmlhIGFuZCBoYXZlIHRoZSByaWdodCBBWFZh
bHVlIHdoZW4gYXJpYS1jaGVja2VkIGlzIHVzZWQuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5
ZWxsb3ciKS5mb2N1cygpOworICAgICAgICBzaG91bGRCZSgiYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuZm9jdXNlZEVsZW1lbnQuc3RyaW5nVmFsdWUiLCAiJ0FYVmFsdWU6IDEnIik7CisgICAgICAg
IHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5yb2xlIiwg
IidBWFJvbGU6IEFYUmFkaW9CdXR0b24nIik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm9yYW5nZSIpLmZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogMCciKTsK
KyAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50
LnJvbGUiLCAiJ0FYUm9sZTogQVhSYWRpb0J1dHRvbiciKTsKKyAgICB9CisKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8
L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1j
aGVja2VkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L2FyaWEtY2hlY2tib3gtY2hlY2tlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYzMDQxKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWNoZWNrYm94LWNoZWNrZWQtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw5ICsxMiw5IEBACiBQQVNTIGNoZWNrYm94Lmlz
Q2hlY2tlZCBpcyBmYWxzZQogUEFTUyBjaGVja2JveC5pc0NoZWNrZWQgaXMgdHJ1ZQogUEFTUyBj
aGVja2JveC5pc0NoZWNrZWQgaXMgZmFsc2UKLVBBU1MgY2hlY2tib3guaXNDaGVja2VkIGlzIHRy
dWUKIFBBU1MgY2hlY2tib3guaXNDaGVja2VkIGlzIGZhbHNlCiBQQVNTIGNoZWNrYm94LmlzQ2hl
Y2tlZCBpcyB0cnVlCitQQVNTIGNoZWNrYm94LmlzQ2hlY2tlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1jaGVja2VkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWNoZWNrYm94LWNoZWNrZWQuaHRtbAkocmV2
aXNpb24gNjMwNDEpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gt
Y2hlY2tlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAgICAgICAgICAg
ICAgICAgICAgICAgICAgWyAiY2hlY2szIiwgImZhbHNlIiBdLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIFsgImNoZWNrNCIsICJ0cnVlIiBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsg
ImNoZWNrNSIsICJmYWxzZSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbICJjaGVjazYi
LCAidHJ1ZSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbICJjaGVjazciLCAiZmFsc2Ui
IF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyAiY2hlY2s2IiwgImZhbHNlIiBdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIFsgImNoZWNrNyIsICJ0cnVlIiBdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIFsgImNoZWNrOCIsICJ0cnVlIiBdXTsKIAogICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYW5zd2Vycy5sZW5ndGg7IGkrKykgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjMw
NjMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wNy0xMiAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFYOiBhcmlh
LWNoZWNrZWQgbm90IHJlY29nbml6ZWQgb24gaW1hZ2UgbWFwIHJhZGlvIGJ1dHRvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMDU1CisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtY2hlY2tlZC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLWNoZWNrYm94LWNoZWNrZWQuaHRtbDoKKyAgICAg
ICAgICAgICBJbmNvcnJlY3QgYXNzdW1wdGlvbiBpbiBsYXlvdXQgdGVzdC4gQVJJQSB2YWx1ZXMg
c2hvdWxkIGFsd2F5cyBvdmVycmlkZSBuYXRpdmUgdmFsdWVzLgorCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1dHRvbi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbDogQWRkZWQuCisKIDIwMTAt
MDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61336</attachid>
            <date>2010-07-13 00:13:59 -0700</date>
            <delta_ts>2010-07-13 09:50:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42055-20100713001357.patch</filename>
            <type>text/plain</type>
            <size>13037</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzE3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMTIgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogYXJpYS1jaGVja2VkIG5vdCByZWNvZ25pemVkIG9uIGltYWdlIG1hcCByYWRpbyBidXR0
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1
NQorCisgICAgICAgIE1vdmVzIHNvbWUgY29kZSBmcm9tIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QgdG8gQWNjZXNzaWJpbGl0eU9iamVjdCBzbyB0aGF0CisgICAgICAgIGVsZW1lbnRzIHRoYXQg
ZG8gbm90IGhhdmUgcmVuZGVyIG9iamVjdHMsIGJ1dCBkbyBoYXZlIE5vZGVzIChsaWtlIGltYWdl
IG1hcCBsaW5rcykKKyAgICAgICAgY2FuIHN0aWxsIG1ha2UgdXNlIG9mIGNlcnRhaW4gYXJpYSBh
dHRyaWJ1dGVzLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2lt
YWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmg6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjpub2RlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aW50VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6cmV0cmlldmVJbnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpoYXNJbnRWYWx1ZSk6CisgICAgICAgICAgICBNb3ZlIGludFZhbHVlIGxvZ2luIGludG8g
QWNjZXNzaWJpbGl0eU9iamVjdC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQ2hl
Y2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNSYWRpb0J1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0NoZWNrYm94
T3JSYWRpbyk6CisgICAgICAgICAgICBDb25zb2xpZGF0ZSB3aGF0IGRlZmluZXMgYSBjaGVja2Jv
eCBhbmQgcmFkaW8gYnV0dG9uIGludG8gQWNjZXNzaWJpbGl0eU9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6aGVhZGluZ0xldmVsKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNQYXNzd29yZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludFZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGUpOgorCiAyMDEwLTA3LTEyICBKYXkgQ2l2ZWxs
aSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRh
bXVyYS4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBM
aW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJ
bWFnZU1hcExpbmsuaAkocmV2aXNpb24gNjMwNDEpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhUTUxNYXBFbGVtZW50KEhUTUxNYXBFbGVtZW50KiBl
bGVtZW50KSB7IG1fbWFwRWxlbWVudCA9IGVsZW1lbnQ7IH0gICAgCiAgICAgSFRNTE1hcEVsZW1l
bnQqIG1hcEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21hcEVsZW1lbnQ7IH0KICAgICAKKyAg
ICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FyZWFFbGVtZW50OyB9CiAg
ICAgdm9pZCBzZXRQYXJlbnQoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50KSB7IG1fcGFyZW50
ID0gcGFyZW50OyB9CiAgICAgICAgIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgcm9s
ZVZhbHVlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDYgKzk4MCw0
MyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQUxpCiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsaXZlUmVnaW9uID0gYXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvbiwgInBvbGl0ZSIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGxpdmVSZWdpb24sICJhc3NlcnRpdmUiKTsKIH0KKyAgICAKK2ludCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjppbnRWYWx1ZSgpIGNvbnN0Cit7CisgICAgaW50IHJlc3VsdCA9IDA7Cisg
ICAgcmV0cmlldmVJbnRWYWx1ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKK3Zv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmV0cmlldmVJbnRWYWx1ZShpbnQmIHJlc3VsdCkgY29u
c3QKK3sKKyAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoaXNIZWFkaW5nKCkpIHsKKyAgICAgICAgcmVzdWx0ID0gaGVhZGluZ0xldmVsKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhbiBBUklB
IGNoZWNrYm94IG9yIHJhZGlvLCBjaGVjayB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZSByYXRo
ZXIgdGhhbiBub2RlKCktPmNoZWNrZWQoKQorICAgIGlmIChpc0NoZWNrYm94T3JSYWRpbygpKSB7
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2hlY2tlZCA9IGdldEF0dHJpYnV0ZShub2Rl
KCksIGFyaWFfY2hlY2tlZEF0dHIpOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY2hl
Y2tlZCwgInRydWUiKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGNoZWNrZWQsICJmYWxzZSIpKQorICAgICAgICAgICAgcmVzdWx0
ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzSW50VmFsdWUo
KSBjb25zdAoreworICAgIGlmIChpc0hlYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgaWYgKGlzQ2hlY2tib3hPclJhZGlvKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2
aXNpb24gNjMwNDEpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzV2ViQXJlYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgp
ID09IENoZWNrQm94Um9sZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29u
c3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gUmFkaW9CdXR0b25Sb2xlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzTGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IExpc3RCb3hS
b2xlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFUaW1lbGluZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVudVJlbGF0ZWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMjk4LDYgKzI5OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gU2Nyb2xsQmFyUm9sZTsgfQogICAg
IGJvb2wgaXNCdXR0b24oKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xl
OyB9CiAgICAgYm9vbCBpc0xpc3RJdGVtKCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0g
TGlzdEl0ZW1Sb2xlOyB9CisgICAgYm9vbCBpc0NoZWNrYm94T3JSYWRpbygpIGNvbnN0IHsgcmV0
dXJuIGlzQ2hlY2tib3goKSB8fCBpc1JhZGlvQnV0dG9uKCk7IH0KICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDaGVja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTMyNSwxNiArMzI3LDE4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJp
YnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGNhblNldEV4
cGFuZGVkQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzSW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCisgICAgYm9v
bCBoYXNJbnRWYWx1ZSgpIGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVJbnRWYWx1ZShpbnQmIHJl
c3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW50VmFsdWUoKSBjb25zdDsKKyAgICAKICAg
ICAvLyBBIHByb2dyYW1tYXRpYyB3YXkgdG8gc2V0IGEgbmFtZSBvbiBhbiBBY2Nlc3NpYmxlT2Jq
ZWN0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nlc3NpYmxlTmFtZShTdHJpbmcmKSB7IH0KICAg
ICAKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgYm9v
bCBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCAgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBpbnQgaGVhZGluZ0xldmVsKCkgY29uc3QgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGludFZhbHVlKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBTdHJp
bmcoKTsgfQogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IDAuMGY7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiAwLjBmOyB9CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc2LDEyICs0NzYsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFz
c3dvCiAKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NoZWNrYm94T3JSYWRpbygpIGNvbnN0
Ci17Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwotICAgIHJldHVy
biByb2xlID09IFJhZGlvQnV0dG9uUm9sZSB8fCByb2xlID09IENoZWNrQm94Um9sZTsKLX0gICAg
CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwbG9hZEJ1dHRv
bigpIGNvbnN0CiB7CkBAIC0xMDMwLDM4ICsxMDI0LDE4IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojp0ZXh0VW4KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzSW50VmFsdWUoKSBjb25zdAotewotICAgIGlmIChp
c0hlYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKG1fcmVuZGVy
ZXItPm5vZGUoKSAmJiBpc0NoZWNrYm94T3JSYWRpbygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjppbnRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8IGlzUGFzc3dv
cmRGaWVsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoaXNIZWFkaW5nKCkp
Ci0gICAgICAgIHJldHVybiBoZWFkaW5nTGV2ZWwoKTsKLSAgICAKLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXNDaGVja2JveE9yUmFkaW8o
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzQ2hlY2tib3hPclJhZGlvKCkpCisgICAg
ICAgIHJldHVybiBpc0NoZWNrZWQoKSA/IDEgOiAwOwogCi0gICAgLy8gSWYgdGhpcyBpcyBhbiBB
UklBIGNoZWNrYm94IG9yIHJhZGlvLCBjaGVjayB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZSBy
YXRoZXIgdGhhbiBub2RlKCktPmNoZWNrZWQoKQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFS
b2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKLSAgICBpZiAoYXJpYVJvbGUgPT0gUmFkaW9CdXR0
b25Sb2xlIHx8IGFyaWFSb2xlID09IENoZWNrQm94Um9sZSkgewotICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfY2hlY2tlZEF0dHIpLnN0cmluZygpLCAidHJ1
ZSIpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJldHJp
ZXZlSW50VmFsdWUocmVzdWx0KTsKKyAgICAKKyAgICBpZiAocmVzdWx0ICE9IC0xKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obm9kZSktPmNoZWNrZWQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogU3RyaW5nIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdApJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
CShyZXZpc2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJBcmVh
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0lucHV0SW1hZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0lu
ZGljYXRvcigpIGNvbnN0OwpAQCAtMTEyLDggKzExMSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
U2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNJbnRW
YWx1ZSgpIGNvbnN0OwotICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nlc3NpYmxlTmFtZShT
dHJpbmcmKTsKICAgICAKICAgICAvLyBQcm92aWRlcyBjb21tb24gbG9naWMgdXNlZCBieSBhbGwg
ZWxlbWVudHMgd2hlbiBkZXRlcm1pbmluZyBpc0lnbm9yZWQuCkBAIC0xNjksNyArMTY2LDcgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIE5vZGUqIG5vZGUoKSBjb25zdCAK
KyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCAKICAgICB7IAogICAgICAgICByZXR1cm4g
bV9yZW5kZXJlciA/IG1fcmVuZGVyZXItPm5vZGUoKSA6IDA7IAogICAgIH07CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MzE3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA3LTEyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQVg6IGFyaWEtY2hlY2tlZCBub3QgcmVjb2duaXplZCBvbiBpbWFnZSBtYXAgcmFkaW8gYnV0
dG9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIw
NTUKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5r
LXVzZWQtYXMtcmFkaW9idXR0b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9u
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTEyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2Vk
LWFzLXJhZGlvYnV0dG9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0
dG9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACitQYXBlciBDb2xvcjoKKworVGhp
cyB0ZXN0cyB0aGF0IGFuIGltYWdlIG1hcCBsaW5rIGNhbiBiZSBtYWRlIGludG8gYSByYWRpbyBi
dXR0b24gd2l0aCBhcmlhIGFuZCBoYXZlIHRoZSByaWdodCBBWFZhbHVlIHdoZW4gYXJpYS1jaGVj
a2VkIGlzIHVzZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVl
OiAxJworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5yb2xlIGlz
ICdBWFJvbGU6IEFYUmFkaW9CdXR0b24nCitQQVNTIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZv
Y3VzZWRFbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVlOiAwJworUEFTUyBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5yb2xlIGlzICdBWFJvbGU6IEFYUmFkaW9CdXR0
b24nCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxp
bmstdXNlZC1hcy1yYWRpb2J1dHRvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0
b24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBpZD0icGFwZXJjb2xvciIgY2xh
c3M9ImxhYmVsIj5QYXBlciBDb2xvcjo8L2Rpdj4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvY2FrZS5w
bmciIHVzZW1hcD0iI2JhY2tzaWRlbWFwIiBpZD0iYmFja0ltZyIgYWx0PSIiIHdpZHRoPSIyMjUi
IGhlaWdodD0iMjA2Ij4KKzxtYXAgbmFtZT0iYmFja3NpZGVtYXAiIGFyaWEtbGFiZWxsZWRieT0i
cGFwZXJjb2xvciIgcm9sZT0icmFkaW9ncm91cCI+CisgICAgICAgIDxhcmVhIHJvbGU9InJhZGlv
IiBzaGFwZT0icmVjdCIgdGFiaW5kZXg9IjAiIGFsdD0ieWVsbG93IiBocmVmPSIjIiBhcmlhLWNo
ZWNrZWQ9InRydWUiICBjb29yZHM9IjE5LDI4LDQ2LDUyIiBpZD0ieWVsbG93Ij4KKyAgICAgICAg
PGFyZWEgcm9sZT0icmFkaW8iIHNoYXBlPSJyZWN0IiB0YWJpbmRleD0iMCIgYWx0PSJvcmFuZ2Ui
IGhyZWY9IiMiIGFyaWEtY2hlY2tlZD0iZmFsc2UiIGNvb3Jkcz0iNTgsMjgsODUsNTIiIGlkPSJv
cmFuZ2UiPgorPC9tYXA+CisKKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3Rz
IHRoYXQgYW4gaW1hZ2UgbWFwIGxpbmsgY2FuIGJlIG1hZGUgaW50byBhIHJhZGlvIGJ1dHRvbiB3
aXRoIGFyaWEgYW5kIGhhdmUgdGhlIHJpZ2h0IEFYVmFsdWUgd2hlbiBhcmlhLWNoZWNrZWQgaXMg
dXNlZC4iKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllbGxvdyIpLmZvY3VzKCk7CisgICAgICAg
IHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdW
YWx1ZSIsICInQVhWYWx1ZTogMSciKTsKKyAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnJvbGUiLCAiJ0FYUm9sZTogQVhSYWRpb0J1dHRvbici
KTsKKworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3JhbmdlIikuZm9jdXMoKTsK
KyAgICAgICAgc2hvdWxkQmUoImFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50
LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiAwJyIpOworICAgICAgICBzaG91bGRCZSgiYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQucm9sZSIsICInQVhSb2xlOiBBWFJhZGlv
QnV0dG9uJyIpOworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="49348"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61479</attachid>
            <date>2010-07-14 01:14:03 -0700</date>
            <delta_ts>2010-07-14 01:14:18 -0700</delta_ts>
            <desc>patch to test against other bots</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23420</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMDctMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogYXJpYS1jaGVja2VkIG5vdCByZWNvZ25pemVkIG9uIGltYWdlIG1hcCByYWRpbyBidXR0
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1
NQorCisgICAgICAgIE1vdmVzIHNvbWUgY29kZSBmcm9tIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QgdG8gQWNjZXNzaWJpbGl0eU9iamVjdCBzbyB0aGF0CisgICAgICAgIGVsZW1lbnRzIHRoYXQg
ZG8gbm90IGhhdmUgcmVuZGVyIG9iamVjdHMsIGJ1dCBkbyBoYXZlIE5vZGVzIChsaWtlIGltYWdl
IG1hcCBsaW5rcyAKKyAgICAgICAgYW5kIGxpc3QgYm94IG9wdGlvbnMpIGNhbiBzdGlsbCBtYWtl
IHVzZSBvZiBjZXJ0YWluIGFyaWEgYXR0cmlidXRlcy4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLmh0
bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rOjpyb2xlVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6YWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlJbWFn
ZU1hcExpbms6OnRpdGxlKToKKyAgICAgICAgICAgIE1ha2UgaW1hZ2VNYXAgdXNlIHN0YW5kYXJk
IEFjY2Vzc2liaWxpdHlPYmplY3QgbWV0aG9kcyBmb3IgZ2V0QXR0cmlidXRlKCkKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms6Om5vZGUpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnN0cmluZ1ZhbHVl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bm9kZSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omxhbmd1YWdlKToKKyAgICAgICAgICAgICBM
YW5ndWFnZSBtZXRob2QgZG9lc24ndCBuZWVkIGEgbm9kZSgpIGFueW1vcmUsIGl0IGNhbiB1c2Ug
dGhlIG5vZGUgZnJvbSBBY2Nlc3NpYmlsaXR5T2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyTGlzdEl0ZW1Db250YWluZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjppbnRWYWx1ZSk6CisgICAgICAgICAgIE1vdmUgaW50VmFsdWUgaW50byBBY2Nl
c3NpYmlsaXR5T2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
aGFzSW50VmFsdWUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNDaGVja2JveCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1JhZGlvQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQ2hlY2tib3hPclJhZGlv
KToKKyAgICAgICAgICAgIENvbnNvbGlkYXRlIHdoYXQgZGVmaW5lcyBhIGNoZWNrYm94IGFuZCBy
YWRpbyBidXR0b24gaW50byBBY2Nlc3NpYmlsaXR5T2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50VmFsdWUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0KToKKyAgICAgICAgICAgIFN0b3AgdXNpbmcgQWNjZXNz
aWJpbGl0eU9iamVjdHMgZ2V0QXR0cmlidXRlIChubyByZWFzb24gdG8gdXNlIGl0IHJlYWxseSku
CisKIDIwMTAtMDctMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaAkocmV2aXNpb24gNjMyODUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAgICAgdm9pZCBzZXRIVE1MTWFwRWxlbWVudChI
VE1MTWFwRWxlbWVudCogZWxlbWVudCkgeyBtX21hcEVsZW1lbnQgPSBlbGVtZW50OyB9ICAgIAog
ICAgIEhUTUxNYXBFbGVtZW50KiBtYXBFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tYXBFbGVt
ZW50OyB9CiAgICAgCisgICAgdmlydHVhbCBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9h
cmVhRWxlbWVudDsgfQogICAgIHZvaWQgc2V0UGFyZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogICAgICAgICAKICAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiA2MzI4NSkKKysrIFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
NCw3ICsyNjQsOCBAQAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViQXJlYSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNv
bnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IENoZWNrQm94Um9sZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gUmFkaW9C
dXR0b25Sb2xlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTGlzdEJveCgpIGNvbnN0IHsgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IExpc3RCb3hSb2xlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFU
aW1lbGluZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVu
dVJlbGF0ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjk4LDYgKzI5OSw3IEBACiAg
ICAgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFNjcm9s
bEJhclJvbGU7IH0KICAgICBib29sIGlzQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVl
KCkgPT0gQnV0dG9uUm9sZTsgfQogICAgIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IExpc3RJdGVtUm9sZTsgfQorICAgIGJvb2wgaXNDaGVja2JveE9yUmFk
aW8oKSBjb25zdCB7IHJldHVybiBpc0NoZWNrYm94KCkgfHwgaXNSYWRpb0J1dHRvbigpOyB9CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBA
IC0zMjUsMTYgKzMyNywxNyBAQAogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRTZWxlY3RlZENoaWxk
cmVuQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIAot
ICAgIHZpcnR1YWwgYm9vbCBoYXNJbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
KyAgICBib29sIGhhc0ludFZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW50VmFsdWUo
KSBjb25zdDsKKyAgICAKICAgICAvLyBBIHByb2dyYW1tYXRpYyB3YXkgdG8gc2V0IGEgbmFtZSBv
biBhbiBBY2Nlc3NpYmxlT2JqZWN0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nlc3NpYmxlTmFt
ZShTdHJpbmcmKSB7IH0KICAgICAKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAgICAgYm9vbCBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdCAgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBpbnQgaGVhZGluZ0xl
dmVsKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGludFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIDAuMGY7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1heFZhbHVlRm9y
UmFuZ2UoKSBjb25zdCB7IHJldHVybiAwLjBmOyB9CkBAIC00MTksOCArNDIyLDcgQEAKICAgICB2
aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIEZyYW1lVmlldyogdG9wRG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBGcmFtZVZpZXcqIGRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdDsKLSAgICBTdHJpbmcgbGFuZ3VhZ2UoTm9k
ZSopIGNvbnN0OworICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzZWQoYm9vbCkgeyB9CkBAIC00NTQsNyArNDU2LDggQEAKICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpIHsgfQogICAgIAogICAg
IHN0YXRpYyBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZVRvV2ViQ29yZVJvbGUoY29uc3QgU3Ry
aW5nJik7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlKE5vZGUq
LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZ2V0QXR0cmlidXRlKE5vZGUqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29u
c3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIHZpcnR1YWwgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25z
dCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CkBAIC01NjQsNyArNTY3LDYgQEAK
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgYm9v
bCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIFJlbmRlckxpc3RJdGVt
KiByZW5kZXJMaXN0SXRlbUNvbnRhaW5lckZvck5vZGUoTm9kZSogbm9kZSkgY29uc3Q7CiAgICAg
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFpblB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcj4gbV93cmFwcGVyOwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiA2MzI4NSkKKysrIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDcgKzc1LDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzV2ViQXJlYSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94T3JS
YWRpbygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSBjb25zdDsKQEAgLTEwNiwxNCArMTA1LDExIEBACiAg
ICAgdmlydHVhbCBib29sIGlzRXhwYW5kZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SXNFeHBhbmRlZChib29sKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0Rm9j
dXNBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VGV4dFJhbmdlQXR0
cmlidXRlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIGhhc0ludFZhbHVlKCkgY29uc3Q7Ci0gICAgCiAgICAgdmly
dHVhbCB2b2lkIHNldEFjY2Vzc2libGVOYW1lKFN0cmluZyYpOwogICAgIAogICAgIC8vIFByb3Zp
ZGVzIGNvbW1vbiBsb2dpYyB1c2VkIGJ5IGFsbCBlbGVtZW50cyB3aGVuIGRldGVybWluaW5nIGlz
SWdub3JlZC4KQEAgLTE2OSwxMCArMTY1LDcgQEAKICAgICAKICAgICB2b2lkIHNldFJlbmRlcmVy
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAg
ICBOb2RlKiBub2RlKCkgY29uc3QgCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXIg
PyBtX3JlbmRlcmVyLT5ub2RlKCkgOiAwOyAKLSAgICB9OworICAgIHZpcnR1YWwgTm9kZSogbm9k
ZSgpIGNvbnN0OwogCiAgICAgUmVuZGVyVmlldyogdG9wUmVuZGVyZXIoKSBjb25zdDsKICAgICBS
ZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2woKSBjb25zdDsKQEAgLTI4Myw3ICsyNzYsNiBA
QAogICAgIGJvb2wgaXNBbGxvd2VkQ2hpbGRPZlRyZWUoKSBjb25zdDsKICAgICBib29sIGhhc1Rl
eHRBbHRlcm5hdGl2ZSgpIGNvbnN0OwogICAgIFN0cmluZyBwb3NpdGlvbmFsRGVzY3JpcHRpb25G
b3JNU0FBKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdDsKIAog
ICAgIEVsZW1lbnQqIG1lbnVFbGVtZW50Rm9yTWVudUJ1dHRvbigpIGNvbnN0OwogICAgIEVsZW1l
bnQqIG1lbnVJdGVtRWxlbWVudEZvck1lbnUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAkocmV2aXNp
b24gNjMyODUpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTcgKzExMCwxMiBAQAogICAgIGlmICgh
bV9vcHRpb25FbGVtZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKG1fb3B0aW9uRWxlbWVudCwgYXJpYV9oaWRkZW5B
dHRyKSwgInRydWUiKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFy
aWFfaGlkZGVuQXR0ciksICJ0cnVlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAg
IHJldHVybiBwYXJlbnRPYmplY3QoKS0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwogfQogICAg
IAotU3RyaW5nIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpsYW5ndWFnZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxhbmd1YWdlKG1fb3B0aW9uRWxlbWVu
dCk7Ci19Ci0KIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmNhblNldFNlbGVjdGVk
QXR0cmlidXRlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fb3B0aW9uRWxlbWVudCkKQEAgLTE0NCw3
ICsxMzksNyBAQAogICAgIGlmICghbV9vcHRpb25FbGVtZW50KQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGFiZWwgPSBnZXRBdHRy
aWJ1dGUobV9vcHRpb25FbGVtZW50LCBhcmlhX2xhYmVsQXR0cik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBhcmlhTGFiZWwgPSBnZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgIGlm
ICghYXJpYUxhYmVsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIApJ
bmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rLmNwcAkocmV2aXNpb24gNjMyODUpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAKICAgICBpZiAoIW1fYXJlYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBXZWJDb3JlTGlua1Jv
bGU7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhUm9sZSA9IG1fYXJlYUVsZW1l
bnQtPmdldEF0dHJpYnV0ZShyb2xlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlh
Um9sZSA9IGdldEF0dHJpYnV0ZShyb2xlQXR0cik7CiAgICAgaWYgKCFhcmlhUm9sZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29y
ZVJvbGUoYXJpYVJvbGUpOwogCkBAIC0xMDAsMTMgKzEwMCwxMCBAQAogICAgIAogU3RyaW5nIEFj
Y2Vzc2liaWxpdHlJbWFnZU1hcExpbms6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2FyZWFFbGVtZW50KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IG1fYXJlYUVsZW1lbnQtPmdldEF0
dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGFi
ZWwgPSBnZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogICAgIGlmICghYXJpYUxhYmVsLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGFsdCA9IG1fYXJlYUVsZW1lbnQtPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFsdCA9IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBpZiAoIWFs
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhbHQ7CiAKQEAgLTExNSwxMyArMTEyLDEwIEBA
CiAgICAgCiBTdHJpbmcgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluazo6dGl0bGUoKSBjb25zdAog
ewotICAgIGlmICghbV9hcmVhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBtX2FyZWFFbGVtZW50LT5nZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZ2V0QXR0
cmlidXRlKHRpdGxlQXR0cik7CiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB0aXRsZTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSBtX2FyZWFFbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoc3VtbWFyeUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
c3VtbWFyeSA9IGdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiAgICAgaWYgKCFzdW1tYXJ5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN1bW1hcnk7CiAKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDYzMjg1KQorKysg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMTcgKzE0OCwxMiBAQAogICAgIHJldHVybiB0cnVlOwogfQogICAgIAotU3Ry
aW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxhbmd1YWdlKE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBsYW5nID0gZ2V0QXR0cmlidXRlKG5vZGUsIGxhbmdBdHRy
KTsKLSAgICBpZiAobGFuZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpsYW5ndWFnZSgpOwotICAgIAotICAgIHJldHVybiBsYW5nOwotfQotICAgIAogU3Ry
aW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxhbmd1YWdlKCkgY29uc3QKIHsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGxhbmcgPSBnZXRBdHRyaWJ1dGUobGFuZ0F0dHIpOworICAgIGlmICghbGFu
Zy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBsYW5nOworCiAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CiAgICAgCiAgICAgLy8gYXMgYSBsYXN0IHJl
c29ydCwgZmFsbCBiYWNrIHRvIHRoZSBjb250ZW50IGxhbmd1YWdlIHNwZWNpZmllZCBpbiB0aGUg
bWV0YSB0YWcKQEAgLTE2Niw3ICsxNjEsNyBAQAogICAgICAgICBEb2N1bWVudCogZG9jID0gZG9j
dW1lbnQoKTsKICAgICAgICAgaWYgKGRvYykKICAgICAgICAgICAgIHJldHVybiBkb2MtPmNvbnRl
bnRMYW5ndWFnZSgpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBu
dWxsQXRvbTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHBhcmVudC0+bGFuZ3VhZ2UoKTsKQEAg
LTQwMyw3ICszOTgsNyBAQAogfQogCiAvLyBGaW5kcyBhIFJlbmRlckxpc3RJdGVtIHBhcmVudCBn
aXZlIGEgbm9kZS4KLVJlbmRlckxpc3RJdGVtKiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZW5kZXJM
aXN0SXRlbUNvbnRhaW5lckZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKK3N0YXRpYyBSZW5kZXJM
aXN0SXRlbSogcmVuZGVyTGlzdEl0ZW1Db250YWluZXJGb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAg
ICAgZm9yIChOb2RlKiBzdHJpbmdOb2RlID0gbm9kZTsgc3RyaW5nTm9kZTsgc3RyaW5nTm9kZSA9
IHN0cmluZ05vZGUtPnBhcmVudCgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0ID0gc3RyaW5nTm9kZS0+cmVuZGVyZXIoKTsKQEAgLTg0NCw4ICs4MzksMTMgQEAKICAgICB9
CiB9CiAgCi1jb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldEF0dHJp
YnV0ZShOb2RlKiBub2RlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCitjb25zdCBB
dG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CiB7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShu
b2RlKCksIGF0dHJpYnV0ZSk7Cit9CisgICAgCitjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZShOb2RlKiBub2RlLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpIGNvbnN0Cit7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbnVs
bEF0b207CiAgICAgCkBAIC05ODAsNiArOTgwLDMyIEBACiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsaXZlUmVnaW9uID0gYXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKICAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UobGl2ZVJlZ2lvbiwgInBvbGl0ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGxp
dmVSZWdpb24sICJhc3NlcnRpdmUiKTsKIH0KKyAgICAKK2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjppbnRWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoaXNIZWFkaW5nKCkpCisgICAgICAgIHJldHVybiBo
ZWFkaW5nTGV2ZWwoKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgcmVhbCBjaGVja2JveCBv
ciByYWRpbyBidXR0b24sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgd2lsbCBoYW5kbGUuCisg
ICAgLy8gSWYgaXQncyBhbiBBUklBIGNoZWNrYm94IG9yIHJhZGlvLCB0aGUgYXJpYS1jaGVja2Vk
IGF0dHJpYnV0ZSBzaG91bGQgYmUgdXNlZC4KKyAgICBpZiAoaXNDaGVja2JveE9yUmFkaW8oKSkK
KyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX2NoZWNr
ZWRBdHRyKSwgInRydWUiKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KIAorYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpoYXNJbnRWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzSGVhZGluZygp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKKyAgICBpZiAoaXNDaGVja2JveE9yUmFkaW8o
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorICAg
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNjMyODUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NiwxMiArNDc2LDYgQEAKIAogICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPmlzUGFzc3dvcmRGaWVsZCgpOwogfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzQ2hlY2tib3hPclJhZGlvKCkgY29uc3QKLXsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlID0gcm9sZVZhbHVlKCk7Ci0gICAgcmV0dXJuIHJvbGUgPT0gUmFkaW9CdXR0b25Sb2xlIHx8
IHJvbGUgPT0gQ2hlY2tCb3hSb2xlOwotfSAgICAKICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNGaWxlVXBsb2FkQnV0dG9uKCkgY29uc3QKIHsKQEAgLTY2MCwzNiArNjU0
LDI5IEBACiBpbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGVhZGluZ0xldmVsKCkgY29u
c3QKIHsKICAgICAvLyBoZWFkaW5ncyBjYW4gYmUgaW4gYmxvY2sgZmxvdyBhbmQgbm9uLWJsb2Nr
IGZsb3cKLSAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgTm9kZSogZWxlbWVudCA9IG5vZGUoKTsK
KyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIE5vZGUqIG5v
ZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IEhlYWRpbmdSb2xlKSAgewotICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwot
ICAgICAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKS50b0lu
dCgpOwotICAgIH0KKyAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBIZWFkaW5nUm9sZSkK
KyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cikudG9JbnQoKTsKIAot
ICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGgxVGFnKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShoMVRhZykpCiAgICAgICAgIHJldHVybiAxOwogICAgIAotICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGgyVGFnKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoMlRhZykpCiAgICAg
ICAgIHJldHVybiAyOwogICAgIAotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGgzVGFnKSkKKyAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykpCiAgICAgICAgIHJldHVybiAzOwogICAg
IAotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGg0VGFnKSkKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShoNFRhZykpCiAgICAgICAgIHJldHVybiA0OwogICAgIAotICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKGg1VGFnKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoNVRhZykpCiAg
ICAgICAgIHJldHVybiA1OwogICAgIAotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGg2VGFnKSkK
KyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoNlRhZykpCiAgICAgICAgIHJldHVybiA2Owog
ICAgIAogICAgIHJldHVybiAwOwpAQCAtNzYwLDExICs3NDcsNiBAQAogICAgIH0KICAgICByZXR1
cm4gMDsKIH0KLSAgICAKLWNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0QXR0cmlidXRlKG1fcmVuZGVy
ZXItPm5vZGUoKSwgYXR0cmlidXRlKTsKLX0KIAogRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YW5jaG9yRWxlbWVudCgpIGNvbnN0CiB7CkBAIC05OTAsMTQgKzk3Miw2IEBACiAg
ICAgCiAgICAgcmV0dXJuIGxldmVsOwogfQotICAgIAotU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6Omxhbmd1YWdlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6bGFuZ3VhZ2UobV9yZW5kZXJlci0+bm9kZSgpKTsKLX0KIAogU3RyaW5nIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAogewpAQCAtMTAzMCwzOCAr
MTAwNCwxNyBAQAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpoYXNJbnRWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSGVhZGluZygp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKK05vZGUqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
Om5vZGUoKSBjb25zdAoreyAKKyAgICByZXR1cm4gbV9yZW5kZXJlciA/IG1fcmVuZGVyZXItPm5v
ZGUoKSA6IDA7IAorfSAgICAKICAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+bm9kZSgpICYmIGlz
Q2hlY2tib3hPclJhZGlvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVy
biBmYWxzZTsKLX0KLQogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludFZhbHVlKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgaXNQYXNzd29yZEZpZWxkKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIGlmIChpc0hlYWRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IGhlYWRpbmdMZXZlbCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpc0NoZWNrYm94T3JSYWRpbygpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoaXNDaGVja2JveE9yUmFkaW8oKSkKKyAgICAgICAgcmV0dXJuIGlzQ2hl
Y2tlZCgpID8gMSA6IDA7CiAKLSAgICAvLyBJZiB0aGlzIGlzIGFuIEFSSUEgY2hlY2tib3ggb3Ig
cmFkaW8sIGNoZWNrIHRoZSBhcmlhLWNoZWNrZWQgYXR0cmlidXRlIHJhdGhlciB0aGFuIG5vZGUo
KS0+Y2hlY2tlZCgpCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9sZUF0
dHJpYnV0ZSgpOwotICAgIGlmIChhcmlhUm9sZSA9PSBSYWRpb0J1dHRvblJvbGUgfHwgYXJpYVJv
bGUgPT0gQ2hlY2tCb3hSb2xlKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRB
dHRyaWJ1dGUoYXJpYV9jaGVja2VkQXR0ciksICJ0cnVlIikpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpLT5jaGVja2VkKCk7CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVlKCk7CiB9CiAKIFN0cmluZyBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oCShyZXZp
c2lvbiA2MzI4NSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBACiAgICAgdmlydHVhbCBi
b29sIGlzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ1ZhbHVlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBFbGVtZW50KiBhY3Rpb25FbGVtZW50KCkgY29uc3Q7Ci0gICAg
CisgICAgdmlydHVhbCBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25FbGVtZW50
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpOwogICAgIHZpcnR1YWwgYm9v
bCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0OwogCkBAIC02OCw3ICs2OCw2IEBACiBw
cml2YXRlOgogICAgIEhUTUxFbGVtZW50KiBtX29wdGlvbkVsZW1lbnQ7CiAgICAgCi0gICAgdmly
dHVhbCBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBIVE1MU2VsZWN0RWxlbWVudCog
bGlzdEJveE9wdGlvblBhcmVudE5vZGUoKSBjb25zdDsKICAgICBpbnQgbGlzdEJveE9wdGlvbklu
ZGV4KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZp
c2lvbiA2MzA0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9i
amVjdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMzU4LDcgKzM1Nyw3IEBACiAgICAgaWYgKGxp
c3RJbmRleCA+PSBsaXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0QXR0cmlidXRlKGxpc3RJdGVtc1ts
aXN0SW5kZXhdLCBhcmlhX2xhYmVsQXR0cik7IAorICAgIHJldHVybiBsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+Z2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKIH0KICAgICAKIFN0cmluZyBSZW5k
ZXJNZW51TGlzdDo6aXRlbVRvb2xUaXAodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdApJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNl
ZC1hcy1yYWRpb2J1dHRvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNlZC1hcy1yYWRpb2J1
dHRvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorUGFwZXIgQ29sb3I6CisKK1Ro
aXMgdGVzdHMgdGhhdCBhbiBpbWFnZSBtYXAgbGluayBjYW4gYmUgbWFkZSBpbnRvIGEgcmFkaW8g
YnV0dG9uIHdpdGggYXJpYSBhbmQgaGF2ZSB0aGUgcmlnaHQgQVhWYWx1ZSB3aGVuIGFyaWEtY2hl
Y2tlZCBpcyB1c2VkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1
ZTogMScKK1BBU1MgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQucm9sZSBp
cyAnQVhSb2xlOiBBWFJhZGlvQnV0dG9uJworUEFTUyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudC5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1ZTogMCcKK1BBU1MgYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQucm9sZSBpcyAnQVhSb2xlOiBBWFJhZGlvQnV0
dG9uJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1s
aW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0
dG9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9pbWFnZS1tYXAtbGluay11c2VkLWFzLXJhZGlvYnV0dG9uLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgaWQ9InBhcGVyY29sb3IiIGNs
YXNzPSJsYWJlbCI+UGFwZXIgQ29sb3I6PC9kaXY+Cis8aW1nIHNyYz0icmVzb3VyY2VzL2Nha2Uu
cG5nIiB1c2VtYXA9IiNiYWNrc2lkZW1hcCIgaWQ9ImJhY2tJbWciIGFsdD0iIiB3aWR0aD0iMjI1
IiBoZWlnaHQ9IjIwNiI+Cis8bWFwIG5hbWU9ImJhY2tzaWRlbWFwIiBhcmlhLWxhYmVsbGVkYnk9
InBhcGVyY29sb3IiIHJvbGU9InJhZGlvZ3JvdXAiPgorICAgICAgICA8YXJlYSByb2xlPSJyYWRp
byIgc2hhcGU9InJlY3QiIHRhYmluZGV4PSIwIiBhbHQ9InllbGxvdyIgaHJlZj0iIyIgYXJpYS1j
aGVja2VkPSJ0cnVlIiAgY29vcmRzPSIxOSwyOCw0Niw1MiIgaWQ9InllbGxvdyI+CisgICAgICAg
IDxhcmVhIHJvbGU9InJhZGlvIiBzaGFwZT0icmVjdCIgdGFiaW5kZXg9IjAiIGFsdD0ib3Jhbmdl
IiBocmVmPSIjIiBhcmlhLWNoZWNrZWQ9ImZhbHNlIiBjb29yZHM9IjU4LDI4LDg1LDUyIiBpZD0i
b3JhbmdlIj4KKzwvbWFwPgorCisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
cyB0aGF0IGFuIGltYWdlIG1hcCBsaW5rIGNhbiBiZSBtYWRlIGludG8gYSByYWRpbyBidXR0b24g
d2l0aCBhcmlhIGFuZCBoYXZlIHRoZSByaWdodCBBWFZhbHVlIHdoZW4gYXJpYS1jaGVja2VkIGlz
IHVzZWQuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWxsb3ciKS5mb2N1cygpOworICAgICAg
ICBzaG91bGRCZSgiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQuc3RyaW5n
VmFsdWUiLCAiJ0FYVmFsdWU6IDEnIik7CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC5yb2xlIiwgIidBWFJvbGU6IEFYUmFkaW9CdXR0b24n
Iik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9yYW5nZSIpLmZvY3VzKCk7
CisgICAgICAgIHNob3VsZEJlKCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dC5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogMCciKTsKKyAgICAgICAgc2hvdWxkQmUoImFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnJvbGUiLCAiJ0FYUm9sZTogQVhSYWRp
b0J1dHRvbiciKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9z
Y3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDYzMjg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTAtMDctMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
WDogYXJpYS1jaGVja2VkIG5vdCByZWNvZ25pemVkIG9uIGltYWdlIG1hcCByYWRpbyBidXR0b25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1NQor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwLWxpbmstdXNl
ZC1hcy1yYWRpb2J1dHRvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcC1saW5rLXVzZWQtYXMtcmFkaW9idXR0b24uaHRt
bDogQWRkZWQuCisKIDIwMTAtMDctMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>