<?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>70861</bug_id>
          
          <creation_ts>2011-10-25 16:31:35 -0700</creation_ts>
          <short_desc>[MutationObservers] Support attributeOldValue for attribute mutations</short_desc>
          <delta_ts>2011-10-28 18:31:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>68729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>ojan</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>490460</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-25 16:31:35 -0700</bug_when>
    <thetext>[MutationObservers] Implement attributeOldValue for attribute mutations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492104</commentid>
    <comment_count>1</comment_count>
      <attachid>112784</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-27 16:57:41 -0700</bug_when>
    <thetext>Created attachment 112784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492113</commentid>
    <comment_count>2</comment_count>
      <attachid>112784</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-27 17:16:35 -0700</bug_when>
    <thetext>Comment on attachment 112784
Patch

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

&gt; Source/WebCore/dom/MutationRecord.cpp:47
&gt; +class MutationRecordBase : public MutationRecord {

I&apos;m a bit confused here why does MutationRecord*Base* inherit from MutationRecord? It seems backwards.

&gt; Source/WebCore/dom/MutationRecord.cpp:131
&gt; +    virtual const AtomicString&amp; type() { return m_record-&gt;type(); }
&gt; +    virtual Node* target() { return m_record-&gt;target(); }
&gt; +    virtual NodeList* addedNodes() { return m_record-&gt;addedNodes(); }
&gt; +    virtual NodeList* removedNodes() { return m_record-&gt;removedNodes(); }
&gt; +    virtual Node* previousSibling() { return m_record-&gt;previousSibling(); }
&gt; +    virtual Node* nextSibling() { return m_record-&gt;nextSibling(); }
&gt; +    virtual const AtomicString&amp; attributeName() { return m_record-&gt;attributeName(); }
&gt; +    virtual const AtomicString&amp; attributeNamespace() { return m_record-&gt;attributeNamespace(); }

Could we use OVERRIDE macro? (Can be done in a follow up patch since all other classes don&apos;t us it) The fact all these functions are virtual isn&apos;t great. It might affect performance.

&gt; LayoutTests/fast/mutation/observe-attributes.html:311
&gt; +        div.setAttribute(&apos;foo&apos;, &apos;bar&apos;);
&gt; +        div.setAttribute(&apos;foo&apos;, &apos;baz&apos;);

Can we add a test case where a reflected IDL attribute is modified?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492169</commentid>
    <comment_count>3</comment_count>
      <attachid>112784</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-27 18:14:46 -0700</bug_when>
    <thetext>Comment on attachment 112784
Patch

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

&gt;&gt; Source/WebCore/dom/MutationRecord.cpp:47
&gt;&gt; +class MutationRecordBase : public MutationRecord {
&gt; 
&gt; I&apos;m a bit confused here why does MutationRecord*Base* inherit from MutationRecord? It seems backwards.

This class implements target() (storing m_target).  I introduced it because MutationRecordWithNullOldValue doesn&apos;t store its own MutationTarget.

Given your confusion, though, it&apos;s not worthwhile.  Turns out it&apos;s fewer lines just to give each of the three subclasses that need it an m_target member.

&gt;&gt; Source/WebCore/dom/MutationRecord.cpp:131
&gt;&gt; +    virtual const AtomicString&amp; attributeNamespace() { return m_record-&gt;attributeNamespace(); }
&gt; 
&gt; Could we use OVERRIDE macro? (Can be done in a follow up patch since all other classes don&apos;t us it) The fact all these functions are virtual isn&apos;t great. It might affect performance.

I didn&apos;t see OVERRIDE used anywhere in WebCore when I wrote this up originally. But I see some now, so I&apos;m happy to add it (love OVERRIDE).

As for the use of virtual methods, I&apos;d originally used a different approach, and Darin suggested (in https://bugs.webkit.org/show_bug.cgi?id=68824) that I go with virtual methods instead.

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:311
&gt;&gt; +        div.setAttribute(&apos;foo&apos;, &apos;baz&apos;);
&gt; 
&gt; Can we add a test case where a reflected IDL attribute is modified?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492170</commentid>
    <comment_count>4</comment_count>
      <attachid>112799</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-27 18:15:04 -0700</bug_when>
    <thetext>Created attachment 112799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492793</commentid>
    <comment_count>5</comment_count>
      <attachid>112799</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-28 16:56:29 -0700</bug_when>
    <thetext>Comment on attachment 112799
Patch

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

&gt; Source/WebCore/dom/Element.cpp:642
&gt; +    RefPtr&lt;MutationRecord&gt; mutation = MutationRecord::createAttributes(element, name, isOldValueRequested(observers) ? oldValue : nullAtom);
&gt; +    RefPtr&lt;MutationRecord&gt; mutationWithNullOldValue = MutationRecord::createWithNullOldValue(mutation);

It&apos;ll be nice if we could lazily allocate these objects since they live in heap but that might be a pre-mature optimization given createWithNullOldValue only stores a pointer.

&gt; LayoutTests/fast/mutation/observe-attributes.html:346
&gt; +        observer = new WebKitMutationObserver(function(mutations) {
&gt; +            window.mutations = mutations;
&gt; +        });
&gt; +        observer2 = new WebKitMutationObserver(function(mutations) {
&gt; +            window.mutations2 = mutations;
&gt; +        });

Can we give more descriptive names to observer and observer2?

&gt; LayoutTests/fast/mutation/observe-attributes.html:358
&gt; +        shouldBe(&apos;mutations[0].oldValue&apos;, &apos;&quot;bar&quot;&apos;);
&gt; +        shouldBe(&apos;mutations2.length&apos;, &apos;1&apos;);

Ditto on mutations vs. mutations2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492796</commentid>
    <comment_count>6</comment_count>
      <attachid>112941</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-28 16:57:35 -0700</bug_when>
    <thetext>Created attachment 112941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492798</commentid>
    <comment_count>7</comment_count>
      <attachid>112799</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-28 16:59:19 -0700</bug_when>
    <thetext>Comment on attachment 112799
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:642
&gt;&gt; +    RefPtr&lt;MutationRecord&gt; mutationWithNullOldValue = MutationRecord::createWithNullOldValue(mutation);
&gt; 
&gt; It&apos;ll be nice if we could lazily allocate these objects since they live in heap but that might be a pre-mature optimization given createWithNullOldValue only stores a pointer.

Made mutationWithNullOldValue lazy.

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:346
&gt;&gt; +        });
&gt; 
&gt; Can we give more descriptive names to observer and observer2?

Done.

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:358
&gt;&gt; +        shouldBe(&apos;mutations2.length&apos;, &apos;1&apos;);
&gt; 
&gt; Ditto on mutations vs. mutations2.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492816</commentid>
    <comment_count>8</comment_count>
      <attachid>112947</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-28 17:24:04 -0700</bug_when>
    <thetext>Created attachment 112947
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492857</commentid>
    <comment_count>9</comment_count>
      <attachid>112947</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-28 18:31:21 -0700</bug_when>
    <thetext>Comment on attachment 112947
Patch for landing

Clearing flags on attachment: 112947

Committed r98791: &lt;http://trac.webkit.org/changeset/98791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492858</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-28 18:31:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112784</attachid>
            <date>2011-10-27 16:57:41 -0700</date>
            <delta_ts>2011-10-27 18:15:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70861-20111027165740.patch</filename>
            <type>text/plain</type>
            <size>17650</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzkxZTU4MDZmNWM3ZTRj
YWFlMDI5OTY2MTc1YWZlOTljNTg0YjdkLi42Y2UyMzljOTdlN2ZhNWI0ZGFjYmVhYWI1ZDY0MjBm
MzE2Zjg1ZDY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjYgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc3BlY3QgJ2F0dHJp
YnV0ZU9sZFZhbHVlJyB3aGVuIHBhc3NlZCB0byBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2Vy
dmUoKS4KKworICAgICAgICBJZiBtdWx0aXBsZSBvYnNlcnZlcnMgaGF2ZSBkaWZmZXJlbnQgYXR0
cmlidXRlT2xkVmFsdWUgc2V0dGluZ3MgaW4KKyAgICAgICAgdGhlaXIgcmVnaXN0cmF0aW9ucywg
dHdvIGRpZmZlcmVudCBNdXRhdGlvblJlY29yZHMgYXJlIGNyZWF0ZWQgKG9uZSBpcworICAgICAg
ICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBvdGhlcikuCisKKyAgICAgICAgSWYgYSBzaW5nbGUgb2Jz
ZXJ2ZXIgaGFzIG11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgdGhhdCBhcHBseSB0byBhIHNpbmdsZQor
ICAgICAgICBtdXRhdGlvbiwgYW5kIHRob3NlIHJlZ2lzdHJhdGlvbnMgaGF2ZSBkaWZmZXJlbnQg
dmFsdWVzIGZvcgorICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZSwgdGhlIG9ic2VydmVyIGlzIHBh
c3NlZCB0aGUgb2xkVmFsdWUuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjplbnF1ZXVlQXR0cmli
dXRlc011dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJp
YnV0ZSk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKToKKyAgICAgICAgKiBkb20v
TXV0YXRpb25SZWNvcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uUmVjb3JkOjpvbGRW
YWx1ZSk6CisKIDIwMTEtMTAtMjcgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBzdWJ0cmVlIG9i
c2VydmF0aW9uIG9mIHRyYW5zaWVudGx5IGRpc2Nvbm5lY3RlZCBub2RlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IGVjNDgwNTgyNTdjNDRkN2NmYWI3MDUwZDEyZjI0MTE2NmM3ZGM2ZGIuLmI4
YWUwNmFjZDg3ZDg1ZTI1NzMzYzdiMjkwYjJkNzExZDljMWIzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTYxNywxNiArNjE3LDMxIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6
Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0CiB9CiAK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJp
YnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQorc3RhdGljIGlubGluZSBib29sIGhhc09sZFZhbHVlKE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpBdHRyaWJ1dGVPbGRWYWx1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2xk
VmFsdWVSZXF1ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNlcnZlcnMpCit7CisgICAgZm9yIChIYXNoTWFwPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkK
IHsKICAgICBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucz4gb2JzZXJ2ZXJzOwogICAgIGVsZW1lbnQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9i
c2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0
ZXMpOwogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7CisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBt
dXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUs
IGlzT2xkVmFsdWVSZXF1ZXN0ZWQob2JzZXJ2ZXJzKSA/IG9sZFZhbHVlIDogbnVsbEF0b20pOwor
ICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gTXV0
YXRpb25SZWNvcmQ6OmNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24pOwogICAgIGZvciAo
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+
OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQo
bXV0YXRpb24pOworICAgICAgICBpdGVyLT5maXJzdC0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKGhh
c09sZFZhbHVlKGl0ZXItPnNlY29uZCkgPyBtdXRhdGlvbiA6IG11dGF0aW9uV2l0aE51bGxPbGRW
YWx1ZSk7CiB9CiAjZW5kaWYKIApAQCAtNjUyLDcgKzY2Nyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgLy8gVGhlIGNhbGwg
dG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVk
LCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgotICAg
IGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7Cisg
ICAgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBhdHRyaWJ1dGVOYW1lLCBv
bGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSk7CiAjZW5kaWYKIAogICAgIGlmIChpc0lkQXR0
cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQpAQCAtNjkwLDcg
KzcwNSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQogICAgIC8vIFRoZSBjYWxsIHRvIGF0dHJpYnV0ZUNoYW5nZWQgYmVsb3cgbWF5
IGRpc3BhdGNoIERPTVN1YnRyZWVNb2RpZmllZCwgc28gaXQncyBpbXBvcnRhbnQgdG8gZW5xdWV1
ZSBhIE11dGF0aW9uUmVjb3JkIG5vdy4KLSAgICBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVj
b3JkKHRoaXMsIG5hbWUpOworICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhp
cywgbmFtZSwgb2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20pOwogI2VuZGlmCiAKICAgICBp
ZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAppbmRleCBjMzZlY2E2ZGRlNzFkZWVlOWNkMmNmZDI0Yzg4NGY1OGJhN2JiZmI5Li5iOWNk
OTg0ODE3NjcwZjg3NGY4NDJmMmJhNDQ4NDM0OWE1NTZkM2UwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5jcHAKQEAgLTQ0LDEwICs0NCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIENoaWxkTGlzdFJlY29yZCA6IHB1YmxpYyBNdXRhdGlv
blJlY29yZCB7CitjbGFzcyBNdXRhdGlvblJlY29yZEJhc2UgOiBwdWJsaWMgTXV0YXRpb25SZWNv
cmQgeworcHVibGljOgorICAgIE11dGF0aW9uUmVjb3JkQmFzZShQYXNzUmVmUHRyPE5vZGU+IHRh
cmdldCkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgTm9kZSogdGFyZ2V0KCkgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Cit9OworCitjbGFzcyBDaGlsZExpc3RSZWNv
cmQgOiBwdWJsaWMgTXV0YXRpb25SZWNvcmRCYXNlIHsKIHB1YmxpYzoKICAgICBDaGlsZExpc3RS
ZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGFkZGVk
LCBQYXNzUmVmUHRyPE5vZGVMaXN0PiByZW1vdmVkLCBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3Vz
U2libGluZywgUGFzc1JlZlB0cjxOb2RlPiBuZXh0U2libGluZykKLSAgICAgICAgOiBNdXRhdGlv
blJlY29yZCh0YXJnZXQpCisgICAgICAgIDogTXV0YXRpb25SZWNvcmRCYXNlKHRhcmdldCkKICAg
ICAgICAgLCBtX2FkZGVkTm9kZXMoYWRkZWQpCiAgICAgICAgICwgbV9yZW1vdmVkTm9kZXMocmVt
b3ZlZCkKICAgICAgICAgLCBtX3ByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpCkBAIC02
OCwxMiArODEsMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsK
IH07CiAKLWNsYXNzIEF0dHJpYnV0ZXNSZWNvcmQgOiBwdWJsaWMgTXV0YXRpb25SZWNvcmQgewor
Y2xhc3MgQXR0cmlidXRlc1JlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZEJhc2UgewogcHVi
bGljOgotICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpCi0gICAgICAgIDogTXV0YXRpb25SZWNvcmQodGFyZ2V0KQor
ICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCisgICAgICAgIDog
TXV0YXRpb25SZWNvcmRCYXNlKHRhcmdldCkKICAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWUobmFt
ZS5sb2NhbE5hbWUoKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWVzcGFjZShuYW1lLm5hbWVz
cGFjZVVSSSgpKQorICAgICAgICAsIG1fb2xkVmFsdWUob2xkVmFsdWUpCiAgICAgewogICAgIH0K
IApAQCAtODIsMjYgKzk2LDQzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZU5hbWUoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4g
bV9hdHRyaWJ1dGVOYW1lc3BhY2U7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsg
cmV0dXJuIG1fb2xkVmFsdWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgeyBtX29sZFZhbHVlID0gdmFsdWU7IH0KIAogICAgIEF0b21pY1N0cmlu
ZyBtX2F0dHJpYnV0ZU5hbWU7CiAgICAgQXRvbWljU3RyaW5nIG1fYXR0cmlidXRlTmFtZXNwYWNl
OwotICAgIFN0cmluZyBtX29sZFZhbHVlOworICAgIEF0b21pY1N0cmluZyBtX29sZFZhbHVlOwog
fTsKIAotY2xhc3MgQ2hhcmFjdGVyRGF0YVJlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7
CitjbGFzcyBDaGFyYWN0ZXJEYXRhUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkQmFzZSB7
CiBwdWJsaWM6CiAgICAgQ2hhcmFjdGVyRGF0YVJlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdl
dCkKLSAgICAgICAgOiBNdXRhdGlvblJlY29yZCh0YXJnZXQpCisgICAgICAgIDogTXV0YXRpb25S
ZWNvcmRCYXNlKHRhcmdldCkKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUo
KSB7IHJldHVybiBtX29sZFZhbHVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE9sZFZhbHVlKGNv
bnN0IFN0cmluZyYgdmFsdWUpIHsgbV9vbGRWYWx1ZSA9IHZhbHVlOyB9Cit9OwogCi0gICAgU3Ry
aW5nIG1fb2xkVmFsdWU7CitjbGFzcyBNdXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFsdWUgOiBw
dWJsaWMgTXV0YXRpb25SZWNvcmQgeworcHVibGljOgorICAgIE11dGF0aW9uUmVjb3JkV2l0aE51
bGxPbGRWYWx1ZShQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiByZWNvcmQpCisgICAgICAgIDog
bV9yZWNvcmQocmVjb3JkKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSB7IHJldHVybiBtX3JlY29yZC0+dHlwZSgpOyB9Cisg
ICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSB7IHJldHVybiBtX3JlY29yZC0+dGFyZ2V0KCk7IH0K
KyAgICB2aXJ0dWFsIE5vZGVMaXN0KiBhZGRlZE5vZGVzKCkgeyByZXR1cm4gbV9yZWNvcmQtPmFk
ZGVkTm9kZXMoKTsgfQorICAgIHZpcnR1YWwgTm9kZUxpc3QqIHJlbW92ZWROb2RlcygpIHsgcmV0
dXJuIG1fcmVjb3JkLT5yZW1vdmVkTm9kZXMoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogcHJldmlv
dXNTaWJsaW5nKCkgeyByZXR1cm4gbV9yZWNvcmQtPnByZXZpb3VzU2libGluZygpOyB9CisgICAg
dmlydHVhbCBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0dXJuIG1fcmVjb3JkLT5uZXh0U2libGlu
ZygpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUoKSB7
IHJldHVybiBtX3JlY29yZC0+YXR0cmlidXRlTmFtZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSgpIHsgcmV0dXJuIG1fcmVjb3JkLT5hdHRy
aWJ1dGVOYW1lc3BhY2UoKTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJl
dHVybiBTdHJpbmcoKTsgfQorCisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtX3JlY29yZDsK
IH07CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgQ2hpbGRMaXN0UmVjb3JkOjp0eXBlKCkKQEAgLTEy
OSw5ICsxNjAsOSBAQCBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJlY29yZDo6
Y3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZwogICAgIHJldHVybiBhZG9wdFJl
ZihzdGF0aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBDaGlsZExpc3RSZWNvcmQodGFyZ2V0
LCBhZGRlZCwgcmVtb3ZlZCwgcHJldmlvdXNTaWJsaW5nLCBuZXh0U2libGluZykpKTsKIH0KIAot
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0
ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCitQ
YXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRl
cyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGlj
X2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQXR0cmlidXRlc1JlY29yZCh0YXJnZXQsIG5hbWUp
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3
IEF0dHJpYnV0ZXNSZWNvcmQodGFyZ2V0LCBuYW1lLCBvbGRWYWx1ZSkpKTsKIH0KIAogUGFzc1Jl
ZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEo
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCkBAIC0xMzksOSArMTcwLDExIEBAIFBhc3NSZWZQdHI8
TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NS
ZWZQdHI8Tm9kZT4KICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNv
cmQqPihuZXcgQ2hhcmFjdGVyRGF0YVJlY29yZCh0YXJnZXQpKSk7CiB9CiAKLU11dGF0aW9uUmVj
b3JkOjpNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCkKLSAgICA6IG1fdGFy
Z2V0KHRhcmdldCkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpj
cmVhdGVXaXRoTnVsbE9sZFZhbHVlKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IHJlY29yZCkK
IHsKKyAgICBpZiAocmVjb3JkLT5vbGRWYWx1ZSgpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
cmVjb3JkOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+
KG5ldyBNdXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFsdWUocmVjb3JkKSkpOwogfQogCiBNdXRh
dGlvblJlY29yZDo6fk11dGF0aW9uUmVjb3JkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvblJlY29yZC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmgKaW5kZXggMjVhZjRkM2VhM2ExNzk5ZGZhMGUzNDE4NmUxODg4MTU4MjIzNjE0NS4uM2JmMDFh
MTliOTQ0YTNjMWRmMGIwN2Y5MjQ3MGVkODM4MDY4Yjg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uUmVjb3JkLmgKQEAgLTQ3LDEzICs0NywxNSBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xh
c3MgTXV0YXRpb25SZWNvcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxNdXRhdGlvblJlY29yZD4gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGls
ZExpc3QoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGFkZGVk
LCBQYXNzUmVmUHRyPE5vZGVMaXN0PiByZW1vdmVkLCBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3Vz
U2libGluZywgUGFzc1JlZlB0cjxOb2RlPiBuZXh0U2libGluZyk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0
YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRh
dGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVj
b3JkPiBjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+KTsK
KwogICAgIHZpcnR1YWwgfk11dGF0aW9uUmVjb3JkKCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSgpID0gMDsKLSAgICBOb2RlKiB0YXJnZXQoKSB7IHJldHVybiBtX3Rh
cmdldC5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogdGFyZ2V0KCkgPSAwOwogCiAgICAgdmly
dHVhbCBOb2RlTGlzdCogYWRkZWROb2RlcygpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIE5v
ZGVMaXN0KiByZW1vdmVkTm9kZXMoKSB7IHJldHVybiAwOyB9CkBAIC02NCwxNiArNjYsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFj
ZSgpIHsgcmV0dXJuIG51bGxBdG9tOyB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgp
IHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE9sZFZhbHVlKGNvbnN0
IFN0cmluZyYpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTXV0YXRpb25SZWNvcmQo
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBt
X3RhcmdldDsKIH07CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzNDBhYWY5NzgyODg0OTI3NTcxYTlhZmFm
MmYzMjgwZGJkMDg5OTUxLi5iNDljZDI4Y2M4MjQ0Y2JiMTcyNmU4MDZjNWU4MGU1YzFhMTUzM2Nk
IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMjYgIEFkYW0gS2xlaW4gIDxhZGFta0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGF0dHJp
YnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3QgY2FzZXMgZm9yIGF0dHJpYnV0
ZU9sZFZhbHVlIHRvIGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWw6CisKIDIwMTEtMTAtMjcgIFJhZmFlbCBXZWluc3RlaW4g
IDxyYWZhZWx3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIElt
cGxlbWVudCBzdWJ0cmVlIG9ic2VydmF0aW9uIG9mIHRyYW5zaWVudGx5IGRpc2Nvbm5lY3RlZCBu
b2RlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJp
YnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0
dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CmluZGV4IDJmODU5OGRmZjdhMDIwZWUzYzcyN2U5ZTM3Zjk4
NmE2YTI4MTg2OTUuLjBhZjEwM2JhNTVlYjdjZDE3MzM2OWY5ZDg1NjMxNTM5MmZjYWY3MmYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmli
dXRlcy1leHBlY3RlZC50eHQKQEAgLTU4LDYgKzU4LDMxIEBAIFBBU1MgbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWUgaXMgImZvbyIKIFBBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0
ZXMiCiBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJiYXoiCiAKK1Rlc3Rpbmcg
YmFzaWMgb2xkVmFsdWUgZGVsaXZlcnkuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzIG51bGwK
K1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sx
XS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sxXS5vbGRWYWx1ZSBpcyAi
YmFyIgorCitUZXN0aW5nIHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVkIGFzIHJlcXVlc3RlZCAo
b3Igbm90KS4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50
eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAi
Zm9vIgorUEFTUyBtdXRhdGlvbnNbMF0ub2xkVmFsdWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25z
Mi5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnMy
WzBdLm9sZFZhbHVlIGlzIG51bGwKKworQW4gb2JzZXJ2ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZh
dGlvbnMgd2lsbCBnZXQgYXR0cmlidXRlT2xkVmFsdWUgaWYgYW55IGVudHJpZXMgcmVxdWVzdCBp
dC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlz
ICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgor
UEFTUyBtdXRhdGlvbnNbMF0ub2xkVmFsdWUgaXMgImJhciIKKwogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCBiNWJjNDQxNzVjYWZjZWI1MDAz
YmRiZmYyYWVjZDhjNzJkMTczMmNhLi41NzJhYzM1ZTdhMDAxZTA0YTY4OGI3MzBlNDYyZDk0MjIw
YWVkMTUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0
cmlidXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRy
aWJ1dGVzLmh0bWwKQEAgLTI5NCw5ICsyOTQsMTI3IEBAIGZ1bmN0aW9uIHRlc3RPcmRlcmluZ1dy
dERPTVN1YnRyZWVNb2RpZmllZCgpIHsKIAogICAgIHN0YXJ0KCk7CiB9Ci12YXIgdGVzdHMgPSBb
dGVzdEJhc2ljLCB0ZXN0V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RN
dWx0aXBsZU9ic2VydmVycywgdGVzdE5hbWVzcGFjZVVSSSwgdGVzdFByb3BlcnR5QWNjZXNzLCB0
ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWRdOworCitmdW5jdGlvbiB0ZXN0T2xkVmFs
dWUoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgb2xkVmFsdWUgZGVsaXZlcnku
Jyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0
aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlIH0pOworICAg
ICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIGRpdi5zZXRBdHRy
aWJ1dGUoJ2ZvbycsICdiYXonKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRl
TmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVl
JywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUn
LCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5vbGRWYWx1ZScsICci
YmFyIicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcn
KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitm
dW5jdGlvbiB0ZXN0T2xkVmFsdWVBc1JlcXVlc3RlZCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZh
ciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVkIGFzIHJl
cXVlc3RlZCAob3Igbm90KS4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5zZXRBdHRy
aWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRh
dGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlcjIgPSBuZXcg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAg
IHdpbmRvdy5tdXRhdGlvbnMyID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAgICAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlT2xkVmFsdWU6
IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyMi5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0
cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAg
IHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5vbGRWYWx1ZScsICciYmFyIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
MlswXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
MlswXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMyWzBdLm9sZFZhbHVlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgp
OworICAgICAgICBvYnNlcnZlcjIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7Cisg
ICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rp
b24gdGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0aW9ucygpIHsKKyAgICB2YXIgZGl2
OworICAgIHZhciBzcGFuOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnQW4gb2JzZXJ2ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZhdGlv
bnMgd2lsbCBnZXQgYXR0cmlidXRlT2xkVmFsdWUgaWYgYW55IGVudHJpZXMgcmVxdWVzdCBpdC4n
KTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHNwYW4gPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTsKKyAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2Zv
bycsICdiYXInKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRhdGlvbnMgPSBt
dXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBh
dHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9
KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzcGFuLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7
CisgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5vbGRWYWx1ZScsICciYmFyIicpOworICAgICAgICBvYnNlcnZlci5kaXNj
b25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAg
ICB9CisKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbCisgICAgdGVzdEJhc2ljLAor
ICAgIHRlc3RXcm9uZ1R5cGUsCisgICAgdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uLAorICAgIHRl
c3RNdWx0aXBsZU9ic2VydmVycywKKyAgICB0ZXN0TmFtZXNwYWNlVVJJLAorICAgIHRlc3RQcm9w
ZXJ0eUFjY2VzcywKKyAgICB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQsCisgICAg
dGVzdE9sZFZhbHVlLAorICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVkLAorICAgIHRlc3RPbGRW
YWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMKK107CiB2YXIgdGVzdEluZGV4ID0gMDsKLSAK
KwogZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CiAgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxl
bmd0aCkKICAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112799</attachid>
            <date>2011-10-27 18:15:04 -0700</date>
            <delta_ts>2011-10-28 16:59:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70861-20111027181503.patch</filename>
            <type>text/plain</type>
            <size>20090</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzkxZTU4MDZmNWM3ZTRj
YWFlMDI5OTY2MTc1YWZlOTljNTg0YjdkLi42Y2UyMzljOTdlN2ZhNWI0ZGFjYmVhYWI1ZDY0MjBm
MzE2Zjg1ZDY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjYgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc3BlY3QgJ2F0dHJp
YnV0ZU9sZFZhbHVlJyB3aGVuIHBhc3NlZCB0byBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2Vy
dmUoKS4KKworICAgICAgICBJZiBtdWx0aXBsZSBvYnNlcnZlcnMgaGF2ZSBkaWZmZXJlbnQgYXR0
cmlidXRlT2xkVmFsdWUgc2V0dGluZ3MgaW4KKyAgICAgICAgdGhlaXIgcmVnaXN0cmF0aW9ucywg
dHdvIGRpZmZlcmVudCBNdXRhdGlvblJlY29yZHMgYXJlIGNyZWF0ZWQgKG9uZSBpcworICAgICAg
ICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBvdGhlcikuCisKKyAgICAgICAgSWYgYSBzaW5nbGUgb2Jz
ZXJ2ZXIgaGFzIG11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgdGhhdCBhcHBseSB0byBhIHNpbmdsZQor
ICAgICAgICBtdXRhdGlvbiwgYW5kIHRob3NlIHJlZ2lzdHJhdGlvbnMgaGF2ZSBkaWZmZXJlbnQg
dmFsdWVzIGZvcgorICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZSwgdGhlIG9ic2VydmVyIGlzIHBh
c3NlZCB0aGUgb2xkVmFsdWUuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjplbnF1ZXVlQXR0cmli
dXRlc011dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJp
YnV0ZSk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKToKKyAgICAgICAgKiBkb20v
TXV0YXRpb25SZWNvcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uUmVjb3JkOjpvbGRW
YWx1ZSk6CisKIDIwMTEtMTAtMjcgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBzdWJ0cmVlIG9i
c2VydmF0aW9uIG9mIHRyYW5zaWVudGx5IGRpc2Nvbm5lY3RlZCBub2RlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IGVjNDgwNTgyNTdjNDRkN2NmYWI3MDUwZDEyZjI0MTE2NmM3ZGM2ZGIuLmI4
YWUwNmFjZDg3ZDg1ZTI1NzMzYzdiMjkwYjJkNzExZDljMWIzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTYxNywxNiArNjE3LDMxIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6
Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0CiB9CiAK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJp
YnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQorc3RhdGljIGlubGluZSBib29sIGhhc09sZFZhbHVlKE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpBdHRyaWJ1dGVPbGRWYWx1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2xk
VmFsdWVSZXF1ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNlcnZlcnMpCit7CisgICAgZm9yIChIYXNoTWFwPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkK
IHsKICAgICBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucz4gb2JzZXJ2ZXJzOwogICAgIGVsZW1lbnQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9i
c2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0
ZXMpOwogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7CisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBt
dXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUs
IGlzT2xkVmFsdWVSZXF1ZXN0ZWQob2JzZXJ2ZXJzKSA/IG9sZFZhbHVlIDogbnVsbEF0b20pOwor
ICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gTXV0
YXRpb25SZWNvcmQ6OmNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24pOwogICAgIGZvciAo
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+
OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQo
bXV0YXRpb24pOworICAgICAgICBpdGVyLT5maXJzdC0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKGhh
c09sZFZhbHVlKGl0ZXItPnNlY29uZCkgPyBtdXRhdGlvbiA6IG11dGF0aW9uV2l0aE51bGxPbGRW
YWx1ZSk7CiB9CiAjZW5kaWYKIApAQCAtNjUyLDcgKzY2Nyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgLy8gVGhlIGNhbGwg
dG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVk
LCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgotICAg
IGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7Cisg
ICAgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBhdHRyaWJ1dGVOYW1lLCBv
bGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSk7CiAjZW5kaWYKIAogICAgIGlmIChpc0lkQXR0
cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQpAQCAtNjkwLDcg
KzcwNSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQogICAgIC8vIFRoZSBjYWxsIHRvIGF0dHJpYnV0ZUNoYW5nZWQgYmVsb3cgbWF5
IGRpc3BhdGNoIERPTVN1YnRyZWVNb2RpZmllZCwgc28gaXQncyBpbXBvcnRhbnQgdG8gZW5xdWV1
ZSBhIE11dGF0aW9uUmVjb3JkIG5vdy4KLSAgICBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVj
b3JkKHRoaXMsIG5hbWUpOworICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhp
cywgbmFtZSwgb2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20pOwogI2VuZGlmCiAKICAgICBp
ZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAppbmRleCBjMzZlY2E2ZGRlNzFkZWVlOWNkMmNmZDI0Yzg4NGY1OGJhN2JiZmI5Li4wY2Fj
ODY1NTQzM2I0N2RlZTIxYTAyMjYwMGFjYzM5NWUzYmE5YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENo
aWxkTGlzdFJlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6CiAgICAgQ2hp
bGRMaXN0UmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2RlPiBw
cmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcpCi0gICAgICAgIDog
TXV0YXRpb25SZWNvcmQodGFyZ2V0KQorICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKICAgICAg
ICAgLCBtX2FkZGVkTm9kZXMoYWRkZWQpCiAgICAgICAgICwgbV9yZW1vdmVkTm9kZXMocmVtb3Zl
ZCkKICAgICAgICAgLCBtX3ByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpCkBAIC01Niwx
MiArNTYsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpOwotICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMo
KSB7IHJldHVybiBtX2FkZGVkTm9kZXMuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIE5vZGVMaXN0KiBy
ZW1vdmVkTm9kZXMoKSB7IHJldHVybiBtX3JlbW92ZWROb2Rlcy5nZXQoKTsgfQotICAgIHZpcnR1
YWwgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0
KCk7IH0KLSAgICB2aXJ0dWFsIE5vZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbV9uZXh0U2li
bGluZy5nZXQoKTsgfQotCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGUqIHRhcmdldCgpIE9WRVJSSURFIHsgcmV0dXJuIG1f
dGFyZ2V0LmdldCgpOyB9CisgICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2RlcygpIE9WRVJS
SURFIHsgcmV0dXJuIG1fYWRkZWROb2Rlcy5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZUxpc3Qq
IHJlbW92ZWROb2RlcygpIE9WRVJSSURFIHsgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmdldCgpOyB9
CisgICAgdmlydHVhbCBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBPVkVSUklERSB7IHJldHVybiBt
X3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogbmV4dFNpYmxpbmco
KSBPVkVSUklERSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CisKKyAgICBSZWZQdHI8
Tm9kZT4gbV90YXJnZXQ7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBtX2FkZGVkTm9kZXM7CiAgICAg
UmVmUHRyPE5vZGVMaXN0PiBtX3JlbW92ZWROb2RlczsKICAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2
aW91c1NpYmxpbmc7CkBAIC03MCwzOCArNzIsNjEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQXR0cmli
dXRlc1JlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6Ci0gICAgQXR0cmli
dXRlc1JlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKLSAgICAgICAgOiBNdXRhdGlvblJlY29yZCh0YXJnZXQpCisgICAgQXR0cmlidXRlc1Jl
Y29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQp
CiAgICAgICAgICwgbV9hdHRyaWJ1dGVOYW1lKG5hbWUubG9jYWxOYW1lKCkpCiAgICAgICAgICwg
bV9hdHRyaWJ1dGVOYW1lc3BhY2UobmFtZS5uYW1lc3BhY2VVUkkoKSkKKyAgICAgICAgLCBtX29s
ZFZhbHVlKG9sZFZhbHVlKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0
dHJpYnV0ZU5hbWVzcGFjZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1
cm4gbV9vbGRWYWx1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IG1fb2xkVmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSBP
VkVSUklERSB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9hdHRyaWJ1dGVO
YW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFj
ZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZXNwYWNlOyB9CisgICAgdmlydHVh
bCBTdHJpbmcgb2xkVmFsdWUoKSBPVkVSUklERSB7IHJldHVybiBtX29sZFZhbHVlOyB9CiAKKyAg
ICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiAgICAgQXRvbWljU3RyaW5nIG1fYXR0cmlidXRlTmFt
ZTsKICAgICBBdG9taWNTdHJpbmcgbV9hdHRyaWJ1dGVOYW1lc3BhY2U7Ci0gICAgU3RyaW5nIG1f
b2xkVmFsdWU7CisgICAgQXRvbWljU3RyaW5nIG1fb2xkVmFsdWU7CiB9OwogCiBjbGFzcyBDaGFy
YWN0ZXJEYXRhUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1YmxpYzoKICAgICBD
aGFyYWN0ZXJEYXRhUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQotICAgICAgICA6IE11
dGF0aW9uUmVjb3JkKHRhcmdldCkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCiAgICAgewog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgp
OwotICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fb2xk
VmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSBPVkVSUklERSB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQorCisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKworY2xh
c3MgTXV0YXRpb25SZWNvcmRXaXRoTnVsbE9sZFZhbHVlIDogcHVibGljIE11dGF0aW9uUmVjb3Jk
IHsKK3B1YmxpYzoKKyAgICBNdXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFsdWUoUGFzc1JlZlB0
cjxNdXRhdGlvblJlY29yZD4gcmVjb3JkKQorICAgICAgICA6IG1fcmVjb3JkKHJlY29yZCkKKyAg
ICB7CisgICAgfQogCi0gICAgU3RyaW5nIG1fb2xkVmFsdWU7Citwcml2YXRlOgorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQt
PnR5cGUoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogdGFyZ2V0KCkgT1ZFUlJJREUgeyByZXR1cm4g
bV9yZWNvcmQtPnRhcmdldCgpOyB9CisgICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2Rlcygp
IE9WRVJSSURFIHsgcmV0dXJuIG1fcmVjb3JkLT5hZGRlZE5vZGVzKCk7IH0KKyAgICB2aXJ0dWFs
IE5vZGVMaXN0KiByZW1vdmVkTm9kZXMoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+cmVt
b3ZlZE5vZGVzKCk7IH0KKyAgICB2aXJ0dWFsIE5vZGUqIHByZXZpb3VzU2libGluZygpIE9WRVJS
SURFIHsgcmV0dXJuIG1fcmVjb3JkLT5wcmV2aW91c1NpYmxpbmcoKTsgfQorICAgIHZpcnR1YWwg
Tm9kZSogbmV4dFNpYmxpbmcoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+bmV4dFNpYmxp
bmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKCkg
T1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQtPmF0dHJpYnV0ZU5hbWUoKTsgfQorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSBPVkVSUklERSB7IHJl
dHVybiBtX3JlY29yZC0+YXR0cmlidXRlTmFtZXNwYWNlKCk7IH0KKworICAgIHZpcnR1YWwgU3Ry
aW5nIG9sZFZhbHVlKCkgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbV9yZWNvcmQ7CiB9OwogCiBjb25zdCBBdG9taWNTdHJpbmcmIENo
aWxkTGlzdFJlY29yZDo6dHlwZSgpCkBAIC0xMjksOSArMTU0LDkgQEAgUGFzc1JlZlB0cjxNdXRh
dGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHRhcmcKICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQq
PihuZXcgQ2hpbGRMaXN0UmVjb3JkKHRhcmdldCwgYWRkZWQsIHJlbW92ZWQsIHByZXZpb3VzU2li
bGluZywgbmV4dFNpYmxpbmcpKSk7CiB9CiAKLVBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQorUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0
YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IEF0
dHJpYnV0ZXNSZWNvcmQodGFyZ2V0LCBuYW1lKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFt
ZSwgb2xkVmFsdWUpKSk7CiB9CiAKIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9u
UmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQpAQCAt
MTM5LDkgKzE2NCwxMSBAQCBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJlY29y
ZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+CiAgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IENoYXJhY3RlckRhdGFSZWNvcmQo
dGFyZ2V0KSkpOwogfQogCi1NdXRhdGlvblJlY29yZDo6TXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0
cjxOb2RlPiB0YXJnZXQpCi0gICAgOiBtX3RhcmdldCh0YXJnZXQpCitQYXNzUmVmUHRyPE11dGF0
aW9uUmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVm
UHRyPE11dGF0aW9uUmVjb3JkPiByZWNvcmQpCiB7CisgICAgaWYgKHJlY29yZC0+b2xkVmFsdWUo
KS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlY29yZDsKKyAgICByZXR1cm4gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgTXV0YXRpb25SZWNvcmRXaXRoTnVsbE9s
ZFZhbHVlKHJlY29yZCkpKTsKIH0KIAogTXV0YXRpb25SZWNvcmQ6On5NdXRhdGlvblJlY29yZCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCmluZGV4IDI1YWY0ZDNlYTNhMTc5OWRmYTBl
MzQxODZlMTg4ODE1ODIyMzYxNDUuLjNiZjAxYTE5Yjk0NGEzYzFkZjBiMDdmOTI0NzBlZDgzODA2
OGI4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00NywxMyArNDcsMTUg
QEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIE11dGF0aW9uUmVjb3JkIDogcHVibGljIFJl
ZkNvdW50ZWQ8TXV0YXRpb25SZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0
LCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3Zl
ZCwgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4
dFNpYmxpbmcpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVB
dHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMo
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZFZhbHVlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29y
ZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQ
YXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CisKICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29y
ZCgpOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSA9IDA7Ci0gICAg
Tm9kZSogdGFyZ2V0KCkgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIE5v
ZGUqIHRhcmdldCgpID0gMDsKIAogICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMoKSB7
IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBOb2RlTGlzdCogcmVtb3ZlZE5vZGVzKCkgeyByZXR1
cm4gMDsgfQpAQCAtNjQsMTYgKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJldHVybiBudWxsQXRvbTsgfQogCiAg
ICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KLQotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IE11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKLQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiB9OwogCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggMzQwYWFmOTc4Mjg4NDkyNzU3MWE5YWZhZjJmMzI4MGRiZDA4OTk1MS4uYjQ5Y2QyOGNjODI0
NGNiYjE3MjZlODA2YzVlODBlNWMxYTE1MzNjZCAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEx
LTEwLTI2ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRh
dGlvbk9ic2VydmVyc10gU3VwcG9ydCBhdHRyaWJ1dGVPbGRWYWx1ZSBmb3IgYXR0cmlidXRlIG11
dGF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzA4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCB0ZXN0IGNhc2VzIGZvciBhdHRyaWJ1dGVPbGRWYWx1ZSB0byBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sOgorCiAy
MDExLTEwLTI3ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgc3VidHJlZSBvYnNlcnZhdGlvbiBv
ZiB0cmFuc2llbnRseSBkaXNjb25uZWN0ZWQgbm9kZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCAy
Zjg1OThkZmY3YTAyMGVlM2M3MjdlOWUzN2Y5ODZhNmEyODE4Njk1Li5kNmI2MDYzNGQwNjU4OTQ4
YmVhMjI5OTUzYzU2OGYwYTFiNzAzN2JjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211
dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC01OCw2ICs1
OCw0MCBAQCBQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCiBQQVNTIG11
dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmli
dXRlTmFtZSBpcyAiYmF6IgogCitUZXN0aW5nIGJhc2ljIG9sZFZhbHVlIGRlbGl2ZXJ5LgorUEFT
UyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11
dGF0aW9uc1swXS5vbGRWYWx1ZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFT
UyBtdXRhdGlvbnNbMV0ub2xkVmFsdWUgaXMgImJhciIKKworVGVzdGluZyB0aGF0IG9sZFZhbHVl
IGlzIGRlbGl2ZXJlZCBhcyByZXF1ZXN0ZWQgKG9yIG5vdCkuCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZh
bHVlIGlzICJiYXIiCitQQVNTIG11dGF0aW9uczIubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25z
MlswXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5h
bWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zMlswXS5vbGRWYWx1ZSBpcyBudWxsCisKK0FuIG9i
c2VydmVyIHdpdGggbXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGF0dHJpYnV0ZU9sZFZh
bHVlIGlmIGFueSBlbnRyaWVzIHJlcXVlc3QgaXQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlz
ICJiYXIiCisKK1Rlc3Rpbmcgc2V0dGluZyBhbiBhdHRyaWJ1dGUgdmlhIHJlZmxlY3RlZCBJREwg
YXR0cmlidXRlLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlz
ICJpZCIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25z
WzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1l
IGlzICJpZCIKK1BBU1MgbXV0YXRpb25zWzFdLm9sZFZhbHVlIGlzICJmb28iCisKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggYjViYzQ0MTc1
Y2FmY2ViNTAwM2JkYmZmMmFlY2Q4YzcyZDE3MzJjYS4uYTFlZTJjODI4NmIyZDA2YjgyOTE3OWE1
MGZiMzhiMDliYjNmZWI2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29i
c2VydmUtYXR0cmlidXRlcy5odG1sCkBAIC0yOTQsOSArMjk0LDE2MSBAQCBmdW5jdGlvbiB0ZXN0
T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQoKSB7CiAKICAgICBzdGFydCgpOwogfQotdmFy
IHRlc3RzID0gW3Rlc3RCYXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRpcGxlUmVnaXN0cmF0
aW9uLCB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3ROYW1lc3BhY2VVUkksIHRlc3RQcm9wZXJ0
eUFjY2VzcywgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkXTsKKworZnVuY3Rpb24g
dGVzdE9sZFZhbHVlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2ljIG9sZFZhbHVl
IGRlbGl2ZXJ5LicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdp
bmRvdy5tdXRhdGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZl
ci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1
ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBk
aXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNo
LCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5vbGRWYWx1ZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlw
ZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRy
aWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0ub2xk
VmFsdWUnLCAnImJhciInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQoKSB7CisgICAgdmFyIGRp
djsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2
ZXJlZCBhcyByZXF1ZXN0ZWQgKG9yIG5vdCkuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7
CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBk
aXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CisgICAgICAgICAgICB3
aW5kb3cubXV0YXRpb25zID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2
ZXIyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7Cisg
ICAgICAgICAgICB3aW5kb3cubXV0YXRpb25zMiA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0
ZU9sZFZhbHVlOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgYXR0
cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2Jheicp
OworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uczJbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zMlswXS5vbGRWYWx1ZScsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVi
dWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7Cisg
ICAgdmFyIGRpdjsKKyAgICB2YXIgc3BhbjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ0FuIG9ic2VydmVyIHdpdGggbXVsdGlwbGUg
b2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGF0dHJpYnV0ZU9sZFZhbHVlIGlmIGFueSBlbnRyaWVzIHJl
cXVlc3QgaXQuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBzcGFuID0gZGl2LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSk7CisgICAgICAgIHNwYW4uc2V0QXR0
cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CisgICAgICAgICAgICB3aW5kb3cubXV0
YXRpb25zID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2
ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsIHN1YnRy
ZWU6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc3BhbiwgeyBhdHRyaWJ1dGVz
OiB0cnVlIH0pOworICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JheicpOworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRU
ZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdElETEF0dHJp
YnV0ZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzZXR0aW5nIGFuIGF0dHJpYnV0ZSB2
aWEgcmVmbGVjdGVkIElETCBhdHRyaWJ1dGUuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7
CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBv
YnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykg
eworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7
CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJp
YnV0ZU9sZFZhbHVlOiB0cnVlIH0pOworICAgICAgICBkaXYuaWQgPSAnZm9vJzsKKyAgICAgICAg
ZGl2LmlkID0gJ2Jhcic7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVu
Z3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUn
LCAnImlkIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVlJywgJ251
bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVz
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImlk
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLm9sZFZhbHVlJywgJyJmb28iJyk7
CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAg
ICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK3ZhciB0ZXN0
cyA9IFsKKyAgICB0ZXN0QmFzaWMsCisgICAgdGVzdFdyb25nVHlwZSwKKyAgICB0ZXN0TXVsdGlw
bGVSZWdpc3RyYXRpb24sCisgICAgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLAorICAgIHRlc3ROYW1l
c3BhY2VVUkksCisgICAgdGVzdFByb3BlcnR5QWNjZXNzLAorICAgIHRlc3RPcmRlcmluZ1dydERP
TVN1YnRyZWVNb2RpZmllZCwKKyAgICB0ZXN0T2xkVmFsdWUsCisgICAgdGVzdE9sZFZhbHVlQXNS
ZXF1ZXN0ZWQsCisgICAgdGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0aW9ucywKKyAg
ICB0ZXN0SURMQXR0cmlidXRlCitdOwogdmFyIHRlc3RJbmRleCA9IDA7Ci0gCisKIGZ1bmN0aW9u
IHJ1bk5leHRUZXN0KCkgewogICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCiAgICAg
ICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112941</attachid>
            <date>2011-10-28 16:57:35 -0700</date>
            <delta_ts>2011-10-28 17:24:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70861-20111028165734.patch</filename>
            <type>text/plain</type>
            <size>20773</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzkxZTU4MDZmNWM3ZTRj
YWFlMDI5OTY2MTc1YWZlOTljNTg0YjdkLi42Y2UyMzljOTdlN2ZhNWI0ZGFjYmVhYWI1ZDY0MjBm
MzE2Zjg1ZDY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjYgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc3BlY3QgJ2F0dHJp
YnV0ZU9sZFZhbHVlJyB3aGVuIHBhc3NlZCB0byBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2Vy
dmUoKS4KKworICAgICAgICBJZiBtdWx0aXBsZSBvYnNlcnZlcnMgaGF2ZSBkaWZmZXJlbnQgYXR0
cmlidXRlT2xkVmFsdWUgc2V0dGluZ3MgaW4KKyAgICAgICAgdGhlaXIgcmVnaXN0cmF0aW9ucywg
dHdvIGRpZmZlcmVudCBNdXRhdGlvblJlY29yZHMgYXJlIGNyZWF0ZWQgKG9uZSBpcworICAgICAg
ICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBvdGhlcikuCisKKyAgICAgICAgSWYgYSBzaW5nbGUgb2Jz
ZXJ2ZXIgaGFzIG11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgdGhhdCBhcHBseSB0byBhIHNpbmdsZQor
ICAgICAgICBtdXRhdGlvbiwgYW5kIHRob3NlIHJlZ2lzdHJhdGlvbnMgaGF2ZSBkaWZmZXJlbnQg
dmFsdWVzIGZvcgorICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZSwgdGhlIG9ic2VydmVyIGlzIHBh
c3NlZCB0aGUgb2xkVmFsdWUuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjplbnF1ZXVlQXR0cmli
dXRlc011dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJp
YnV0ZSk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKToKKyAgICAgICAgKiBkb20v
TXV0YXRpb25SZWNvcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uUmVjb3JkOjpvbGRW
YWx1ZSk6CisKIDIwMTEtMTAtMjcgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBzdWJ0cmVlIG9i
c2VydmF0aW9uIG9mIHRyYW5zaWVudGx5IGRpc2Nvbm5lY3RlZCBub2RlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IGVjNDgwNTgyNTdjNDRkN2NmYWI3MDUwZDEyZjI0MTE2NmM3ZGM2ZGIuLjVh
NzdlMmI5ZWJmMjY1MzVlM2VkYzUwNmRhZmM0M2MxZWZhMzZhNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTYxNywxNiArNjE3LDM4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6
Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0CiB9CiAK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJp
YnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQorc3RhdGljIGlubGluZSBib29sIGhhc09sZFZhbHVlKE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpBdHRyaWJ1dGVPbGRWYWx1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2xk
VmFsdWVSZXF1ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNlcnZlcnMpCit7CisgICAgZm9yIChIYXNoTWFwPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkK
IHsKICAgICBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucz4gb2JzZXJ2ZXJzOwogICAgIGVsZW1lbnQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9i
c2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0
ZXMpOwogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChIYXNoTWFwPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBv
YnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKLSAgICAg
ICAgaXRlci0+Zmlyc3QtPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgUmVm
UHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRy
aWJ1dGVzKGVsZW1lbnQsIG5hbWUsIGlzT2xkVmFsdWVSZXF1ZXN0ZWQob2JzZXJ2ZXJzKSA/IG9s
ZFZhbHVlIDogbnVsbEF0b20pOworICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25X
aXRoTnVsbE9sZFZhbHVlOworICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJl
Z2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGhh
c09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgICAgICBpdGVyLT5maXJzdC0+ZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoIW11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZSkKKyAgICAgICAgICAgICAgICBtdXRhdGlvbldp
dGhOdWxsT2xkVmFsdWUgPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZSht
dXRhdGlvbik7CisgICAgICAgICAgICBpdGVyLT5maXJzdC0+ZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAjZW5kaWYK
IApAQCAtNjUyLDcgKzY3NCw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKIAogI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdl
ZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFu
dCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgotICAgIGVucXVldWVBdHRyaWJ1dGVz
TXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisgICAgZW5xdWV1ZUF0dHJpYnV0
ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBhdHRyaWJ1dGVOYW1lLCBvbGQgPyBvbGQtPnZhbHVlKCkg
OiBudWxsQXRvbSk7CiAjZW5kaWYKIAogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShvbGQgPyBv
bGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQpAQCAtNjkwLDcgKzcxMiw3IEBAIHZvaWQgRWxl
bWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsCiAKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIC8v
IFRoZSBjYWxsIHRvIGF0dHJpYnV0ZUNoYW5nZWQgYmVsb3cgbWF5IGRpc3BhdGNoIERPTVN1YnRy
ZWVNb2RpZmllZCwgc28gaXQncyBpbXBvcnRhbnQgdG8gZW5xdWV1ZSBhIE11dGF0aW9uUmVjb3Jk
IG5vdy4KLSAgICBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKHRoaXMsIG5hbWUpOwor
ICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgbmFtZSwgb2xkID8gb2xk
LT52YWx1ZSgpIDogbnVsbEF0b20pOwogI2VuZGlmCiAKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5h
bWUobmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAppbmRleCBjMzZlY2E2
ZGRlNzFkZWVlOWNkMmNmZDI0Yzg4NGY1OGJhN2JiZmI5Li4wY2FjODY1NTQzM2I0N2RlZTIxYTAy
MjYwMGFjYzM5NWUzYmE5YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAK
QEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENoaWxkTGlzdFJlY29yZCA6IHB1
YmxpYyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6CiAgICAgQ2hpbGRMaXN0UmVjb3JkKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBhZGRlZCwgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcsIFBh
c3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcpCi0gICAgICAgIDogTXV0YXRpb25SZWNvcmQodGFy
Z2V0KQorICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKICAgICAgICAgLCBtX2FkZGVkTm9kZXMo
YWRkZWQpCiAgICAgICAgICwgbV9yZW1vdmVkTm9kZXMocmVtb3ZlZCkKICAgICAgICAgLCBtX3By
ZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpCkBAIC01NiwxMiArNTYsMTQgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSgpOwotICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMoKSB7IHJldHVybiBtX2FkZGVk
Tm9kZXMuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIE5vZGVMaXN0KiByZW1vdmVkTm9kZXMoKSB7IHJl
dHVybiBtX3JlbW92ZWROb2Rlcy5nZXQoKTsgfQotICAgIHZpcnR1YWwgTm9kZSogcHJldmlvdXNT
aWJsaW5nKCkgeyByZXR1cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0KCk7IH0KLSAgICB2aXJ0dWFs
IE5vZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQotCisg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIE5vZGUqIHRhcmdldCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9Cisg
ICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2RlcygpIE9WRVJSSURFIHsgcmV0dXJuIG1fYWRk
ZWROb2Rlcy5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZUxpc3QqIHJlbW92ZWROb2RlcygpIE9W
RVJSSURFIHsgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmdldCgpOyB9CisgICAgdmlydHVhbCBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcoKSBPVkVSUklERSB7IHJldHVybiBtX3ByZXZpb3VzU2libGluZy5n
ZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogbmV4dFNpYmxpbmcoKSBPVkVSUklERSB7IHJldHVy
biBtX25leHRTaWJsaW5nLmdldCgpOyB9CisKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiAg
ICAgUmVmUHRyPE5vZGVMaXN0PiBtX2FkZGVkTm9kZXM7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBt
X3JlbW92ZWROb2RlczsKICAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2aW91c1NpYmxpbmc7CkBAIC03
MCwzOCArNzIsNjEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQXR0cmlidXRlc1JlY29yZCA6IHB1Ymxp
YyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6Ci0gICAgQXR0cmlidXRlc1JlY29yZChQYXNzUmVm
UHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKLSAgICAgICAgOiBN
dXRhdGlvblJlY29yZCh0YXJnZXQpCisgICAgQXR0cmlidXRlc1JlY29yZChQYXNzUmVmUHRyPE5v
ZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBvbGRWYWx1ZSkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCiAgICAgICAgICwgbV9hdHRy
aWJ1dGVOYW1lKG5hbWUubG9jYWxOYW1lKCkpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVOYW1lc3Bh
Y2UobmFtZS5uYW1lc3BhY2VVUkkoKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKG9sZFZhbHVlKQog
ICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgp
IHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWVzcGFjZTsg
fQotICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fb2xk
VmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSBPVkVSUklERSB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVOYW1lKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSgpIE9WRVJSSURFIHsgcmV0
dXJuIG1fYXR0cmlidXRlTmFtZXNwYWNlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUo
KSBPVkVSUklERSB7IHJldHVybiBtX29sZFZhbHVlOyB9CiAKKyAgICBSZWZQdHI8Tm9kZT4gbV90
YXJnZXQ7CiAgICAgQXRvbWljU3RyaW5nIG1fYXR0cmlidXRlTmFtZTsKICAgICBBdG9taWNTdHJp
bmcgbV9hdHRyaWJ1dGVOYW1lc3BhY2U7Ci0gICAgU3RyaW5nIG1fb2xkVmFsdWU7CisgICAgQXRv
bWljU3RyaW5nIG1fb2xkVmFsdWU7CiB9OwogCiBjbGFzcyBDaGFyYWN0ZXJEYXRhUmVjb3JkIDog
cHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1YmxpYzoKICAgICBDaGFyYWN0ZXJEYXRhUmVjb3Jk
KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQotICAgICAgICA6IE11dGF0aW9uUmVjb3JkKHRhcmdl
dCkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpOwotICAgIHZpcnR1YWwgU3Ry
aW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fb2xkVmFsdWUgPSB2YWx1ZTsgfQor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBOb2RlKiB0YXJnZXQoKSBPVkVSUklERSB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQor
CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgTXV0YXRpb25SZWNvcmRX
aXRoTnVsbE9sZFZhbHVlIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKK3B1YmxpYzoKKyAgICBN
dXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFsdWUoUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4g
cmVjb3JkKQorICAgICAgICA6IG1fcmVjb3JkKHJlY29yZCkKKyAgICB7CisgICAgfQogCi0gICAg
U3RyaW5nIG1fb2xkVmFsdWU7Citwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQtPnR5cGUoKTsgfQorICAgIHZp
cnR1YWwgTm9kZSogdGFyZ2V0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQtPnRhcmdldCgp
OyB9CisgICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2RlcygpIE9WRVJSSURFIHsgcmV0dXJu
IG1fcmVjb3JkLT5hZGRlZE5vZGVzKCk7IH0KKyAgICB2aXJ0dWFsIE5vZGVMaXN0KiByZW1vdmVk
Tm9kZXMoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+cmVtb3ZlZE5vZGVzKCk7IH0KKyAg
ICB2aXJ0dWFsIE5vZGUqIHByZXZpb3VzU2libGluZygpIE9WRVJSSURFIHsgcmV0dXJuIG1fcmVj
b3JkLT5wcmV2aW91c1NpYmxpbmcoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogbmV4dFNpYmxpbmco
KSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+bmV4dFNpYmxpbmcoKTsgfQorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKCkgT1ZFUlJJREUgeyByZXR1cm4g
bV9yZWNvcmQtPmF0dHJpYnV0ZU5hbWUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+YXR0
cmlidXRlTmFtZXNwYWNlKCk7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgT1ZF
UlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4g
bV9yZWNvcmQ7CiB9OwogCiBjb25zdCBBdG9taWNTdHJpbmcmIENoaWxkTGlzdFJlY29yZDo6dHlw
ZSgpCkBAIC0xMjksOSArMTU0LDkgQEAgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRp
b25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmcKICAgICByZXR1
cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQ2hpbGRMaXN0UmVj
b3JkKHRhcmdldCwgYWRkZWQsIHJlbW92ZWQsIHByZXZpb3VzU2libGluZywgbmV4dFNpYmxpbmcp
KSk7CiB9CiAKLVBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVh
dGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQorUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IEF0dHJpYnV0ZXNSZWNvcmQodGFy
Z2V0LCBuYW1lKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJl
Y29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFtZSwgb2xkVmFsdWUpKSk7CiB9
CiAKIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFy
YWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQpAQCAtMTM5LDkgKzE2NCwxMSBAQCBQ
YXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVy
RGF0YShQYXNzUmVmUHRyPE5vZGU+CiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11
dGF0aW9uUmVjb3JkKj4obmV3IENoYXJhY3RlckRhdGFSZWNvcmQodGFyZ2V0KSkpOwogfQogCi1N
dXRhdGlvblJlY29yZDo6TXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCi0g
ICAgOiBtX3RhcmdldCh0YXJnZXQpCitQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlv
blJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3Jk
PiByZWNvcmQpCiB7CisgICAgaWYgKHJlY29yZC0+b2xkVmFsdWUoKS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIHJlY29yZDsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRp
b25SZWNvcmQqPihuZXcgTXV0YXRpb25SZWNvcmRXaXRoTnVsbE9sZFZhbHVlKHJlY29yZCkpKTsK
IH0KIAogTXV0YXRpb25SZWNvcmQ6On5NdXRhdGlvblJlY29yZCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5oCmluZGV4IDI1YWY0ZDNlYTNhMTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYx
NDUuLjNiZjAxYTE5Yjk0NGEzYzFkZjBiMDdmOTI0NzBlZDgzODA2OGI4NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00NywxMyArNDcsMTUgQEAgY2xhc3MgUXVhbGlmaWVk
TmFtZTsKIGNsYXNzIE11dGF0aW9uUmVjb3JkIDogcHVibGljIFJlZkNvdW50ZWQ8TXV0YXRpb25S
ZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4g
Y3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVM
aXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2Rl
PiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcpOwotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQ
dHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0
YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVl
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hhcmFjdGVy
RGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
dXRhdGlvblJlY29yZD4gY3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPik7CisKICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29yZCgpOwogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSA9IDA7Ci0gICAgTm9kZSogdGFyZ2V0KCkgeyBy
ZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIE5vZGUqIHRhcmdldCgpID0gMDsK
IAogICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMoKSB7IHJldHVybiAwOyB9CiAgICAg
dmlydHVhbCBOb2RlTGlzdCogcmVtb3ZlZE5vZGVzKCkgeyByZXR1cm4gMDsgfQpAQCAtNjQsMTYg
KzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVOYW1lc3BhY2UoKSB7IHJldHVybiBudWxsQXRvbTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcg
b2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRW
YWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IE11dGF0
aW9uUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8Tm9kZT4gbV90YXJnZXQ7CiB9OwogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzQwYWFmOTc4Mjg4NDky
NzU3MWE5YWZhZjJmMzI4MGRiZDA4OTk1MS4uYjQ5Y2QyOGNjODI0NGNiYjE3MjZlODA2YzVlODBl
NWMxYTE1MzNjZCAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEwLTI2ICBBZGFtIEtsZWlu
ICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3Vw
cG9ydCBhdHRyaWJ1dGVPbGRWYWx1ZSBmb3IgYXR0cmlidXRlIG11dGF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0IGNhc2VzIGZv
ciBhdHRyaWJ1dGVPbGRWYWx1ZSB0byBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGZhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sOgorCiAyMDExLTEwLTI3ICBSYWZhZWwg
V2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW011dGF0aW9uT2Jz
ZXJ2ZXJzXSBJbXBsZW1lbnQgc3VidHJlZSBvYnNlcnZhdGlvbiBvZiB0cmFuc2llbnRseSBkaXNj
b25uZWN0ZWQgbm9kZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCAyZjg1OThkZmY3YTAyMGVlM2M3
MjdlOWUzN2Y5ODZhNmEyODE4Njk1Li45YmIwN2U5NTMwZmE3NTQwYTk5MGVkYjA3YzNlYTQ3YjYw
NWQzNWJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0
cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNl
cnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC01OCw2ICs1OCw0MCBAQCBQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCiBQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlz
ICJhdHRyaWJ1dGVzIgogUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmF6Igog
CitUZXN0aW5nIGJhc2ljIG9sZFZhbHVlIGRlbGl2ZXJ5LgorUEFTUyBtdXRhdGlvbnMubGVuZ3Ro
IGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5vbGRWYWx1
ZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBt
dXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNbMV0ub2xk
VmFsdWUgaXMgImJhciIKKworVGVzdGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2ZXJlZCBhcyBy
ZXF1ZXN0ZWQgKG9yIG5vdCkuCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BB
U1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1Mg
bXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9sZFZhbHVlIGlzICJiYXIiCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BB
U1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBd
Lm9sZFZhbHVlIGlzIG51bGwKKworQW4gb2JzZXJ2ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZhdGlv
bnMgd2lsbCBnZXQgYXR0cmlidXRlT2xkVmFsdWUgaWYgYW55IGVudHJpZXMgcmVxdWVzdCBpdC4K
K1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFT
UyBtdXRhdGlvbnNbMF0ub2xkVmFsdWUgaXMgImJhciIKKworVGVzdGluZyBzZXR0aW5nIGFuIGF0
dHJpYnV0ZSB2aWEgcmVmbGVjdGVkIElETCBhdHRyaWJ1dGUuCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImlkIgorUEFTUyBtdXRhdGlvbnNbMF0ub2xkVmFs
dWUgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImlkIgorUEFTUyBtdXRhdGlvbnNbMV0ub2xk
VmFsdWUgaXMgImZvbyIKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
YXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJp
YnV0ZXMuaHRtbAppbmRleCBiNWJjNDQxNzVjYWZjZWI1MDAzYmRiZmYyYWVjZDhjNzJkMTczMmNh
Li4zOTVhZjc5ODQ1ODFiZDZhNWY4MjFjYmNlMTU1YWZhNjZiZGY0MTljIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKQEAgLTEwLDcg
KzEwLDcgQEAKIDxzY3JpcHQ+CiAKIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLXZhciBt
dXRhdGlvbnMsIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyLCBtdXRhdGlv
bnNXaXRoT2xkVmFsdWU7CiB2YXIgY2FsbHM7CiAKIGZ1bmN0aW9uIHRlc3RCYXNpYygpIHsKQEAg
LTI5NCw5ICsyOTQsMTYyIEBAIGZ1bmN0aW9uIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2Rp
ZmllZCgpIHsKIAogICAgIHN0YXJ0KCk7CiB9Ci12YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0
V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2VydmVy
cywgdGVzdE5hbWVzcGFjZVVSSSwgdGVzdFByb3BlcnR5QWNjZXNzLCB0ZXN0T3JkZXJpbmdXcnRE
T01TdWJ0cmVlTW9kaWZpZWRdOworCitmdW5jdGlvbiB0ZXN0T2xkVmFsdWUoKSB7CisgICAgdmFy
IGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgb2xkVmFsdWUgZGVsaXZlcnkuJyk7CisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0
aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9u
czsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0
ZXM6IHRydWUsIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0
cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdi
YXonKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVlJywgJ251bGwnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5vbGRWYWx1ZScsICciYmFyIicpOworICAgICAg
ICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVu
TmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0T2xk
VmFsdWVBc1JlcXVlc3RlZCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcldpdGhP
bGRWYWx1ZTsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBvbGRWYWx1ZSBpcyBkZWxpdmVyZWQgYXMgcmVxdWVz
dGVkIChvciBub3QpLicpOworICAgICAgICBtdXRhdGlvbnNXaXRoT2xkVmFsdWUgPSBudWxsOwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOwor
ICAgICAgICBvYnNlcnZlcldpdGhPbGRWYWx1ZSA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9uc1dpdGhP
bGRWYWx1ZSA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyID0gbmV3
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CisgICAgICAgICAg
ICB3aW5kb3cubXV0YXRpb25zID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAgICAgb2Jz
ZXJ2ZXJXaXRoT2xkVmFsdWUub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmli
dXRlT2xkVmFsdWU6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0
dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXon
KTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5n
dGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5
cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xk
VmFsdWVbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9sZFZhbHVlJywgJyJiYXIiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5vbGRWYWx1ZScsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1
ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30K
KworZnVuY3Rpb24gdGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0aW9ucygpIHsKKyAg
ICB2YXIgZGl2OworICAgIHZhciBzcGFuOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnQW4gb2JzZXJ2ZXIgd2l0aCBtdWx0aXBsZSBv
YnNlcnZhdGlvbnMgd2lsbCBnZXQgYXR0cmlidXRlT2xkVmFsdWUgaWYgYW55IGVudHJpZXMgcmVx
dWVzdCBpdC4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHNwYW4gPSBkaXYuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTsKKyAgICAgICAgc3Bhbi5zZXRBdHRy
aWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRh
dGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSwgc3VidHJl
ZTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzcGFuLCB7IGF0dHJpYnV0ZXM6
IHRydWUgfSk7CisgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAg
ICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2go
KSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS5vbGRWYWx1ZScsICciYmFyIicpOworICAgICAgICBvYnNl
cnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRl
c3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0SURMQXR0cmli
dXRlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24g
c3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHNldHRpbmcgYW4gYXR0cmlidXRlIHZp
YSByZWZsZWN0ZWQgSURMIGF0dHJpYnV0ZS4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsK
KyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9i
c2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7
CisgICAgICAgICAgICB3aW5kb3cubXV0YXRpb25zID0gbXV0YXRpb25zOworICAgICAgICB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmli
dXRlT2xkVmFsdWU6IHRydWUgfSk7CisgICAgICAgIGRpdi5pZCA9ICdmb28nOworICAgICAgICBk
aXYuaWQgPSAnYmFyJzsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScs
ICciaWQiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnbnVs
bCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciaWQi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0ub2xkVmFsdWUnLCAnImZvbyInKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3Rz
ID0gWworICAgIHRlc3RCYXNpYywKKyAgICB0ZXN0V3JvbmdUeXBlLAorICAgIHRlc3RNdWx0aXBs
ZVJlZ2lzdHJhdGlvbiwKKyAgICB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsCisgICAgdGVzdE5hbWVz
cGFjZVVSSSwKKyAgICB0ZXN0UHJvcGVydHlBY2Nlc3MsCisgICAgdGVzdE9yZGVyaW5nV3J0RE9N
U3VidHJlZU1vZGlmaWVkLAorICAgIHRlc3RPbGRWYWx1ZSwKKyAgICB0ZXN0T2xkVmFsdWVBc1Jl
cXVlc3RlZCwKKyAgICB0ZXN0T2xkVmFsdWVVbmlvbk11bHRpcGxlT2JzZXJ2YXRpb25zLAorICAg
IHRlc3RJRExBdHRyaWJ1dGUKK107CiB2YXIgdGVzdEluZGV4ID0gMDsKLSAKKwogZnVuY3Rpb24g
cnVuTmV4dFRlc3QoKSB7CiAgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkKICAgICAg
ICAgdGVzdHNbdGVzdEluZGV4KytdKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112947</attachid>
            <date>2011-10-28 17:24:04 -0700</date>
            <delta_ts>2011-10-28 18:31:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70861-20111028172403.patch</filename>
            <type>text/plain</type>
            <size>20897</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzkxZTU4MDZmNWM3ZTRj
YWFlMDI5OTY2MTc1YWZlOTljNTg0YjdkLi5mZjZiNDkxZjk0MGM0YWU5NTQxZmQ1ODg1MWJmNWEy
OTBkN2Q4YTY1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjYgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBSZXNwZWN0ICdhdHRyaWJ1
dGVPbGRWYWx1ZScgd2hlbiBwYXNzZWQgdG8gV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZl
KCkuCisKKyAgICAgICAgSWYgbXVsdGlwbGUgb2JzZXJ2ZXJzIGhhdmUgZGlmZmVyZW50IGF0dHJp
YnV0ZU9sZFZhbHVlIHNldHRpbmdzIGluCisgICAgICAgIHRoZWlyIHJlZ2lzdHJhdGlvbnMsIHR3
byBkaWZmZXJlbnQgTXV0YXRpb25SZWNvcmRzIGFyZSBjcmVhdGVkIChvbmUgaXMKKyAgICAgICAg
YSB3cmFwcGVyIGFyb3VuZCB0aGUgb3RoZXIpLgorCisgICAgICAgIElmIGEgc2luZ2xlIG9ic2Vy
dmVyIGhhcyBtdWx0aXBsZSByZWdpc3RyYXRpb25zIHRoYXQgYXBwbHkgdG8gYSBzaW5nbGUKKyAg
ICAgICAgbXV0YXRpb24sIGFuZCB0aG9zZSByZWdpc3RyYXRpb25zIGhhdmUgZGlmZmVyZW50IHZh
bHVlcyBmb3IKKyAgICAgICAgYXR0cmlidXRlT2xkVmFsdWUsIHRoZSBvYnNlcnZlciBpcyBwYXNz
ZWQgdGhlIG9sZFZhbHVlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aGFzT2xkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZUF0dHJpYnV0
ZXNNdXRhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1
dGUpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
dXRhdGlvblJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZSk6CisgICAgICAgICogZG9tL011
dGF0aW9uUmVjb3JkLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvblJlY29yZDo6b2xkVmFs
dWUpOgorCiAyMDExLTEwLTI3ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgc3VidHJlZSBvYnNl
cnZhdGlvbiBvZiB0cmFuc2llbnRseSBkaXNjb25uZWN0ZWQgbm9kZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCBlYzQ4MDU4MjU3YzQ0ZDdjZmFiNzA1MGQxMmYyNDExNjZjN2RjNmRiLi4xZGFm
Mzk4ZTFlNzc1ZWU2MDc4MWM1MjY2YTJlNzdjMDQ1N2I5YzA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC02MTcsMTYgKzYxNyw0MyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6Omdl
dEF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdAogfQogCiAj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLXN0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1
dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNPbGRWYWx1ZShNdXRhdGlvbk9ic2VydmVyT3B0
aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBvcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6QXR0cmlidXRlT2xkVmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc09sZFZh
bHVlUmVxdWVzdGVkKGNvbnN0IEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzKQoreworICAgIGZvciAoSGFzaE1hcDxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCiB7
CiAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnM+IG9ic2VydmVyczsKICAgICBlbGVtZW50LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVz
KTsKICAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVB
dHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOwotICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2Jz
ZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
IGl0ZXItPmZpcnN0LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmli
dXRlcyhlbGVtZW50LCBuYW1lLCBpc09sZFZhbHVlUmVxdWVzdGVkKG9ic2VydmVycykgPyBvbGRW
YWx1ZSA6IG51bGxBdG9tKTsKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0
aE51bGxPbGRWYWx1ZTsKKyAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlcios
IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdp
bigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChoYXNP
bGRWYWx1ZShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgICAgICBvYnNlcnZlci0+ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGlmICghbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAobXV0YXRpb24tPm9sZFZhbHVlKCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgbXV0YXRp
b25XaXRoTnVsbE9sZFZhbHVlID0gbXV0YXRpb247CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24pLmdldCgpOworICAgICAgICB9CisgICAgICAgIG9i
c2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlKTsK
KyAgICB9CiB9CiAjZW5kaWYKIApAQCAtNjUyLDcgKzY3OSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgLy8gVGhlIGNhbGwg
dG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVk
LCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgotICAg
IGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7Cisg
ICAgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBhdHRyaWJ1dGVOYW1lLCBv
bGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSk7CiAjZW5kaWYKIAogICAgIGlmIChpc0lkQXR0
cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQpAQCAtNjkwLDcg
KzcxNyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQogICAgIC8vIFRoZSBjYWxsIHRvIGF0dHJpYnV0ZUNoYW5nZWQgYmVsb3cgbWF5
IGRpc3BhdGNoIERPTVN1YnRyZWVNb2RpZmllZCwgc28gaXQncyBpbXBvcnRhbnQgdG8gZW5xdWV1
ZSBhIE11dGF0aW9uUmVjb3JkIG5vdy4KLSAgICBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVj
b3JkKHRoaXMsIG5hbWUpOworICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhp
cywgbmFtZSwgb2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20pOwogI2VuZGlmCiAKICAgICBp
ZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAppbmRleCBjMzZlY2E2ZGRlNzFkZWVlOWNkMmNmZDI0Yzg4NGY1OGJhN2JiZmI5Li4wODVk
Y2ZhYTVjNTFlZDMwMTAxNGMzODg3NGIzYTFmOWFiYWQwMDg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENo
aWxkTGlzdFJlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6CiAgICAgQ2hp
bGRMaXN0UmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2RlPiBw
cmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcpCi0gICAgICAgIDog
TXV0YXRpb25SZWNvcmQodGFyZ2V0KQorICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKICAgICAg
ICAgLCBtX2FkZGVkTm9kZXMoYWRkZWQpCiAgICAgICAgICwgbV9yZW1vdmVkTm9kZXMocmVtb3Zl
ZCkKICAgICAgICAgLCBtX3ByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpCkBAIC01Niwx
MiArNTYsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpOwotICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMo
KSB7IHJldHVybiBtX2FkZGVkTm9kZXMuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIE5vZGVMaXN0KiBy
ZW1vdmVkTm9kZXMoKSB7IHJldHVybiBtX3JlbW92ZWROb2Rlcy5nZXQoKTsgfQotICAgIHZpcnR1
YWwgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gbV9wcmV2aW91c1NpYmxpbmcuZ2V0
KCk7IH0KLSAgICB2aXJ0dWFsIE5vZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbV9uZXh0U2li
bGluZy5nZXQoKTsgfQotCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGUqIHRhcmdldCgpIE9WRVJSSURFIHsgcmV0dXJuIG1f
dGFyZ2V0LmdldCgpOyB9CisgICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2RlcygpIE9WRVJS
SURFIHsgcmV0dXJuIG1fYWRkZWROb2Rlcy5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZUxpc3Qq
IHJlbW92ZWROb2RlcygpIE9WRVJSSURFIHsgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmdldCgpOyB9
CisgICAgdmlydHVhbCBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBPVkVSUklERSB7IHJldHVybiBt
X3ByZXZpb3VzU2libGluZy5nZXQoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogbmV4dFNpYmxpbmco
KSBPVkVSUklERSB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CisKKyAgICBSZWZQdHI8
Tm9kZT4gbV90YXJnZXQ7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBtX2FkZGVkTm9kZXM7CiAgICAg
UmVmUHRyPE5vZGVMaXN0PiBtX3JlbW92ZWROb2RlczsKICAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2
aW91c1NpYmxpbmc7CkBAIC03MCwzOCArNzIsNjEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQXR0cmli
dXRlc1JlY29yZCA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7CiBwdWJsaWM6Ci0gICAgQXR0cmli
dXRlc1JlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKLSAgICAgICAgOiBNdXRhdGlvblJlY29yZCh0YXJnZXQpCisgICAgQXR0cmlidXRlc1Jl
Y29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQp
CiAgICAgICAgICwgbV9hdHRyaWJ1dGVOYW1lKG5hbWUubG9jYWxOYW1lKCkpCiAgICAgICAgICwg
bV9hdHRyaWJ1dGVOYW1lc3BhY2UobmFtZS5uYW1lc3BhY2VVUkkoKSkKKyAgICAgICAgLCBtX29s
ZFZhbHVlKG9sZFZhbHVlKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0
dHJpYnV0ZU5hbWVzcGFjZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1
cm4gbV9vbGRWYWx1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IG1fb2xkVmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSBP
VkVSUklERSB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9hdHRyaWJ1dGVO
YW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFj
ZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZXNwYWNlOyB9CisgICAgdmlydHVh
bCBTdHJpbmcgb2xkVmFsdWUoKSBPVkVSUklERSB7IHJldHVybiBtX29sZFZhbHVlOyB9CiAKKyAg
ICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiAgICAgQXRvbWljU3RyaW5nIG1fYXR0cmlidXRlTmFt
ZTsKICAgICBBdG9taWNTdHJpbmcgbV9hdHRyaWJ1dGVOYW1lc3BhY2U7Ci0gICAgU3RyaW5nIG1f
b2xkVmFsdWU7CisgICAgQXRvbWljU3RyaW5nIG1fb2xkVmFsdWU7CiB9OwogCiBjbGFzcyBDaGFy
YWN0ZXJEYXRhUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1YmxpYzoKICAgICBD
aGFyYWN0ZXJEYXRhUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQotICAgICAgICA6IE11
dGF0aW9uUmVjb3JkKHRhcmdldCkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCiAgICAgewog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgp
OwotICAgIHZpcnR1YWwgU3RyaW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fb2xk
VmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiB0YXJnZXQoKSBPVkVSUklERSB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQorCisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKworY2xh
c3MgTXV0YXRpb25SZWNvcmRXaXRoTnVsbE9sZFZhbHVlIDogcHVibGljIE11dGF0aW9uUmVjb3Jk
IHsKK3B1YmxpYzoKKyAgICBNdXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFsdWUoUGFzc1JlZlB0
cjxNdXRhdGlvblJlY29yZD4gcmVjb3JkKQorICAgICAgICA6IG1fcmVjb3JkKHJlY29yZCkKKyAg
ICB7CisgICAgfQogCi0gICAgU3RyaW5nIG1fb2xkVmFsdWU7Citwcml2YXRlOgorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQt
PnR5cGUoKTsgfQorICAgIHZpcnR1YWwgTm9kZSogdGFyZ2V0KCkgT1ZFUlJJREUgeyByZXR1cm4g
bV9yZWNvcmQtPnRhcmdldCgpOyB9CisgICAgdmlydHVhbCBOb2RlTGlzdCogYWRkZWROb2Rlcygp
IE9WRVJSSURFIHsgcmV0dXJuIG1fcmVjb3JkLT5hZGRlZE5vZGVzKCk7IH0KKyAgICB2aXJ0dWFs
IE5vZGVMaXN0KiByZW1vdmVkTm9kZXMoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+cmVt
b3ZlZE5vZGVzKCk7IH0KKyAgICB2aXJ0dWFsIE5vZGUqIHByZXZpb3VzU2libGluZygpIE9WRVJS
SURFIHsgcmV0dXJuIG1fcmVjb3JkLT5wcmV2aW91c1NpYmxpbmcoKTsgfQorICAgIHZpcnR1YWwg
Tm9kZSogbmV4dFNpYmxpbmcoKSBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZC0+bmV4dFNpYmxp
bmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKCkg
T1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmQtPmF0dHJpYnV0ZU5hbWUoKTsgfQorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSBPVkVSUklERSB7IHJl
dHVybiBtX3JlY29yZC0+YXR0cmlidXRlTmFtZXNwYWNlKCk7IH0KKworICAgIHZpcnR1YWwgU3Ry
aW5nIG9sZFZhbHVlKCkgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbV9yZWNvcmQ7CiB9OwogCiBjb25zdCBBdG9taWNTdHJpbmcmIENo
aWxkTGlzdFJlY29yZDo6dHlwZSgpCkBAIC0xMjksOSArMTU0LDkgQEAgUGFzc1JlZlB0cjxNdXRh
dGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHRhcmcKICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQq
PihuZXcgQ2hpbGRMaXN0UmVjb3JkKHRhcmdldCwgYWRkZWQsIHJlbW92ZWQsIHByZXZpb3VzU2li
bGluZywgbmV4dFNpYmxpbmcpKSk7CiB9CiAKLVBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQorUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0
YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IEF0
dHJpYnV0ZXNSZWNvcmQodGFyZ2V0LCBuYW1lKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFt
ZSwgb2xkVmFsdWUpKSk7CiB9CiAKIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9u
UmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQpAQCAt
MTM5LDkgKzE2NCw5IEBAIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3Jk
OjpjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4KICAgICByZXR1cm4gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQ2hhcmFjdGVyRGF0YVJlY29yZCh0
YXJnZXQpKSk7CiB9CiAKLU11dGF0aW9uUmVjb3JkOjpNdXRhdGlvblJlY29yZChQYXNzUmVmUHRy
PE5vZGU+IHRhcmdldCkKLSAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK1Bhc3NSZWZQdHI8TXV0YXRp
b25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKFBhc3NSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IHJlY29yZCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGlj
X2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgTXV0YXRpb25SZWNvcmRXaXRoTnVsbE9sZFZhbHVl
KHJlY29yZCkpKTsKIH0KIAogTXV0YXRpb25SZWNvcmQ6On5NdXRhdGlvblJlY29yZCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCmluZGV4IDI1YWY0ZDNlYTNhMTc5OWRmYTBlMzQxODZl
MTg4ODE1ODIyMzYxNDUuLjNiZjAxYTE5Yjk0NGEzYzFkZjBiMDdmOTI0NzBlZDgzODA2OGI4NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00NywxMyArNDcsMTUgQEAgY2xh
c3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIE11dGF0aW9uUmVjb3JkIDogcHVibGljIFJlZkNvdW50
ZWQ8TXV0YXRpb25SZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRh
dGlvblJlY29yZD4gY3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFz
c1JlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxp
bmcpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVBdHRyaWJ1
dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJp
bmcmIG9sZFZhbHVlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3Jl
YXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVm
UHRyPE11dGF0aW9uUmVjb3JkPik7CisKICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29yZCgpOwog
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSA9IDA7Ci0gICAgTm9kZSog
dGFyZ2V0KCkgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIE5vZGUqIHRh
cmdldCgpID0gMDsKIAogICAgIHZpcnR1YWwgTm9kZUxpc3QqIGFkZGVkTm9kZXMoKSB7IHJldHVy
biAwOyB9CiAgICAgdmlydHVhbCBOb2RlTGlzdCogcmVtb3ZlZE5vZGVzKCkgeyByZXR1cm4gMDsg
fQpAQCAtNjQsMTYgKzY2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJldHVybiBudWxsQXRvbTsgfQogCiAgICAgdmly
dHVhbCBTdHJpbmcgb2xkVmFsdWUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4
cGxpY2l0IE11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKLQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiB9OwogCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzQw
YWFmOTc4Mjg4NDkyNzU3MWE5YWZhZjJmMzI4MGRiZDA4OTk1MS4uYTYyNTI1N2E4ZDNiMmY4NzY0
NmViZDIxYmUwYTM3OTI2NGM3YmI5NSAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEwLTI2
ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9i
c2VydmVyc10gU3VwcG9ydCBhdHRyaWJ1dGVPbGRWYWx1ZSBmb3IgYXR0cmlidXRlIG11dGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgQWRkZWQgdGVz
dCBjYXNlcyBmb3IgYXR0cmlidXRlT2xkVmFsdWUgdG8gZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKwogMjAxMS0xMC0y
NyAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtN
dXRhdGlvbk9ic2VydmVyc10gSW1wbGVtZW50IHN1YnRyZWUgb2JzZXJ2YXRpb24gb2YgdHJhbnNp
ZW50bHkgZGlzY29ubmVjdGVkIG5vZGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211
dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKaW5kZXggMmY4NTk4ZGZm
N2EwMjBlZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NS4uOWJiMDdlOTUzMGZhNzU0MGE5OTBlZGIw
N2MzZWE0N2I2MDVkMzViYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApAQCAtNTgsNiArNTgsNDAgQEAg
UEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgogUEFTUyBtdXRhdGlvbnNb
MV0udHlwZSBpcyAiYXR0cmlidXRlcyIKIFBBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUg
aXMgImJheiIKIAorVGVzdGluZyBiYXNpYyBvbGRWYWx1ZSBkZWxpdmVyeS4KK1BBU1MgbXV0YXRp
b25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgor
UEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNb
MF0ub2xkVmFsdWUgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRl
cyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRp
b25zWzFdLm9sZFZhbHVlIGlzICJiYXIiCisKK1Rlc3RpbmcgdGhhdCBvbGRWYWx1ZSBpcyBkZWxp
dmVyZWQgYXMgcmVxdWVzdGVkIChvciBub3QpLgorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWUu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZVswXS5hdHRyaWJ1dGVOYW1lIGlzICJm
b28iCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZVswXS5vbGRWYWx1ZSBpcyAiYmFyIgorUEFT
UyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11
dGF0aW9uc1swXS5vbGRWYWx1ZSBpcyBudWxsCisKK0FuIG9ic2VydmVyIHdpdGggbXVsdGlwbGUg
b2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGF0dHJpYnV0ZU9sZFZhbHVlIGlmIGFueSBlbnRyaWVzIHJl
cXVlc3QgaXQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
dHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMg
ImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzICJiYXIiCisKK1Rlc3Rpbmcgc2V0
dGluZyBhbiBhdHRyaWJ1dGUgdmlhIHJlZmxlY3RlZCBJREwgYXR0cmlidXRlLgorUEFTUyBtdXRh
dGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMi
CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0YXRpb25z
WzBdLm9sZFZhbHVlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0
ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0YXRp
b25zWzFdLm9sZFZhbHVlIGlzICJmb28iCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggYjViYzQ0MTc1Y2FmY2ViNTAwM2JkYmZmMmFlY2Q4
YzcyZDE3MzJjYS4uMzk1YWY3OTg0NTgxYmQ2YTVmODIxY2JjZTE1NWFmYTY2YmRmNDE5YyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1s
CkBAIC0xMCw3ICsxMCw3IEBACiA8c2NyaXB0PgogCiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Ci12YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIG11dGF0aW9ucywgbXV0YXRpb25z
MiwgbXV0YXRpb25zV2l0aE9sZFZhbHVlOwogdmFyIGNhbGxzOwogCiBmdW5jdGlvbiB0ZXN0QmFz
aWMoKSB7CkBAIC0yOTQsOSArMjk0LDE2MiBAQCBmdW5jdGlvbiB0ZXN0T3JkZXJpbmdXcnRET01T
dWJ0cmVlTW9kaWZpZWQoKSB7CiAKICAgICBzdGFydCgpOwogfQotdmFyIHRlc3RzID0gW3Rlc3RC
YXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uLCB0ZXN0TXVsdGlw
bGVPYnNlcnZlcnMsIHRlc3ROYW1lc3BhY2VVUkksIHRlc3RQcm9wZXJ0eUFjY2VzcywgdGVzdE9y
ZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkXTsKKworZnVuY3Rpb24gdGVzdE9sZFZhbHVlKCkg
eworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2ljIG9sZFZhbHVlIGRlbGl2ZXJ5LicpOwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRhdGlvbnMg
PSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwg
eyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSB9KTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRl
KCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVu
Z3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUn
LCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5vbGRWYWx1ZScsICdu
dWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRl
cyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJm
b28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0ub2xkVmFsdWUnLCAnImJhciIn
KTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7Cisg
ICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rp
b24gdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2Jz
ZXJ2ZXJXaXRoT2xkVmFsdWU7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVk
IGFzIHJlcXVlc3RlZCAob3Igbm90KS4nKTsKKyAgICAgICAgbXV0YXRpb25zV2l0aE9sZFZhbHVl
ID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2Zvbycs
ICdiYXInKTsKKyAgICAgICAgb2JzZXJ2ZXJXaXRoT2xkVmFsdWUgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRh
dGlvbnNXaXRoT2xkVmFsdWUgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNl
cnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgewor
ICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRy
dWUsIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdm
b28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xk
VmFsdWUubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRW
YWx1ZVswXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zV2l0aE9sZFZhbHVlWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZVswXS5vbGRWYWx1ZScsICciYmFyIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlcldpdGhP
bGRWYWx1ZS5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAg
ICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0
YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlv
bnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgc3BhbjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisK
KyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ0FuIG9ic2VydmVyIHdpdGgg
bXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGF0dHJpYnV0ZU9sZFZhbHVlIGlmIGFueSBl
bnRyaWVzIHJlcXVlc3QgaXQuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAg
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBzcGFuID0gZGl2
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSk7CisgICAgICAgIHNw
YW4uc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CisgICAgICAgICAgICB3
aW5kb3cubXV0YXRpb25zID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlT2xkVmFsdWU6IHRy
dWUsIHN1YnRyZWU6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc3BhbiwgeyBh
dHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZm9vJywgJ2Jh
eicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAg
ICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVz
dElETEF0dHJpYnV0ZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAg
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzZXR0aW5nIGFuIGF0
dHJpYnV0ZSB2aWEgcmVmbGVjdGVkIElETCBhdHRyaWJ1dGUuJyk7CisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11
dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAg
ICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRy
dWUsIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlIH0pOworICAgICAgICBkaXYuaWQgPSAnZm9vJzsK
KyAgICAgICAgZGl2LmlkID0gJ2Jhcic7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBl
JywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJp
YnV0ZU5hbWUnLCAnImlkIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZh
bHVlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJh
dHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5h
bWUnLCAnImlkIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLm9sZFZhbHVlJywg
JyJmb28iJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWco
JycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisK
K3ZhciB0ZXN0cyA9IFsKKyAgICB0ZXN0QmFzaWMsCisgICAgdGVzdFdyb25nVHlwZSwKKyAgICB0
ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sCisgICAgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLAorICAg
IHRlc3ROYW1lc3BhY2VVUkksCisgICAgdGVzdFByb3BlcnR5QWNjZXNzLAorICAgIHRlc3RPcmRl
cmluZ1dydERPTVN1YnRyZWVNb2RpZmllZCwKKyAgICB0ZXN0T2xkVmFsdWUsCisgICAgdGVzdE9s
ZFZhbHVlQXNSZXF1ZXN0ZWQsCisgICAgdGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0
aW9ucywKKyAgICB0ZXN0SURMQXR0cmlidXRlCitdOwogdmFyIHRlc3RJbmRleCA9IDA7Ci0gCisK
IGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkgewogICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5n
dGgpCiAgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>