<?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>75053</bug_id>
          
          <creation_ts>2011-12-21 16:29:36 -0800</creation_ts>
          <short_desc>Fix semantics of WEBKIT_WEBGL_lose_context</short_desc>
          <delta_ts>2012-01-04 17:17:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>gman</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>525816</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-21 16:29:36 -0800</bug_when>
    <thetext>After recent WebGL specification updates, the behavior of the WEBGL_lose_context extension in WebKit is out of date, causing conformance test failures. Specifically, calling loseContext() must cause the context to be immediately lost, but should not dispatch the webglcontextlost event until the flow of control returns from JavaScript. Calling restoreContext() must defer the restoration of the context, and dispatch of the associated webglcontextrestored event, until the flow of control returns from JavaScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526676</commentid>
    <comment_count>1</comment_count>
      <attachid>120420</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-22 18:06:28 -0800</bug_when>
    <thetext>Created attachment 120420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526736</commentid>
    <comment_count>2</comment_count>
      <attachid>120420</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-22 22:04:02 -0800</bug_when>
    <thetext>Comment on attachment 120420
Patch

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:542
&gt; +    // Cancel any pending timers.
&gt; +    m_dispatchContextLostEventTimer.stop();
&gt; +    m_restoreTimer.stop();

You don&apos;t need to do this, ~TimerBase() does. I think having this here will just confuse readers.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4126
&gt; +    // Always defer the dispatch of the context lost event to make sure that any
&gt; +    // JavaScript code on the stack has returned.

this comment isn&apos;t fully accurate, using a timer here only defers until the event loop is pumped which does not imply that all JavaScript on the stack has returned - consider what happens if script pops a modal dialog, for example. the logic actually coded here has the same effect of spec code that says &quot;queue a task&quot;

if you care about making sure that all JavaScript code on the stack (if there is any) has returned, you need to look into the active DOM object handling. if you don&apos;t, then just updating this comment is sufficient.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:375
&gt; +    class DispatchContextLostEventTimer : public TimerBase {

This isn&apos;t the way we normally do timers and seems very verbose for the problem it is trying to solve. The more standard way is for WebGLRenderingContext to have a member of type Timer&lt;WebGLRenderingContext&gt; initialized to refer to a member function that does the right thing. Example:
http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/dom/Document.cpp&amp;exact_package=chromium&amp;q=Document%20m_styleRecalcTimer&amp;type=cs&amp;l=386

with that solution you need one member variable and one member function which should save you a lot of lines of code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529790</commentid>
    <comment_count>3</comment_count>
      <attachid>121165</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 15:01:37 -0800</bug_when>
    <thetext>Created attachment 121165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529796</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 15:03:14 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 120420 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120420&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:542
&gt; &gt; +    // Cancel any pending timers.
&gt; &gt; +    m_dispatchContextLostEventTimer.stop();
&gt; &gt; +    m_restoreTimer.stop();
&gt; 
&gt; You don&apos;t need to do this, ~TimerBase() does. I think having this here will just confuse readers.

Thanks, that was leftover code from a diagnosis of failures of one of the test cases. Removed.

&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4126
&gt; &gt; +    // Always defer the dispatch of the context lost event to make sure that any
&gt; &gt; +    // JavaScript code on the stack has returned.
&gt; 
&gt; this comment isn&apos;t fully accurate, using a timer here only defers until the event loop is pumped which does not imply that all JavaScript on the stack has returned - consider what happens if script pops a modal dialog, for example. the logic actually coded here has the same effect of spec code that says &quot;queue a task&quot;

Thanks. Updated the comment rather than changing the logic, since it sounds like the new code is spec compliant.

&gt; if you care about making sure that all JavaScript code on the stack (if there is any) has returned, you need to look into the active DOM object handling. if you don&apos;t, then just updating this comment is sufficient.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:375
&gt; &gt; +    class DispatchContextLostEventTimer : public TimerBase {
&gt; 
&gt; This isn&apos;t the way we normally do timers and seems very verbose for the problem it is trying to solve. The more standard way is for WebGLRenderingContext to have a member of type Timer&lt;WebGLRenderingContext&gt; initialized to refer to a member function that does the right thing. Example:
&gt; http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/dom/Document.cpp&amp;exact_package=chromium&amp;q=Document%20m_styleRecalcTimer&amp;type=cs&amp;l=386
&gt; 
&gt; with that solution you need one member variable and one member function which should save you a lot of lines of code

Thanks very much for this tip. Changed; this simplified the code significantly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529818</commentid>
    <comment_count>5</comment_count>
      <attachid>121165</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 15:20:07 -0800</bug_when>
    <thetext>Comment on attachment 121165
Patch

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

R=me. there are a number of setTimeout(..., 1)s which worry me a bit, we normally construct tests so the timeout value doesn&apos;t matter and pass 0 in just to be clear. commented on them inline. otherwise looks great

&gt; LayoutTests/fast/canvas/webgl/WebGLContextEvent.html:40
&gt; +        }, 1);

the choice of &apos;1&apos; here is a little surprising, normally we use 0 delays for tests to get a clean callstack. if the &apos;1&apos; is significant then i worry this is flaky

&gt; LayoutTests/fast/canvas/webgl/WebGLContextEvent.html:55
&gt; +        }, 1);

same here - should probably be 0

&gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:1
&gt;  &lt;html&gt;

why doesn&apos;t this test have an HTML5 doctype &quot;&lt;!DOCTYPE html&gt;&quot; ? our tests normally do unless they&apos;re specifically for quirks mode

&gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:3
&gt; +&lt;meta charset=&quot;utf-8&quot;&gt;

i don&apos;t think we normally do this

&gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:70
&gt; +       }, 1);

0 here, please

&gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:108
&gt; +      }, 1);

0

&gt; LayoutTests/fast/canvas/webgl/context-lost.html:3
&gt; +&lt;meta charset=&quot;utf-8&quot;&gt;

this is unusual. can this test have a &lt;!DOCTYPE html&gt; please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529880</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 16:39:37 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 121165 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121165&amp;action=review
&gt; 
&gt; R=me. there are a number of setTimeout(..., 1)s which worry me a bit, we normally construct tests so the timeout value doesn&apos;t matter and pass 0 in just to be clear. commented on them inline. otherwise looks great
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/WebGLContextEvent.html:40
&gt; &gt; +        }, 1);
&gt; 
&gt; the choice of &apos;1&apos; here is a little surprising, normally we use 0 delays for tests to get a clean callstack. if the &apos;1&apos; is significant then i worry this is flaky

Yes, there&apos;s no good reason this isn&apos;t 0. I believe I changed it to 1 while debugging an issue with one of the tests. Changed back to 0 here and below.

&gt; &gt; LayoutTests/fast/canvas/webgl/WebGLContextEvent.html:55
&gt; &gt; +        }, 1);
&gt; 
&gt; same here - should probably be 0
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:1
&gt; &gt;  &lt;html&gt;
&gt; 
&gt; why doesn&apos;t this test have an HTML5 doctype &quot;&lt;!DOCTYPE html&gt;&quot; ? our tests normally do unless they&apos;re specifically for quirks mode

No good reason; I didn&apos;t know this was the convention for layout tests. Fixed.

&gt; &gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:3
&gt; &gt; +&lt;meta charset=&quot;utf-8&quot;&gt;
&gt; 
&gt; i don&apos;t think we normally do this

Removed in both tests.

&gt; &gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:70
&gt; &gt; +       }, 1);
&gt; 
&gt; 0 here, please
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/context-lost-restored.html:108
&gt; &gt; +      }, 1);
&gt; 
&gt; 0
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/context-lost.html:3
&gt; &gt; +&lt;meta charset=&quot;utf-8&quot;&gt;
&gt; 
&gt; this is unusual. can this test have a &lt;!DOCTYPE html&gt; please?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529890</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 17:17:55 -0800</bug_when>
    <thetext>Committed r104102: &lt;http://trac.webkit.org/changeset/104102&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120420</attachid>
            <date>2011-12-22 18:06:28 -0800</date>
            <delta_ts>2012-01-04 15:01:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75053-20111222180627.patch</filename>
            <type>text/plain</type>
            <size>25659</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk3MzcxMDlhOTc1YTAy
MGFiODdiZmY3YmYyYmFjZDhjMmRiMTRkYy4uZDhiNzhiNTg0ZWFmY2E0YTllNDUzYWIwMTExYjdj
MTZmNDU1M2IzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTEyLTIyICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBGaXggc2VtYW50aWNzIG9m
IFdFQktJVF9XRUJHTF9sb3NlX2NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIHRv
IG1hdGNoIFdlYkdMIHNwZWMncworICAgICAgICBiZWhhdmlvcjoKKworICAgICAgICAgIC0gbG9z
ZUNvbnRleHQoKSBjYXVzZXMgdGhlIGNvbnRleHQgdG8gYmUgbG9zdCBpbW1lZGlhdGVseSwgYnV0
CisgICAgICAgICAgICB0aGUgd2ViZ2xjb250ZXh0bG9zdCBldmVudCBpc24ndCBkaXNwYXRjaGVk
IHVudGlsIEphdmFTY3JpcHQKKyAgICAgICAgICAgIHJldHVybnMuCisgICAgICAgICAgLSByZXN0
b3JlQ29udGV4dCgpIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIGRpc3BhdGNoIG9mIHRoZQorICAg
ICAgICAgICAgd2ViZ2xjb250ZXh0bG9zdCBldmVudCBoYXMgY29tcGxldGVkLCAqYW5kKiBpZiB0
aGF0IGV2ZW50IGhhbmRsZXIKKyAgICAgICAgICAgIHByZXZlbnRlZCB0aGUgZGVmYXVsdCBiZWhh
dmlvciBvZiB0aGUgZXZlbnQuCisgICAgICAgICAgLSByZXN0b3JlQ29udGV4dCgpIHBlcmZvcm1z
IGl0cyB3b3JrIGFzeW5jaHJvbm91c2x5LiBUaGUgY29udGV4dAorICAgICAgICAgICAgaXMgbm90
IHJlc3RvcmVkIHVudGlsIGp1c3QgYmVmb3JlIHRoZSB3ZWJnbGNvbnRleHRyZXN0b3JlZCBldmVu
dAorICAgICAgICAgICAgaXMgZGlzcGF0Y2hlZC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OkRpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOjpmaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c3RvcmVUaW1lcjo6ZmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3Rv
cmVDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6RGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50VGltZXI6OkRpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyKToKKwogMjAx
MS0xMi0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmRl
clN0eWxlOjpJbmhlcml0ZWRGbGFncyBhbmQgUmVuZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdz
IG1lbWJlcnMgc2hvdWxkIGJlIDQgYnl0ZSBhbGlnbmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA1ODU4NTc0NmI1
MmIxNjZlNzhmNjVkYjdjMzJjOWI0NDU3YTYzMjZlLi42MWYxNTc3MjM5ZjQ0NmFmN2IyZTYwMDg5
OGVmMjMyOWZiZmM3ZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2NCw5ICszNjQsMTQgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fY2hhbmdlZDsKIH07CiAKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpE
aXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjo6ZmlyZWQoKQoreworICAgIG1fY29udGV4dC0+
ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXI6OmZpcmVkKCkKIHsKLSAgICBt
X2NvbnRleHQtPm1heWJlUmVzdG9yZUNvbnRleHQoUmVhbExvc3RDb250ZXh0KTsKKyAgICBtX2Nv
bnRleHQtPm1heWJlUmVzdG9yZUNvbnRleHQoKTsKIH0KIAogY2xhc3MgV2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9z
dENhbGxiYWNrIHsKQEAgLTQxMyw5ICs0MTgsMTEgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGEK
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCiAgICAg
LCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZl
bnRUaW1lcih0aGlzKQogICAgICwgbV9yZXN0b3JlVGltZXIodGhpcykKICAgICAsIG1fdmlkZW9D
YWNoZSg0KQogICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RN
b2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
CiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CkBAIC01MzAsNiArNTM3LDkgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKIHsKICAgICBkZXRhY2hBbmRS
ZW1vdmVBbGxPYmplY3RzKCk7CiAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxiYWNr
KG51bGxwdHIpOworICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyB0aW1lcnMuCisgICAgbV9kaXNw
YXRjaENvbnRleHRMb3N0RXZlbnRUaW1lci5zdG9wKCk7CisgICAgbV9yZXN0b3JlVGltZXIuc3Rv
cCgpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2Vk
KCkKQEAgLTQwOTMsMTAgKzQxMDMsMjggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZv
cmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvc2VDb250ZXh0KCk7CisgICAgbV9jb250ZXh0TG9z
dCA9IHRydWU7CisgICAgbV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOwogCi0gICAgaWYgKG1vZGUg
PT0gUmVhbExvc3RDb250ZXh0KQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qo
MCk7CisgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworCisgICAgLy8gVGhlcmUgaXMg
bm8gZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFu
ZAorICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0
IGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQg
aW1wbGVtZW50YXRpb24gaGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBs
YXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdl
dEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCk7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXN0b3Jh
dGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCisgICAgLy8g
ZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgorICAgIG1fcmVz
dG9yZUFsbG93ZWQgPSBmYWxzZTsKKworICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2gg
b2YgdGhlIGNvbnRleHQgbG9zdCBldmVudCB0byBtYWtlIHN1cmUgdGhhdCBhbnkKKyAgICAvLyBK
YXZhU2NyaXB0IGNvZGUgb24gdGhlIHN0YWNrIGhhcyByZXR1cm5lZC4KKyAgICBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQpAQCAtNDEwNiw3ICs0MTM0LDE0
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1heWJlUmVzdG9yZUNvbnRleHQoU3ludGhldGlj
TG9zdENvbnRleHQpOworICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBpZiAo
bV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9yZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ5NTEsNDIgKzQ5ODYs
MjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCkKICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5n
ZXQoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQoKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpCiB7
Ci0gICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Ci0KLSAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmpl
Y3RzKCk7Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBm
cm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCi0gICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJv
cigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgotICAg
IC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBs
b29wIGEgcmVhc29uYWJseQotICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBh
bnkgZXhpc3RpbmcgZXJyb3JzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMKTsKLQog
ICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAi
Iik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIG1fcmVzdG9yZUFs
bG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9y
ZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250
ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNv
bnRleHQoKQogewotICAgIGlmICghbV9jb250ZXh0TG9zdCkgewotICAgICAgICBBU1NFUlQobW9k
ZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICBBU1NF
UlQobV9jb250ZXh0TG9zdCk7CisgICAgaWYgKCFtX2NvbnRleHRMb3N0KQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3Jl
ZCB1bmxlc3MgdGhlIGRlZmF1bHQKLSAgICAvLyBiZWhhdmlvciBvZiB0aGUgd2ViZ2xjb250ZXh0
bG9zdCBldmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxv
d2VkKSB7Ci0gICAgICAgIGlmIChtb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOworICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVz
dG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQorICAgIC8vIHdlYmdsY29u
dGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgorICAgIC8vCisgICAgLy8gQmVj
YXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3IgcmVhbCB2cy4gc3lu
dGhldGljIGxvc3QKKyAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZworICAgIC8vIHRoZSByZXRyeSBsb29w
IGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCisgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2Vk
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaW50IGNvbnRleHRMb3N0UmVhc29uID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsK
IApAQCAtNTAxNyw3ICs1MDM5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJl
UmVzdG9yZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGUKIAogICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KG1fYXR0cmlidXRlcywgY2FudmFzKCktPmRvY3VtZW50KCktPnZpZXcoKS0+cm9vdCgpLT5ob3N0
V2luZG93KCkpKTsKICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gUmVh
bExvc3RDb250ZXh0KQorICAgICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RD
b250ZXh0KQogICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KHNlY29uZHNC
ZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgLy8gVGhp
cyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJlc3Qgd2F5IHRvIHJlcG9ydCBp
dCB0byB0aGUgV2ViR0wgYXBwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA4YmFhZjdmYWJiOGI5N2YyNTYzNzMwNjU0MWUx
MjkyOTMyMjdlNGYyLi5mMDVhZGExZGM3OTZiNWE3MWVjYTkwMTQxZWE3ZDQzOWEzMmFiNTQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaApAQCAtMzY3LDYgKzM2NywxOSBAQCBwdWJsaWM6CiAgICAgLy8gdG8gdGhlIGJhY2stYnVm
ZmVyIG9mIG1fY29udGV4dC4KICAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVm
ZmVyOwogCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlz
IGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNlZCBib3Ro
IGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0
J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNr
LCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUg
cGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIK
KyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBl
dmVudC4KKyAgICBjbGFzcyBEaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lciA6IHB1YmxpYyBU
aW1lckJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgRGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSA6IG1fY29udGV4
dChjb250ZXh0KSB7IH0KKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgZmlyZWQo
KTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgfTsKKwog
ICAgIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciA6IHB1YmxpYyBUaW1l
ckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzdG9yZVRpbWVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkgOiBtX2NvbnRl
eHQoY29udGV4dCkgeyB9CkBAIC0zNzYsNiArMzg5LDcgQEAgcHVibGljOgogICAgIH07CiAKICAg
ICBib29sIG1fcmVzdG9yZUFsbG93ZWQ7CisgICAgRGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGlt
ZXIgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjsKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXN0b3JlVGltZXIgbV9yZXN0b3JlVGltZXI7CiAKICAgICBib29sIG1fbmVlZHNVcGRh
dGU7CkBAIC00NjAsNiArNDc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhOwogICAgIEdDM0RlbnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247CiAg
ICAgYm9vbCBtX2NvbnRleHRMb3N0OworICAgIExvc3RDb250ZXh0TW9kZSBtX2NvbnRleHRMb3N0
TW9kZTsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAK
ICAgICBib29sIG1fbGF5ZXJDbGVhcmVkOwpAQCAtNjM2LDkgKzY1MSw5IEBAIHB1YmxpYzoKICAg
ICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KTsKICAgICB2
b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CiAKLSAgICB2
b2lkIGxvc2VDb250ZXh0KCk7CisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsK
ICAgICAvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2
b2lkIG1heWJlUmVzdG9yZUNvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIG1heWJl
UmVzdG9yZUNvbnRleHQoKTsKIAogICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBw
cml2aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAogICAgIC8vIGEgU2Fm
YXJpIG9yIENocm9tZSBleHRlbnNpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDY0MTEzNzliODhmYzI3NjI5YmJjNTE1
MTc1NDgwOTgyNTI1YjIwNy4uODYzZDdiMmUxODBmYjAyODczYmVlZjJhNzRmZjYwODNkMjExN2U3
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTIyICBLZW5uZXRoIFJ1c3NlbGwgIDxr
YnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBGaXggc2VtYW50aWNzIG9mIFdFQktJVF9XRUJHTF9s
b3NlX2NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlZCBjb250ZXh0LWxvc3QgYW5kIGNvbnRleHQtbG9zdC1yZXN0b3JlZCB0ZXN0cyB0
byBsYXRlc3QKKyAgICAgICAgdmVyc2lvbnMgaW4gS2hyb25vcyByZXBvc2l0b3J5LiBVcGRhdGVk
IFdlYkdMQ29udGV4dEV2ZW50Lmh0bWwgdG8KKyAgICAgICAgbWF0Y2ggbmV3IHNlbWFudGljcy4K
KworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL1dlYkdMQ29udGV4dEV2ZW50LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRleHRFdmVudC5odG1s
OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1sb3N0LXJlc3RvcmVkLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QtcmVzdG9y
ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QuaHRtbDoK
KwogMjAxMS0xMi0yMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtRdF1bV0syXSAyIGVkaXRpbmcgdGVzdHMgaW50cm9kdWNlZCBpbiByMTAzMDczIGZh
aWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRl
eHRFdmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9XZWJH
TENvbnRleHRFdmVudC1leHBlY3RlZC50eHQKaW5kZXggNzYzMDA4ZmJjOTJkOWU1ZWUwNGRmMzQz
ZDZkMzNiMjI0NjUxNzBmYS4uNjgzZjliMDBmYjZkODMyOGYwNmM5MTEwZTFmZjU2NDUxMjEwNWFi
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvV2ViR0xDb250ZXh0
RXZlbnQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL1dl
YkdMQ29udGV4dEV2ZW50LWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDExIEBACiBUZXN0IHRoYXQg
dGhlIGV2ZW50IHBhc3NlZCB0byBhIGxpc3RlbmVyIG9mIHdlYmdsY29udGV4dGxvc3QgaXMgYSBX
ZWJHTENvbnRleHRFdmVudC4KIFBBU1MgZXZ0LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgV2ViR0xD
b250ZXh0RXZlbnRdJwogUEFTUyBldnQuc3RhdHVzTWVzc2FnZSBpcyAnJworUEFTUyBjb250ZXh0
LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgogVGVzdCB0aGF0IHRoZSBldmVudCBwYXNz
ZWQgdG8gYSBsaXN0ZW5lciBvZiB3ZWJnbGNvbnRleHRyZXN0b3JlZCBpcyBhIFdlYkdMQ29udGV4
dEV2ZW50LgogUEFTUyBldnQudG9TdHJpbmcoKSBpcyAnW29iamVjdCBXZWJHTENvbnRleHRFdmVu
dF0nCiBQQVNTIGV2dC5zdGF0dXNNZXNzYWdlIGlzICcnCi1QQVNTIGV4dGVuc2lvbi5yZXN0b3Jl
Q29udGV4dCgpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvV2ViR0xDb250ZXh0RXZlbnQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL1dlYkdMQ29udGV4dEV2ZW50Lmh0bWwKaW5kZXggMGI1NDI0MGE3
NzY3NzcyZTkzMDMwZmViMjUxMjdjZjlmNDI5YmZiNi4uNzRkMzhmNTU2YTQxZmU3YzYxZTYxNGY4
NTMyZTU3OTk0MDJmMWQ4MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvV2ViR0xDb250ZXh0RXZlbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9XZWJHTENvbnRleHRFdmVudC5odG1sCkBAIC0yNCwzMiArMjQsNDYgQEAgZnVuY3Rpb24g
Y3JlYXRlTmV3Q2FudmFzKCkKICAgICB9CiB9CiAKLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rp
b24gcnVuVGVzdDEoKQogeworICAgIGlmICh3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmsp
CisgICAgICAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayh0cnVlKTsKICAgICBjcmVh
dGVOZXdDYW52YXMoKTsKICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0
bG9zdCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgZXZ0ID0gZTsKICAgICAgICAgZGVidWcoIlRl
c3QgdGhhdCB0aGUgZXZlbnQgcGFzc2VkIHRvIGEgbGlzdGVuZXIgb2Ygd2ViZ2xjb250ZXh0bG9z
dCBpcyBhIFdlYkdMQ29udGV4dEV2ZW50LiIpCiAgICAgICAgIHNob3VsZEJlKCJldnQudG9TdHJp
bmcoKSIsICInW29iamVjdCBXZWJHTENvbnRleHRFdmVudF0nIik7CiAgICAgICAgIHNob3VsZEJl
KCJldnQuc3RhdHVzTWVzc2FnZSIsICInJyIpOworICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCB0
ZXN0IHdoZW4gZXZlbnQgZGlzcGF0Y2ggaGFzIGZpbmlzaGVkLgorICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJ1blRlc3QyKCk7CisgICAgICAgIH0sIDEpOwogICAg
IH0sIGZhbHNlKTsKICAgICBleHRlbnNpb24ubG9zZUNvbnRleHQoKTsKK30KIAotCitmdW5jdGlv
biBydW5UZXN0MigpCit7CiAgICAgY3JlYXRlTmV3Q2FudmFzKCk7CiAgICAgY2FudmFzLmFkZEV2
ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgY29udGV4dCBhZnRlciBl
dmVudCBkaXNwYXRjaCBoYXMgZmluaXNoZWQuCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgLy8gQmVjYXVzZSBjb250ZXh0IHJlc3RvcmF0aW9uIGlzIHNwZWNpZmll
ZCBhcyBiZWluZyBhc3luY2hyb25vdXMsIHdlIGNhbiBub3QgdmVyaWZ5CisgICAgICAgICAgLy8g
dGhhdCB0aGUgR0wgZXJyb3Igc3RhdGUgaXMgZW1wdHkgaGVyZS4KKyAgICAgICAgICBleHRlbnNp
b24ucmVzdG9yZUNvbnRleHQoKTsKKyAgICAgICAgfSwgMSk7CiAgICAgfSwgZmFsc2UpOwogICAg
IGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIGZ1bmN0aW9u
KGUpIHsKICAgICAgICAgZXZ0ID0gZTsKKyAgICAgICAgc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJy
b3IoKSIsICJjb250ZXh0Lk5PX0VSUk9SIik7CiAgICAgICAgIGRlYnVnKCJUZXN0IHRoYXQgdGhl
IGV2ZW50IHBhc3NlZCB0byBhIGxpc3RlbmVyIG9mIHdlYmdsY29udGV4dHJlc3RvcmVkIGlzIGEg
V2ViR0xDb250ZXh0RXZlbnQuIikKICAgICAgICAgc2hvdWxkQmUoImV2dC50b1N0cmluZygpIiwg
Iidbb2JqZWN0IFdlYkdMQ29udGV4dEV2ZW50XSciKTsKICAgICAgICAgc2hvdWxkQmUoImV2dC5z
dGF0dXNNZXNzYWdlIiwgIicnIik7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOwog
ICAgIH0sIGZhbHNlKTsKICAgICBleHRlbnNpb24ubG9zZUNvbnRleHQoKTsKLSAgICBXZWJHTFRl
c3RVdGlscy5zaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwg
ImV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIik7Ci0KLSAgICBmaW5pc2goKTsKIH0KIAogZnVu
Y3Rpb24gZmluaXNoKCkgewpAQCAtNjUsNyArNzksNyBAQCBmdW5jdGlvbiBmaW5pc2goKSB7CiA8
L3NjcmlwdD4KIAogPC9oZWFkPgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0MSgpIj4KIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KIDxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgogPGNhbnZhcyBpZD0iY2FudmFzIj4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QtZXhwZWN0ZWQudHh0CmluZGV4
IDIyZmZjNTdjNzdhYTVlOGUxMGIwZDVmNDY1ZWEzZTU2ZDg5N2QxNzYuLmI5NTY1Nzk2Y2VmODYx
Njg0NWJmMmVhZjM3OTg4ZWY2ZjU4MDY5MjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1sb3N0LWV4cGVjdGVkLnR4dApAQCAtMTUsNiArMTUs
NyBAQCBQQVNTIGdsLmlzU2hhZGVyKHNoYWRlcikgaXMgdHJ1ZQogUEFTUyBnbC5pc1RleHR1cmUo
dGV4dHVyZSkgaXMgdHJ1ZQogCiBMb3NlIGNvbnRleHQKKwogVGVzdCBsb3N0IGNvbnRleHQKIFBB
U1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlzIHRydWUKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5D
T05URVhUX0xPU1RfV0VCR0wKQEAgLTE3OCw4ICsxNzksNiBAQCBQQVNTIGdsLmlzU2hhZGVyKHNo
YWRlcikgaXMgZmFsc2UKIFBBU1MgZ2wuaXNUZXh0dXJlKHRleHR1cmUpIGlzIGZhbHNlCiBQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIAotUEFTUyBleHRlbnNpb24ubG9zZUNvbnRl
eHQoKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgotCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QtcmVzdG9yZWQtZXhwZWN0ZWQu
dHh0CmluZGV4IDU5YTFlYWMwMTQ4ZjBlYjEyNjZiYzhlZjBiMzdkZDM3NDk0NGMzOTUuLmQwMDM1
YmM1MmE1MzBjYTQ1YmYzOGFiZDk0M2IyZThhY2U3MzBjNzggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1sb3N0LXJlc3RvcmVk
LWV4cGVjdGVkLnR4dApAQCAtOSwxMCArOSwxNSBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKIFBBU1Mgc2hvdWxkQmUgMjU1LDEwLDIwCiBQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKIAotVGVzdCBsb3N0IGNvbnRleHQKIFBBU1MgZ2wuaXNDb250ZXh0TG9zdCgp
IGlzIHRydWUKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5DT05URVhUX0xPU1RfV0VCR0wKIFBB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5ibGVuZEZ1bmMoZ2wuVEVY
VFVSRV8yRCwgZ2wuVEVYVFVSRV9DVUJFX01BUCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
Ui4KK1BBU1MgY29udGV4dExvc3RFdmVudEZpcmVkIGlzIGZhbHNlCitUZXN0IGxvc3QgY29udGV4
dAorUEFTUyBjb250ZXh0TG9zdEV2ZW50RmlyZWQgaXMgZmFsc2UKK1BBU1MgZ2wuaXNDb250ZXh0
TG9zdCgpIGlzIHRydWUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogCiBQQVNT
IGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9P
UEVSQVRJT04uCiAKQEAgLTIzLDEyICsyOCwyMiBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKIFBBU1Mgc2hvdWxkQmUgMjU1LDEwLDIwCiBQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKIAotVGVzdCBsb3N0IGNvbnRleHQKIFBBU1MgZ2wuaXNDb250ZXh0TG9zdCgp
IGlzIHRydWUKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5DT05URVhUX0xPU1RfV0VCR0wKIFBB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5ibGVuZEZ1bmMoZ2wuVEVY
VFVSRV8yRCwgZ2wuVEVYVFVSRV9DVUJFX01BUCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
Ui4KK1BBU1MgY29udGV4dExvc3RFdmVudEZpcmVkIGlzIGZhbHNlCitUZXN0IGxvc3QgY29udGV4
dAorUEFTUyBjb250ZXh0TG9zdEV2ZW50RmlyZWQgaXMgZmFsc2UKK1BBU1MgZ2wuaXNDb250ZXh0
TG9zdCgpIGlzIHRydWUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogCitQQVNT
IGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Iu
CitQQVNTIGdsLmlzQ29udGV4dExvc3QoKSBpcyB0cnVlCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgZ2wuYmxlbmRGdW5jKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
Q1VCRV9NQVApIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCiBUZXN0IHJlc3RvcmVkIGNv
bnRleHQKK1BBU1MgY29udGV4dFJlc3RvcmVkRXZlbnRGaXJlZCBpcyBmYWxzZQogUEFTUyBnbC5p
c0NvbnRleHRMb3N0KCkgaXMgZmFsc2UKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgogUEFTUyBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKSB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OLgpAQCAtNDAsOCArNTUsNiBAQCBQQVNTIGdsLmJp
bmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IuCiBQQVNTIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSkgd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUi4KIFBBU1MgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlck9iamVj
dHNbMF0pIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCiAKLVBBU1MgZXh0ZW5zaW9uLnJl
c3RvcmVDb250ZXh0KCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KLQogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QtcmVzdG9yZWQuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC5odG1sCmlu
ZGV4IDkxNjJkMmM2ZjZmMDk1ZTdmZTM3Njg5MzJiOGRiNzMxNDExMWIzYzkuLjFmMzZlZGM0OTBl
ZTQ1NWU1MGIxM2ZjODJhMTVlYjBhNTMxYjUyYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC5odG1sCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC5odG1sCkBAIC0xLDUg
KzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+
CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgpAQCAtMTgs
NiArMjAsOCBAQCB2YXIgcHJvZ3JhbTsKIHZhciB0ZXh0dXJlOwogdmFyIHRleENvbG9yID0gWzI1
NSwgMTAsIDIwLCAyNTVdOwogdmFyIGFsbG93UmVzdG9yZTsKK3ZhciBjb250ZXh0TG9zdEV2ZW50
RmlyZWQ7Cit2YXIgY29udGV4dFJlc3RvcmVkRXZlbnRGaXJlZDsKIAogZnVuY3Rpb24gaW5pdCgp
CiB7CkBAIC0yOCwxNSArMzIsNyBAQCBmdW5jdGlvbiBpbml0KCkKICAgICBkZXNjcmlwdGlvbigi
VGVzdHMgYmVoYXZpb3IgdW5kZXIgYSByZXN0b3JlZCBjb250ZXh0LiIpOwogCiAgICAgc2hvdWxk
R2VuZXJhdGVHTEVycm9yID0gd3R1LnNob3VsZEdlbmVyYXRlR0xFcnJvcjsKLSAgICBydW5UZXN0
cygpOwotfQotCi1mdW5jdGlvbiBydW5UZXN0cygpCi17CiAgICAgdGVzdExvc2luZ0NvbnRleHQo
KTsKLSAgICB0ZXN0TG9zaW5nQW5kUmVzdG9yaW5nQ29udGV4dCgpOwotCi0gICAgZmluaXNoKCk7
CiB9CiAKIGZ1bmN0aW9uIHNldHVwVGVzdCgpCkBAIC02MCwzNSArNTYsNzUgQEAgZnVuY3Rpb24g
c2V0dXBUZXN0KCkKIGZ1bmN0aW9uIHRlc3RMb3NpbmdDb250ZXh0KCkKIHsKICAgICBpZiAoIXNl
dHVwVGVzdCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGZpbmlzaFRlc3QoKTsKIAogICAg
IGRlYnVnKCJUZXN0IGxvc2luZyBhIGNvbnRleHQgYW5kIGluYWJpbGl0eSB0byByZXN0b3JlIGl0
LiIpOwogCi0gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLCB0
ZXN0TG9zdENvbnRleHQpOworICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRl
eHRsb3N0IiwgZnVuY3Rpb24oZSkgeworICAgICAgIHRlc3RMb3N0Q29udGV4dChlKTsKKyAgICAg
ICAvLyByZXN0b3JlIHRoZSBjb250ZXh0IGFmdGVyIHRoaXMgZXZlbnQgaGFzIGV4aXRlZC4KKyAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgLy8gd2UgZGlkbid0IGNhbGwg
cHJldmVudCBkZWZhdWx0IHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byByZXN0b3JlIHRoZSBj
b250ZXh0CisgICAgICAgICBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLklOVkFMSURfT1BF
UkFUSU9OLCAiZXh0ZW5zaW9uLnJlc3RvcmVDb250ZXh0KCkiKTsKKyAgICAgICAgIHRlc3RMb3Np
bmdBbmRSZXN0b3JpbmdDb250ZXh0KCk7CisgICAgICAgfSwgMSk7CisgICAgfSk7CiAgICAgY2Fu
dmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIiwgdGVzdFNob3VsZE5v
dFJlc3RvcmVDb250ZXh0KTsKICAgICBhbGxvd1Jlc3RvcmUgPSBmYWxzZTsKKyAgICBjb250ZXh0
TG9zdEV2ZW50RmlyZWQgPSBmYWxzZTsKKyAgICBjb250ZXh0UmVzdG9yZWRFdmVudEZpcmVkID0g
ZmFsc2U7CiAKICAgICB0ZXN0T3JpZ2luYWxDb250ZXh0KCk7CiAgICAgZXh0ZW5zaW9uLmxvc2VD
b250ZXh0KCk7Ci0gICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5JTlZBTElEX09QRVJB
VElPTiwgImV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIik7Ci0gICAgZGVidWcoIiIpOworICAg
IC8vIFRoZSBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGltbWVkaWF0ZWx5LgorICAgIHNob3VsZEJl
VHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgpIik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdMIik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuTk9fRVJST1IiKTsKKyAgICAvLyBnbCBtZXRob2RzIHNob3VsZCBiZSBuby1vcHMKKyAg
ICBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuYmxlbmRGdW5jKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfQ1VCRV9NQVApIik7CisgICAgLy8gYnV0IHRoZSBldmVu
dCBzaG91bGQgbm90IGhhdmUgYmVlbiBmaXJlZC4KKyAgICBzaG91bGRCZUZhbHNlKCJjb250ZXh0
TG9zdEV2ZW50RmlyZWQiKTsKIH0KIAogZnVuY3Rpb24gdGVzdExvc2luZ0FuZFJlc3RvcmluZ0Nv
bnRleHQoKQogewogICAgIGlmICghc2V0dXBUZXN0KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgZmluaXNoVGVzdCgpOwogCisgICAgZGVidWcoIiIpOwogICAgIGRlYnVnKCJUZXN0IGxvc2lu
ZyBhbmQgcmVzdG9yaW5nIGEgY29udGV4dC4iKTsKIAotICAgIGNhbnZhcy5hZGRFdmVudExpc3Rl
bmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwgdGVzdExvc3RDb250ZXh0KTsKLSAgICBjYW52YXMuYWRk
RXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCB0ZXN0UmVzdG9yZWRDb250ZXh0
KTsKKyAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIGZ1bmN0
aW9uKGUpIHsKKyAgICAgIHRlc3RMb3N0Q29udGV4dChlKTsKKyAgICAgIC8vIHJlc3RvcmUgdGhl
IGNvbnRleHQgYWZ0ZXIgdGhpcyBldmVudCBoYXMgZXhpdGVkLgorICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJP
UiwgImV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIik7CisgICAgICAgIC8vIFRoZSBjb250ZXh0
IHNob3VsZCBzdGlsbCBiZSBsb3N0LiBJdCB3aWxsIG5vdCBnZXQgcmVzdG9yZWQgdW50aWwgdGhl
IAorICAgICAgICAvLyB3ZWJnbHJlc3RvcmVjb250ZXh0IGV2ZW50IGlzIGZpcmVkLgorICAgICAg
ICBzaG91bGRCZVRydWUoImdsLmlzQ29udGV4dExvc3QoKSIpOworICAgICAgICBzaG91bGRCZSgi
Z2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgICAgICAvLyBnbCBtZXRob2RzIHNo
b3VsZCBzdGlsbCBiZSBuby1vcHMKKyAgICAgICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBn
bC5OT19FUlJPUiwgImdsLmJsZW5kRnVuYyhnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX0NVQkVf
TUFQKSIpOworICAgICAgfSwgMSk7CisgICAgfSk7CisgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVu
ZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIiwgZnVuY3Rpb24oKSB7CisgICAgICB0ZXN0UmVzdG9y
ZWRDb250ZXh0KCk7CisgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfSk7CiAgICAgYWxsb3dSZXN0
b3JlID0gdHJ1ZTsKKyAgICBjb250ZXh0TG9zdEV2ZW50RmlyZWQgPSBmYWxzZTsKKyAgICBjb250
ZXh0UmVzdG9yZWRFdmVudEZpcmVkID0gZmFsc2U7CiAKICAgICB0ZXN0T3JpZ2luYWxDb250ZXh0
KCk7CiAgICAgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7Ci0gICAgc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGdsLCBnbC5OT19FUlJPUiwgImV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIik7Ci0gICAg
ZGVidWcoIiIpOworICAgIC8vIFRoZSBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGltbWVkaWF0ZWx5
LgorICAgIHNob3VsZEJlVHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgpIik7CisgICAgc2hvdWxkQmUo
ImdsLmdldEVycm9yKCkiLCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdMIik7CisgICAgc2hvdWxkQmUo
ImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICAvLyBnbCBtZXRob2RzIHNob3Vs
ZCBiZSBuby1vcHMKKyAgICBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAi
Z2wuYmxlbmRGdW5jKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfQ1VCRV9NQVApIik7CisgICAg
Ly8gYnV0IHRoZSBldmVudCBzaG91bGQgbm90IGhhdmUgYmVlbiBmaXJlZC4KKyAgICBzaG91bGRC
ZUZhbHNlKCJjb250ZXh0TG9zdEV2ZW50RmlyZWQiKTsKIH0KIAogZnVuY3Rpb24gdGVzdFJlbmRl
cmluZygpCkBAIC0xMjIsMTIgKzE1OCwxMyBAQCBmdW5jdGlvbiB0ZXN0T3JpZ2luYWxDb250ZXh0
KCkKIGZ1bmN0aW9uIHRlc3RMb3N0Q29udGV4dChlKQogewogICAgIGRlYnVnKCJUZXN0IGxvc3Qg
Y29udGV4dCIpOworICAgIHNob3VsZEJlRmFsc2UoImNvbnRleHRMb3N0RXZlbnRGaXJlZCIpOwor
ICAgIGNvbnRleHRMb3N0RXZlbnRGaXJlZCA9IHRydWU7CiAgICAgc2hvdWxkQmVUcnVlKCJnbC5p
c0NvbnRleHRMb3N0KCkiKTsKLSAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5DT05U
RVhUX0xPU1RfV0VCR0wiKTsKICAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19F
UlJPUiIpOwogICAgIGRlYnVnKCIiKTsKLSAgICBpZiAoYWxsb3dSZXN0b3JlKQotICAgICAgICBl
LnByZXZlbnREZWZhdWx0KCk7CisgICAgaWYgKGFsbG93UmVzdG9yZSkgCisgICAgICBlLnByZXZl
bnREZWZhdWx0KCk7CiB9CiAKIGZ1bmN0aW9uIHRlc3RTaG91bGROb3RSZXN0b3JlQ29udGV4dChl
KQpAQCAtMTUxLDYgKzE4OCw4IEBAIGZ1bmN0aW9uIHRlc3RSZXNvdXJjZXMoZXhwZWN0ZWQpCiBm
dW5jdGlvbiB0ZXN0UmVzdG9yZWRDb250ZXh0KCkKIHsKICAgICBkZWJ1ZygiVGVzdCByZXN0b3Jl
ZCBjb250ZXh0Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiY29udGV4dFJlc3RvcmVkRXZlbnRGaXJl
ZCIpOworICAgIGNvbnRleHRSZXN0b3JlZEV2ZW50RmlyZWQgPSB0cnVlOwogICAgIHNob3VsZEJl
RmFsc2UoImdsLmlzQ29udGV4dExvc3QoKSIpOwogICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigp
IiwgImdsLk5PX0VSUk9SIik7CiAKQEAgLTE2NCwxNSArMjAzLDYgQEAgZnVuY3Rpb24gdGVzdFJl
c3RvcmVkQ29udGV4dCgpCiAgICAgZGVidWcoIiIpOwogfQogCi1mdW5jdGlvbiBmaW5pc2goKSB7
Ci0gICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci0g
ICAgZXBpbG9ndWUub25sb2FkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cubm9u
S2hyb25vc0ZyYW1ld29ya05vdGlmeURvbmUpCi0gICAgICAgICAgICB3aW5kb3cubm9uS2hyb25v
c0ZyYW1ld29ya05vdGlmeURvbmUoKTsKLSAgICB9OwotICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGVwaWxvZ3VlKTsKLX0KIAogPC9zY3JpcHQ+CiA8L2hlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC5odG1sCmluZGV4IDVlYWQ1ZGFkOGY2
YmJlMzRlN2IyNDA5NDNlZjkyMjZmNGQ3NDk1ZmUuLjYyYmNmYjE1ZDBhNjJkNjViZDhkM2ZjODNj
NTk3ODQ2MWFkOTE4ZTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2NvbnRleHQtbG9zdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtbG9zdC5odG1sCkBAIC0xLDUgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KKzxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wt
dGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRp
bHMuanMiPjwvc2NyaXB0PgpAQCAtNDUsNiArNDcsMTAgQEAgZnVuY3Rpb24gaW5pdCgpCiAgICAg
ICAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayh0cnVlKTsKICAgICB9CiAKKyAgICAv
LyBjYWxsIHRlc3RWYWxpZENvbnRleHQoKSBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBleHRlbnNp
b24sIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB3ZSBjaGVjaworICAgIC8vIGZvciB0aGUgaXNDb250
ZXh0TG9zdCgpIG1ldGhvZCwgd2hpY2ggd2Ugd2FudCB0byBkbyByZWdhcmRsZXNzIG9mIHRoZSBl
eHRlbnNpb24ncyBwcmVzZW5jZS4KKyAgICB0ZXN0VmFsaWRDb250ZXh0KCk7CisKICAgICBmb3Ig
KHZhciBpaSA9IDA7IGlpIDwgZXh0ZW5zaW9uTmFtZXMubGVuZ3RoOyArK2lpKSB7CiAgICAgICAg
IGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbihleHRlbnNpb25OYW1lc1tpaV0pOwogICAgICAg
ICBpZiAoZXh0ZW5zaW9uKSB7CkBAIC01NCwxMiArNjAsMTIgQEAgZnVuY3Rpb24gaW5pdCgpCiAg
ICAgfQogICAgIGlmICghZXh0ZW5zaW9uKSB7CiAgICAgICAgIGRlYnVnKCJDb3VsZCBub3QgZmlu
ZCBsb3NlX2NvbnRleHQgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgbmFtZXM6ICIgKyBl
eHRlbnNpb25OYW1lcy5qb2luKCIgIikpOworICAgICAgICBmaW5pc2hUZXN0KCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2Vi
Z2xjb250ZXh0bG9zdCIsIHRlc3RMb3N0Q29udGV4dCk7CisgICAgY2FudmFzLmFkZEV2ZW50TGlz
dGVuZXIoIndlYmdsY29udGV4dGxvc3QiLCB0ZXN0TG9zdENvbnRleHQsIGZhbHNlKTsKIAotICAg
IHRlc3RWYWxpZENvbnRleHQoKTsKICAgICBsb3NlQ29udGV4dCgpOwogfQogCkBAIC02OCw5ICs3
NCw5IEBAIGZ1bmN0aW9uIGxvc2VDb250ZXh0KCkKICAgICBkZWJ1ZygiIik7CiAgICAgZGVidWco
Ikxvc2UgY29udGV4dCIpOwogCi0gICAgLy8gTm90ZTogdGhpcyB3aWxsIGNhdXNlIHRoZSBjb250
ZXh0IHRvIGJlIGxvc3QsIGFuZCB0aGUKLSAgICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IGxp
c3RlbmVyIHRvIGJlIGNhbGxlZCwgaW1tZWRpYXRlbHkuCi0gICAgc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGdsLCBnbC5OT19FUlJPUiwgImV4dGVuc2lvbi5sb3NlQ29udGV4dCgpIik7CisgICAgLy8g
Tm90ZTogdGhpcyB3aWxsIGNhdXNlIHRoZSBjb250ZXh0IHRvIGJlIGxvc3QsIGJ1dCB0aGUKKyAg
ICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IGxpc3RlbmVyIHRvIGJlIHF1ZXVlZC4KKyAgICBl
eHRlbnNpb24ubG9zZUNvbnRleHQoKTsKICAgICBkZWJ1ZygiIik7CiB9CiAKQEAgLTMwNSwxOCAr
MzExLDkgQEAgZnVuY3Rpb24gdGVzdExvc3RDb250ZXh0KCkKIAogICAgIGRlYnVnKCIiKTsKIAot
ICAgIGZpbmlzaCgpOworICAgIGZpbmlzaFRlc3QoKTsKIH0KIAotZnVuY3Rpb24gZmluaXNoKCkg
ewotICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwot
ICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93Lm5v
bktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKQotICAgICAgICAgICAgd2luZG93Lm5vbktocm9u
b3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7Ci0gICAgfTsKLSAgICBlcGlsb2d1ZS5zcmMgPSAiLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChlcGlsb2d1ZSk7Ci19CiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IG9ubG9hZD0i
aW5pdCgpIj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121165</attachid>
            <date>2012-01-04 15:01:37 -0800</date>
            <delta_ts>2012-01-04 15:20:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75053-20120104150136.patch</filename>
            <type>text/plain</type>
            <size>25041</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDg4ZDgzY2NkOWJhNzMx
NTFjMDVjY2NlMDY1MGIwMmI2OGRkMWQ4MS4uNzE1NGViODMxOGYwNzRmM2NkM2MzOGQ4OWNmNTli
NTJmNzkxMjNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTA0ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBGaXggc2VtYW50aWNzIG9m
IFdFQktJVF9XRUJHTF9sb3NlX2NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIHRv
IG1hdGNoIFdlYkdMIHNwZWMncworICAgICAgICBiZWhhdmlvcjoKKworICAgICAgICAgIC0gbG9z
ZUNvbnRleHQoKSBjYXVzZXMgdGhlIGNvbnRleHQgdG8gYmUgbG9zdCBpbW1lZGlhdGVseSwgYnV0
CisgICAgICAgICAgICB0aGUgd2ViZ2xjb250ZXh0bG9zdCBldmVudCBpc24ndCBkaXNwYXRjaGVk
IHVudGlsIEphdmFTY3JpcHQKKyAgICAgICAgICAgIHJldHVybnMuCisgICAgICAgICAgLSByZXN0
b3JlQ29udGV4dCgpIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIGRpc3BhdGNoIG9mIHRoZQorICAg
ICAgICAgICAgd2ViZ2xjb250ZXh0bG9zdCBldmVudCBoYXMgY29tcGxldGVkLCAqYW5kKiBpZiB0
aGF0IGV2ZW50IGhhbmRsZXIKKyAgICAgICAgICAgIHByZXZlbnRlZCB0aGUgZGVmYXVsdCBiZWhh
dmlvciBvZiB0aGUgZXZlbnQuCisgICAgICAgICAgLSByZXN0b3JlQ29udGV4dCgpIHBlcmZvcm1z
IGl0cyB3b3JrIGFzeW5jaHJvbm91c2x5LiBUaGUgY29udGV4dAorICAgICAgICAgICAgaXMgbm90
IHJlc3RvcmVkIHVudGlsIGp1c3QgYmVmb3JlIHRoZSB3ZWJnbGNvbnRleHRyZXN0b3JlZCBldmVu
dAorICAgICAgICAgICAgaXMgZGlzcGF0Y2hlZC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisK
IDIwMTItMDEtMDQgIElnb3IgT2xpdmVpcmEgIDxpZ29yLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CiAKICAgICAgICAgU2hhcmUgZnJhY3Rpb25hbCB0aW1lIGNvZGUgYmV0d2VlbiBBbmltYXRpb25C
YXNlIGFuZCBLZXlmcmFtZUFuaW1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggNTg1ODU3NDZiNTJiMTY2ZTc4
ZjY1ZGI3YzMyYzliNDQ1N2E2MzI2ZS4uYTdiOWNmNjQ4NjBmNWNlM2NkMjI3MWM2MGE5OWZhNDY5
Njk2Nzg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNjQsMTEgKzM2NCw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2NoYW5nZWQ7CiB9OwogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0UmVzdG9yZVRpbWVyOjpmaXJlZCgpCi17Ci0gICAgbV9jb250ZXh0LT5tYXli
ZVJlc3RvcmVDb250ZXh0KFJlYWxMb3N0Q29udGV4dCk7Ci19Ci0KIGNsYXNzIFdlYkdMUmVuZGVy
aW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4
dExvc3RDYWxsYmFjayB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0TG9zdENhbGxiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNi
KSB7IH0KQEAgLTQxMiwxMCArNDA3LDEyIEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhCiAgICAg
OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKICAgICAsIG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKHRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKICAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcih0aGlzKQorICAgICwgbV9yZXN0b3JlVGltZXIodGhpcywgJldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCkKICAgICAsIG1fdmlkZW9DYWNoZSg0KQog
ICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRo
ZXRpY0xvc3RDb250ZXh0KQogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7CiAgICAg
QVNTRVJUKG1fY29udGV4dCk7CkBAIC00MDkzLDEwICs0MDkwLDI4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9z
dENvbnRleHRNCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb3NlQ29udGV4dCgpOwor
ICAgIG1fY29udGV4dExvc3QgPSB0cnVlOworICAgIG1fY29udGV4dExvc3RNb2RlID0gbW9kZTsK
IAotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkKLSAgICAgICAgbV9yZXN0b3JlVGlt
ZXIuc3RhcnRPbmVTaG90KDApOworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKwor
ICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20gYSBHTCBp
bXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkgYmVjb21l
cyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAgLy8gdGhlIGRy
aXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3AgYSByZWFz
b25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBleGlzdGlu
ZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBp
ZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wpOworCisgICAgLy8gRG9u
J3QgYWxsb3cgcmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQgaGFzIGJv
dGggYmVlbgorICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBkZWZhdWx0IGJlaGF2aW9yIHByZXZl
bnRlZC4KKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZmFsc2U7CisKKyAgICAvLyBBbHdheXMgZGVm
ZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRvIGltcGxlbWVudAor
ICAgIC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4KKyAgICBtX2Rpc3Bh
dGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQpAQCAtNDEwNiw3ICs0MTIx
LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1heWJlUmVzdG9yZUNvbnRleHQoU3ludGhl
dGljTG9zdENvbnRleHQpOworICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBp
ZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9y
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ5NTEsNDIgKzQ5
NzMsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZl
cnRleEF0dHJpYjBTaW11bGF0aW9uKCkKICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZl
ci5nZXQoKSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQo
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudChU
aW1lcjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KikKIHsKLSAgICBtX2NvbnRleHRMb3N0ID0gdHJ1
ZTsKLQotICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQotICAgIC8vIFRoZXJlIGlz
IG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20gYSBHTCBpbXBsZW1lbnRhdGlvbiBh
bmQKLSAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkgYmVjb21lcyBOT19FUlJPUiBtaWdo
dCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCi0gICAgLy8gdGhlIGRyaXZlciBvciBjb250ZXh0
IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3AgYSByZWFzb25hYmx5Ci0gICAgLy8g
bGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBleGlzdGluZyBlcnJvcnMuCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5n
ZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wpOwotCiAgICAgUmVmUHRyPFdlYkdMQ29udGV4dEV2
ZW50PiBldmVudCA9IFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dGxvc3RFdmVudCwgZmFsc2UsIHRydWUsICIiKTsKICAgICBjYW52YXMoKS0+ZGlzcGF0
Y2hFdmVudChldmVudCk7CiAgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCk7CisgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCAm
JiBtX3Jlc3RvcmVBbGxvd2VkKQorICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qo
MCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dChUaW1lcjxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KikKIHsKLSAgICBpZiAoIW1fY29udGV4dExvc3QpIHsKLSAgICAgICAgQVNTRVJU
KG1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpOwotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAg
QVNTRVJUKG1fY29udGV4dExvc3QpOworICAgIGlmICghbV9jb250ZXh0TG9zdCkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KIAotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVz
dG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0Ci0gICAgLy8gYmVoYXZpb3Igb2YgdGhlIHdlYmdsY29u
dGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIGlmICghbV9yZXN0b3Jl
QWxsb3dlZCkgewotICAgICAgICBpZiAobW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90
IHJlc3RvcmVkIHVubGVzcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUKKyAgICAvLyB3ZWJn
bGNvbnRleHRsb3N0IGV2ZW50IHdhcyBwcmV2ZW50ZWQgZWFybGllci4KKyAgICAvLworICAgIC8v
IEJlY2F1c2Ugb2YgdGhlIHdheSBtX3Jlc3RvcmVUaW1lciBpcyBzZXQgdXAgZm9yIHJlYWwgdnMu
IHN5bnRoZXRpYyBsb3N0CisgICAgLy8gY29udGV4dCBldmVudHMsIHdlIGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgdGhpcyB0ZXN0IHNob3J0LWNpcmN1aXRpbmcKKyAgICAvLyB0aGUgcmV0cnkg
bG9vcCBmb3IgcmVhbCBjb250ZXh0IGxvc3QgZXZlbnRzLgorICAgIGlmICghbV9yZXN0b3JlQWxs
b3dlZCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGludCBjb250ZXh0TG9zdFJlYXNv
biA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCk7CiAKQEAgLTUwMTcsNyArNTAyNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpt
YXliZVJlc3RvcmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRlCiAKICAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZShtX2F0dHJpYnV0ZXMsIGNhbnZhcygpLT5kb2N1bWVudCgpLT52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpKSk7CiAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlmIChtb2RlID09
IFJlYWxMb3N0Q29udGV4dCkKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxM
b3N0Q29udGV4dCkKICAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNv
bmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIC8v
IFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBv
cnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggOGJhYWY3ZmFiYjhiOTdmMjU2MzczMDY1
NDFlMTI5MjkzMjI3ZTRmMi4uOGYxZWZkOWIwNDRiZmMwMGVhZDRhYTQ0MDlmNGEwODNiYjRmOGYx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgKQEAgLTM2NywxNiArMzY3LDE0IEBAIHB1YmxpYzoKICAgICAvLyB0byB0aGUgYmFj
ay1idWZmZXIgb2YgbV9jb250ZXh0LgogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdp
bmdCdWZmZXI7CiAKLSAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXN0b3JlVGltZXIg
OiBwdWJsaWMgVGltZXJCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFdlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpOwotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4
dDsKLSAgICB9OwotCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNl
IGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNl
ZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9u
ZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhl
IHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3Rs
eSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBi
ZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9m
IHRoZSBldmVudC4KKyAgICBUaW1lcjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IG1fZGlzcGF0Y2hD
b250ZXh0TG9zdEV2ZW50VGltZXI7CiAgICAgYm9vbCBtX3Jlc3RvcmVBbGxvd2VkOwotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dFJlc3RvcmVUaW1lciBtX3Jlc3RvcmVUaW1lcjsKKyAgICBUaW1l
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IG1fcmVzdG9yZVRpbWVyOwogCiAgICAgYm9vbCBtX25l
ZWRzVXBkYXRlOwogICAgIGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKQEAgLTQ2MCw2ICs0NTgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7CiAgICAgR0Mz
RGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKICAgICBib29sIG1fY29udGV4dExv
c3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwogICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIAogICAgIGJvb2wgbV9sYXllckNs
ZWFyZWQ7CkBAIC02MzYsOSArNjM1LDkgQEAgcHVibGljOgogICAgIGJvb2wgc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpOwogICAgIHZvaWQgcmVzdG9yZVN0YXRlc0Fm
dGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKIAotICAgIHZvaWQgbG9zZUNvbnRleHQoKTsK
KyAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVudChUaW1lcjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+Kik7CiAgICAgLy8gSGVscGVyIGZvciByZXN0b3JhdGlvbiBhZnRlciBjb250ZXh0IGxv
c3QuCi0gICAgdm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7CisgICAg
dm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KFRpbWVyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4qKTsK
IAogICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUgaW4g
dGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAogICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRl
bnNpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZTUyODE2NzRlNjE2OGQ0MDRjMmU5OTBkYTYwN2IyNjQ5NTA3NmNiMi4u
N2ZkYzkyMGZiNWIyOTYzYzUxZmZkOGZhYTgwNzc1MWEwZTFlYTQyYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDEyLTAxLTA0ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBGaXggc2VtYW50aWNzIG9mIFdFQktJVF9XRUJHTF9sb3NlX2NvbnRleHQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBjb250ZXh0
LWxvc3QgYW5kIGNvbnRleHQtbG9zdC1yZXN0b3JlZCB0ZXN0cyB0byBsYXRlc3QKKyAgICAgICAg
dmVyc2lvbnMgaW4gS2hyb25vcyByZXBvc2l0b3J5LiBVcGRhdGVkIFdlYkdMQ29udGV4dEV2ZW50
Lmh0bWwgdG8KKyAgICAgICAgbWF0Y2ggbmV3IHNlbWFudGljcy4KKworICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL1dlYkdMQ29udGV4dEV2ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRleHRFdmVudC5odG1sOgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1sb3N0LXJlc3RvcmVkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QtcmVzdG9yZWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QuaHRtbDoKKwogMjAxMi0wMS0wNCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gVXBk
YXRlIENocm9taXVtIHBvcnQgdGVzdCBleHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRleHRFdmVudC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRleHRFdmVudC1leHBlY3RlZC50
eHQKaW5kZXggNzYzMDA4ZmJjOTJkOWU1ZWUwNGRmMzQzZDZkMzNiMjI0NjUxNzBmYS4uNjgzZjli
MDBmYjZkODMyOGYwNmM5MTEwZTFmZjU2NDUxMjEwNWFiYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvV2ViR0xDb250ZXh0RXZlbnQtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL1dlYkdMQ29udGV4dEV2ZW50LWV4cGVjdGVk
LnR4dApAQCAtMSw4ICsxLDExIEBACiBUZXN0IHRoYXQgdGhlIGV2ZW50IHBhc3NlZCB0byBhIGxp
c3RlbmVyIG9mIHdlYmdsY29udGV4dGxvc3QgaXMgYSBXZWJHTENvbnRleHRFdmVudC4KIFBBU1Mg
ZXZ0LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgV2ViR0xDb250ZXh0RXZlbnRdJwogUEFTUyBldnQu
c3RhdHVzTWVzc2FnZSBpcyAnJworUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5O
T19FUlJPUgogVGVzdCB0aGF0IHRoZSBldmVudCBwYXNzZWQgdG8gYSBsaXN0ZW5lciBvZiB3ZWJn
bGNvbnRleHRyZXN0b3JlZCBpcyBhIFdlYkdMQ29udGV4dEV2ZW50LgogUEFTUyBldnQudG9TdHJp
bmcoKSBpcyAnW29iamVjdCBXZWJHTENvbnRleHRFdmVudF0nCiBQQVNTIGV2dC5zdGF0dXNNZXNz
YWdlIGlzICcnCi1QQVNTIGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvV2Vi
R0xDb250ZXh0RXZlbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL1dlYkdM
Q29udGV4dEV2ZW50Lmh0bWwKaW5kZXggMGI1NDI0MGE3NzY3NzcyZTkzMDMwZmViMjUxMjdjZjlm
NDI5YmZiNi4uNzRkMzhmNTU2YTQxZmU3YzYxZTYxNGY4NTMyZTU3OTk0MDJmMWQ4MyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvV2ViR0xDb250ZXh0RXZlbnQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9XZWJHTENvbnRleHRFdmVudC5o
dG1sCkBAIC0yNCwzMiArMjQsNDYgQEAgZnVuY3Rpb24gY3JlYXRlTmV3Q2FudmFzKCkKICAgICB9
CiB9CiAKLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gcnVuVGVzdDEoKQogeworICAgIGlm
ICh3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmspCisgICAgICAgIHdpbmRvdy5pbml0Tm9u
S2hyb25vc0ZyYW1ld29yayh0cnVlKTsKICAgICBjcmVhdGVOZXdDYW52YXMoKTsKICAgICBjYW52
YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIGZ1bmN0aW9uKGUpIHsKICAg
ICAgICAgZXZ0ID0gZTsKICAgICAgICAgZGVidWcoIlRlc3QgdGhhdCB0aGUgZXZlbnQgcGFzc2Vk
IHRvIGEgbGlzdGVuZXIgb2Ygd2ViZ2xjb250ZXh0bG9zdCBpcyBhIFdlYkdMQ29udGV4dEV2ZW50
LiIpCiAgICAgICAgIHNob3VsZEJlKCJldnQudG9TdHJpbmcoKSIsICInW29iamVjdCBXZWJHTENv
bnRleHRFdmVudF0nIik7CiAgICAgICAgIHNob3VsZEJlKCJldnQuc3RhdHVzTWVzc2FnZSIsICIn
JyIpOworICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCB0ZXN0IHdoZW4gZXZlbnQgZGlzcGF0Y2gg
aGFzIGZpbmlzaGVkLgorICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
IHJ1blRlc3QyKCk7CisgICAgICAgIH0sIDEpOwogICAgIH0sIGZhbHNlKTsKICAgICBleHRlbnNp
b24ubG9zZUNvbnRleHQoKTsKK30KIAotCitmdW5jdGlvbiBydW5UZXN0MigpCit7CiAgICAgY3Jl
YXRlTmV3Q2FudmFzKCk7CiAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4
dGxvc3QiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgY29udGV4dCBhZnRlciBldmVudCBkaXNwYXRjaCBoYXMgZmluaXNo
ZWQuCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgLy8gQmVjYXVz
ZSBjb250ZXh0IHJlc3RvcmF0aW9uIGlzIHNwZWNpZmllZCBhcyBiZWluZyBhc3luY2hyb25vdXMs
IHdlIGNhbiBub3QgdmVyaWZ5CisgICAgICAgICAgLy8gdGhhdCB0aGUgR0wgZXJyb3Igc3RhdGUg
aXMgZW1wdHkgaGVyZS4KKyAgICAgICAgICBleHRlbnNpb24ucmVzdG9yZUNvbnRleHQoKTsKKyAg
ICAgICAgfSwgMSk7CiAgICAgfSwgZmFsc2UpOwogICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVy
KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgZXZ0ID0gZTsK
KyAgICAgICAgc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0Lk5PX0VSUk9S
Iik7CiAgICAgICAgIGRlYnVnKCJUZXN0IHRoYXQgdGhlIGV2ZW50IHBhc3NlZCB0byBhIGxpc3Rl
bmVyIG9mIHdlYmdsY29udGV4dHJlc3RvcmVkIGlzIGEgV2ViR0xDb250ZXh0RXZlbnQuIikKICAg
ICAgICAgc2hvdWxkQmUoImV2dC50b1N0cmluZygpIiwgIidbb2JqZWN0IFdlYkdMQ29udGV4dEV2
ZW50XSciKTsKICAgICAgICAgc2hvdWxkQmUoImV2dC5zdGF0dXNNZXNzYWdlIiwgIicnIik7CisK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOwogICAgIH0sIGZhbHNlKTsKICAgICBleHRl
bnNpb24ubG9zZUNvbnRleHQoKTsKLSAgICBXZWJHTFRlc3RVdGlscy5zaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImV4dGVuc2lvbi5yZXN0b3JlQ29udGV4
dCgpIik7Ci0KLSAgICBmaW5pc2goKTsKIH0KIAogZnVuY3Rpb24gZmluaXNoKCkgewpAQCAtNjUs
NyArNzksNyBAQCBmdW5jdGlvbiBmaW5pc2goKSB7CiA8L3NjcmlwdD4KIAogPC9oZWFkPgotPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPGJvZHkgb25sb2FkPSJydW5UZXN0MSgpIj4KIDxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPGNhbnZh
cyBpZD0iY2FudmFzIj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2NvbnRleHQtbG9zdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jb250ZXh0LWxvc3QtZXhwZWN0ZWQudHh0CmluZGV4IDIyZmZjNTdjNzdhYTVlOGUxMGIwZDVm
NDY1ZWEzZTU2ZDg5N2QxNzYuLmI5NTY1Nzk2Y2VmODYxNjg0NWJmMmVhZjM3OTg4ZWY2ZjU4MDY5
MjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9z
dC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4
dC1sb3N0LWV4cGVjdGVkLnR4dApAQCAtMTUsNiArMTUsNyBAQCBQQVNTIGdsLmlzU2hhZGVyKHNo
YWRlcikgaXMgdHJ1ZQogUEFTUyBnbC5pc1RleHR1cmUodGV4dHVyZSkgaXMgdHJ1ZQogCiBMb3Nl
IGNvbnRleHQKKwogVGVzdCBsb3N0IGNvbnRleHQKIFBBU1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlz
IHRydWUKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5DT05URVhUX0xPU1RfV0VCR0wKQEAgLTE3
OCw4ICsxNzksNiBAQCBQQVNTIGdsLmlzU2hhZGVyKHNoYWRlcikgaXMgZmFsc2UKIFBBU1MgZ2wu
aXNUZXh0dXJlKHRleHR1cmUpIGlzIGZhbHNlCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKIAotUEFTUyBleHRlbnNpb24ubG9zZUNvbnRleHQoKSB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SLgotCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09N
UExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
bG9zdC1yZXN0b3JlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jb250ZXh0LWxvc3QtcmVzdG9yZWQtZXhwZWN0ZWQudHh0CmluZGV4IDU5YTFlYWMwMTQ4ZjBl
YjEyNjZiYzhlZjBiMzdkZDM3NDk0NGMzOTUuLmQwMDM1YmM1MmE1MzBjYTQ1YmYzOGFiZDk0M2Iy
ZThhY2U3MzBjNzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtbG9zdC1yZXN0b3JlZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1sb3N0LXJlc3RvcmVkLWV4cGVjdGVkLnR4dApAQCAtOSwxMCAr
OSwxNSBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1Mgc2hvdWxkQmUg
MjU1LDEwLDIwCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIAotVGVzdCBsb3N0
IGNvbnRleHQKIFBBU1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlzIHRydWUKIFBBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5DT05URVhUX0xPU1RfV0VCR0wKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5ibGVuZEZ1bmMoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9DVUJF
X01BUCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgY29udGV4dExvc3RFdmVu
dEZpcmVkIGlzIGZhbHNlCitUZXN0IGxvc3QgY29udGV4dAorUEFTUyBjb250ZXh0TG9zdEV2ZW50
RmlyZWQgaXMgZmFsc2UKK1BBU1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlzIHRydWUKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogCiBQQVNTIGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4
dCgpIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04uCiAKQEAgLTIzLDEyICsy
OCwyMiBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1Mgc2hvdWxkQmUg
MjU1LDEwLDIwCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIAotVGVzdCBsb3N0
IGNvbnRleHQKIFBBU1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlzIHRydWUKIFBBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5DT05URVhUX0xPU1RfV0VCR0wKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5ibGVuZEZ1bmMoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9DVUJF
X01BUCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgY29udGV4dExvc3RFdmVu
dEZpcmVkIGlzIGZhbHNlCitUZXN0IGxvc3QgY29udGV4dAorUEFTUyBjb250ZXh0TG9zdEV2ZW50
RmlyZWQgaXMgZmFsc2UKK1BBU1MgZ2wuaXNDb250ZXh0TG9zdCgpIGlzIHRydWUKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogCitQQVNTIGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4
dCgpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmlzQ29udGV4dExvc3Qo
KSBpcyB0cnVlCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuYmxl
bmRGdW5jKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfQ1VCRV9NQVApIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IuCiBUZXN0IHJlc3RvcmVkIGNvbnRleHQKK1BBU1MgY29udGV4dFJlc3Rv
cmVkRXZlbnRGaXJlZCBpcyBmYWxzZQogUEFTUyBnbC5pc0NvbnRleHRMb3N0KCkgaXMgZmFsc2UK
IFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBnbC5iaW5kVGV4dHVyZShn
bC5URVhUVVJFXzJELCB0ZXh0dXJlKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFU
SU9OLgpAQCAtNDAsOCArNTUsNiBAQCBQQVNTIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQs
IHRleHR1cmUpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCiBQQVNTIGdsLnVzZVByb2dy
YW0ocHJvZ3JhbSkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KIFBBU1MgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlck9iamVjdHNbMF0pIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IuCiAKLVBBU1MgZXh0ZW5zaW9uLnJlc3RvcmVDb250ZXh0KCkgd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUi4KLQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jb250ZXh0LWxvc3QtcmVzdG9yZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2NvbnRleHQtbG9zdC1yZXN0b3JlZC5odG1sCmluZGV4IDkxNjJkMmM2ZjZmMDk1ZTdmZTM3
Njg5MzJiOGRiNzMxNDExMWIzYzkuLjZlMmQ2ZmM5OGM2YmFlOTAyZTEzMjExNzg1MWNmNmI0YTg1
Y2NmMmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
bG9zdC1yZXN0b3JlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtbG9zdC1yZXN0b3JlZC5odG1sCkBAIC0xLDUgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4K
KzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmds
LXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgpAQCAtMTgsNiArMjAsOCBAQCB2YXIgcHJvZ3JhbTsK
IHZhciB0ZXh0dXJlOwogdmFyIHRleENvbG9yID0gWzI1NSwgMTAsIDIwLCAyNTVdOwogdmFyIGFs
bG93UmVzdG9yZTsKK3ZhciBjb250ZXh0TG9zdEV2ZW50RmlyZWQ7Cit2YXIgY29udGV4dFJlc3Rv
cmVkRXZlbnRGaXJlZDsKIAogZnVuY3Rpb24gaW5pdCgpCiB7CkBAIC0yOCwxNSArMzIsNyBAQCBm
dW5jdGlvbiBpbml0KCkKICAgICBkZXNjcmlwdGlvbigiVGVzdHMgYmVoYXZpb3IgdW5kZXIgYSBy
ZXN0b3JlZCBjb250ZXh0LiIpOwogCiAgICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yID0gd3R1LnNo
b3VsZEdlbmVyYXRlR0xFcnJvcjsKLSAgICBydW5UZXN0cygpOwotfQotCi1mdW5jdGlvbiBydW5U
ZXN0cygpCi17CiAgICAgdGVzdExvc2luZ0NvbnRleHQoKTsKLSAgICB0ZXN0TG9zaW5nQW5kUmVz
dG9yaW5nQ29udGV4dCgpOwotCi0gICAgZmluaXNoKCk7CiB9CiAKIGZ1bmN0aW9uIHNldHVwVGVz
dCgpCkBAIC02MCwzNSArNTYsNzUgQEAgZnVuY3Rpb24gc2V0dXBUZXN0KCkKIGZ1bmN0aW9uIHRl
c3RMb3NpbmdDb250ZXh0KCkKIHsKICAgICBpZiAoIXNldHVwVGVzdCgpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIGZpbmlzaFRlc3QoKTsKIAogICAgIGRlYnVnKCJUZXN0IGxvc2luZyBhIGNv
bnRleHQgYW5kIGluYWJpbGl0eSB0byByZXN0b3JlIGl0LiIpOwogCi0gICAgY2FudmFzLmFkZEV2
ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLCB0ZXN0TG9zdENvbnRleHQpOworICAgIGNh
bnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwgZnVuY3Rpb24oZSkgewor
ICAgICAgIHRlc3RMb3N0Q29udGV4dChlKTsKKyAgICAgICAvLyByZXN0b3JlIHRoZSBjb250ZXh0
IGFmdGVyIHRoaXMgZXZlbnQgaGFzIGV4aXRlZC4KKyAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgLy8gd2UgZGlkbid0IGNhbGwgcHJldmVudCBkZWZhdWx0IHNvIHdlIHNo
b3VsZCBub3QgYmUgYWJsZSB0byByZXN0b3JlIHRoZSBjb250ZXh0CisgICAgICAgICBzaG91bGRH
ZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLklOVkFMSURfT1BFUkFUSU9OLCAiZXh0ZW5zaW9uLnJlc3Rv
cmVDb250ZXh0KCkiKTsKKyAgICAgICAgIHRlc3RMb3NpbmdBbmRSZXN0b3JpbmdDb250ZXh0KCk7
CisgICAgICAgfSwgMSk7CisgICAgfSk7CiAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndl
YmdsY29udGV4dHJlc3RvcmVkIiwgdGVzdFNob3VsZE5vdFJlc3RvcmVDb250ZXh0KTsKICAgICBh
bGxvd1Jlc3RvcmUgPSBmYWxzZTsKKyAgICBjb250ZXh0TG9zdEV2ZW50RmlyZWQgPSBmYWxzZTsK
KyAgICBjb250ZXh0UmVzdG9yZWRFdmVudEZpcmVkID0gZmFsc2U7CiAKICAgICB0ZXN0T3JpZ2lu
YWxDb250ZXh0KCk7CiAgICAgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7Ci0gICAgc2hvdWxkR2Vu
ZXJhdGVHTEVycm9yKGdsLCBnbC5JTlZBTElEX09QRVJBVElPTiwgImV4dGVuc2lvbi5yZXN0b3Jl
Q29udGV4dCgpIik7Ci0gICAgZGVidWcoIiIpOworICAgIC8vIFRoZSBjb250ZXh0IHNob3VsZCBi
ZSBsb3N0IGltbWVkaWF0ZWx5LgorICAgIHNob3VsZEJlVHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgp
Iik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdM
Iik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICAv
LyBnbCBtZXRob2RzIHNob3VsZCBiZSBuby1vcHMKKyAgICBzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Z2wsIGdsLk5PX0VSUk9SLCAiZ2wuYmxlbmRGdW5jKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
Q1VCRV9NQVApIik7CisgICAgLy8gYnV0IHRoZSBldmVudCBzaG91bGQgbm90IGhhdmUgYmVlbiBm
aXJlZC4KKyAgICBzaG91bGRCZUZhbHNlKCJjb250ZXh0TG9zdEV2ZW50RmlyZWQiKTsKIH0KIAog
ZnVuY3Rpb24gdGVzdExvc2luZ0FuZFJlc3RvcmluZ0NvbnRleHQoKQogewogICAgIGlmICghc2V0
dXBUZXN0KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZmluaXNoVGVzdCgpOwogCisgICAg
ZGVidWcoIiIpOwogICAgIGRlYnVnKCJUZXN0IGxvc2luZyBhbmQgcmVzdG9yaW5nIGEgY29udGV4
dC4iKTsKIAotICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iiwg
dGVzdExvc3RDb250ZXh0KTsKLSAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250
ZXh0cmVzdG9yZWQiLCB0ZXN0UmVzdG9yZWRDb250ZXh0KTsKKyAgICBjYW52YXMuYWRkRXZlbnRM
aXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgIHRlc3RMb3N0
Q29udGV4dChlKTsKKyAgICAgIC8vIHJlc3RvcmUgdGhlIGNvbnRleHQgYWZ0ZXIgdGhpcyBldmVu
dCBoYXMgZXhpdGVkLgorICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgc2hv
dWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImV4dGVuc2lvbi5yZXN0b3JlQ29u
dGV4dCgpIik7CisgICAgICAgIC8vIFRoZSBjb250ZXh0IHNob3VsZCBzdGlsbCBiZSBsb3N0LiBJ
dCB3aWxsIG5vdCBnZXQgcmVzdG9yZWQgdW50aWwgdGhlIAorICAgICAgICAvLyB3ZWJnbHJlc3Rv
cmVjb250ZXh0IGV2ZW50IGlzIGZpcmVkLgorICAgICAgICBzaG91bGRCZVRydWUoImdsLmlzQ29u
dGV4dExvc3QoKSIpOworICAgICAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19F
UlJPUiIpOworICAgICAgICAvLyBnbCBtZXRob2RzIHNob3VsZCBzdGlsbCBiZSBuby1vcHMKKyAg
ICAgICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmJsZW5kRnVu
YyhnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX0NVQkVfTUFQKSIpOworICAgICAgfSwgMSk7Cisg
ICAgfSk7CisgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVk
IiwgZnVuY3Rpb24oKSB7CisgICAgICB0ZXN0UmVzdG9yZWRDb250ZXh0KCk7CisgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgfSk7CiAgICAgYWxsb3dSZXN0b3JlID0gdHJ1ZTsKKyAgICBjb250ZXh0
TG9zdEV2ZW50RmlyZWQgPSBmYWxzZTsKKyAgICBjb250ZXh0UmVzdG9yZWRFdmVudEZpcmVkID0g
ZmFsc2U7CiAKICAgICB0ZXN0T3JpZ2luYWxDb250ZXh0KCk7CiAgICAgZXh0ZW5zaW9uLmxvc2VD
b250ZXh0KCk7Ci0gICAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImV4
dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpIik7Ci0gICAgZGVidWcoIiIpOworICAgIC8vIFRoZSBj
b250ZXh0IHNob3VsZCBiZSBsb3N0IGltbWVkaWF0ZWx5LgorICAgIHNob3VsZEJlVHJ1ZSgiZ2wu
aXNDb250ZXh0TG9zdCgpIik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuQ09O
VEVYVF9MT1NUX1dFQkdMIik7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9f
RVJST1IiKTsKKyAgICAvLyBnbCBtZXRob2RzIHNob3VsZCBiZSBuby1vcHMKKyAgICBzaG91bGRH
ZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuYmxlbmRGdW5jKGdsLlRFWFRVUkVf
MkQsIGdsLlRFWFRVUkVfQ1VCRV9NQVApIik7CisgICAgLy8gYnV0IHRoZSBldmVudCBzaG91bGQg
bm90IGhhdmUgYmVlbiBmaXJlZC4KKyAgICBzaG91bGRCZUZhbHNlKCJjb250ZXh0TG9zdEV2ZW50
RmlyZWQiKTsKIH0KIAogZnVuY3Rpb24gdGVzdFJlbmRlcmluZygpCkBAIC0xMjIsMTIgKzE1OCwx
MyBAQCBmdW5jdGlvbiB0ZXN0T3JpZ2luYWxDb250ZXh0KCkKIGZ1bmN0aW9uIHRlc3RMb3N0Q29u
dGV4dChlKQogewogICAgIGRlYnVnKCJUZXN0IGxvc3QgY29udGV4dCIpOworICAgIHNob3VsZEJl
RmFsc2UoImNvbnRleHRMb3N0RXZlbnRGaXJlZCIpOworICAgIGNvbnRleHRMb3N0RXZlbnRGaXJl
ZCA9IHRydWU7CiAgICAgc2hvdWxkQmVUcnVlKCJnbC5pc0NvbnRleHRMb3N0KCkiKTsKLSAgICBz
aG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5DT05URVhUX0xPU1RfV0VCR0wiKTsKICAgICBz
aG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOwogICAgIGRlYnVnKCIiKTsK
ICAgICBpZiAoYWxsb3dSZXN0b3JlKQotICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICBlLnByZXZlbnREZWZhdWx0KCk7CiB9CiAKIGZ1bmN0aW9uIHRlc3RTaG91bGROb3RSZXN0b3Jl
Q29udGV4dChlKQpAQCAtMTUxLDYgKzE4OCw4IEBAIGZ1bmN0aW9uIHRlc3RSZXNvdXJjZXMoZXhw
ZWN0ZWQpCiBmdW5jdGlvbiB0ZXN0UmVzdG9yZWRDb250ZXh0KCkKIHsKICAgICBkZWJ1ZygiVGVz
dCByZXN0b3JlZCBjb250ZXh0Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiY29udGV4dFJlc3RvcmVk
RXZlbnRGaXJlZCIpOworICAgIGNvbnRleHRSZXN0b3JlZEV2ZW50RmlyZWQgPSB0cnVlOwogICAg
IHNob3VsZEJlRmFsc2UoImdsLmlzQ29udGV4dExvc3QoKSIpOwogICAgIHNob3VsZEJlKCJnbC5n
ZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CiAKQEAgLTE2NCwxNSArMjAzLDYgQEAgZnVuY3Rp
b24gdGVzdFJlc3RvcmVkQ29udGV4dCgpCiAgICAgZGVidWcoIiIpOwogfQogCi1mdW5jdGlvbiBm
aW5pc2goKSB7Ci0gICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2Ny
aXB0Iik7Ci0gICAgZXBpbG9ndWUub25sb2FkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3
aW5kb3cubm9uS2hyb25vc0ZyYW1ld29ya05vdGlmeURvbmUpCi0gICAgICAgICAgICB3aW5kb3cu
bm9uS2hyb25vc0ZyYW1ld29ya05vdGlmeURvbmUoKTsKLSAgICB9OwotICAgIGVwaWxvZ3VlLnNy
YyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKLSAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKLX0KIAogPC9zY3JpcHQ+CiA8L2hlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWxvc3QuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtbG9zdC5odG1sCmluZGV4IDVl
YWQ1ZGFkOGY2YmJlMzRlN2IyNDA5NDNlZjkyMjZmNGQ3NDk1ZmUuLjYyYmNmYjE1ZDBhNjJkNjVi
ZDhkM2ZjODNjNTk3ODQ2MWFkOTE4ZTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NvbnRleHQtbG9zdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvbnRleHQtbG9zdC5odG1sCkBAIC0xLDUgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4K
KzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmds
LXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgpAQCAtNDUsNiArNDcsMTAgQEAgZnVuY3Rpb24gaW5p
dCgpCiAgICAgICAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayh0cnVlKTsKICAgICB9
CiAKKyAgICAvLyBjYWxsIHRlc3RWYWxpZENvbnRleHQoKSBiZWZvcmUgY2hlY2tpbmcgZm9yIHRo
ZSBleHRlbnNpb24sIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB3ZSBjaGVjaworICAgIC8vIGZvciB0
aGUgaXNDb250ZXh0TG9zdCgpIG1ldGhvZCwgd2hpY2ggd2Ugd2FudCB0byBkbyByZWdhcmRsZXNz
IG9mIHRoZSBleHRlbnNpb24ncyBwcmVzZW5jZS4KKyAgICB0ZXN0VmFsaWRDb250ZXh0KCk7CisK
ICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZXh0ZW5zaW9uTmFtZXMubGVuZ3RoOyArK2lpKSB7
CiAgICAgICAgIGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbihleHRlbnNpb25OYW1lc1tpaV0p
OwogICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7CkBAIC01NCwxMiArNjAsMTIgQEAgZnVuY3Rpb24g
aW5pdCgpCiAgICAgfQogICAgIGlmICghZXh0ZW5zaW9uKSB7CiAgICAgICAgIGRlYnVnKCJDb3Vs
ZCBub3QgZmluZCBsb3NlX2NvbnRleHQgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgbmFt
ZXM6ICIgKyBleHRlbnNpb25OYW1lcy5qb2luKCIgIikpOworICAgICAgICBmaW5pc2hUZXN0KCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjYW52YXMuYWRkRXZlbnRMaXN0
ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIHRlc3RMb3N0Q29udGV4dCk7CisgICAgY2FudmFzLmFk
ZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLCB0ZXN0TG9zdENvbnRleHQsIGZhbHNl
KTsKIAotICAgIHRlc3RWYWxpZENvbnRleHQoKTsKICAgICBsb3NlQ29udGV4dCgpOwogfQogCkBA
IC02OCw5ICs3NCw5IEBAIGZ1bmN0aW9uIGxvc2VDb250ZXh0KCkKICAgICBkZWJ1ZygiIik7CiAg
ICAgZGVidWcoIkxvc2UgY29udGV4dCIpOwogCi0gICAgLy8gTm90ZTogdGhpcyB3aWxsIGNhdXNl
IHRoZSBjb250ZXh0IHRvIGJlIGxvc3QsIGFuZCB0aGUKLSAgICAvLyB3ZWJnbGNvbnRleHRsb3N0
IGV2ZW50IGxpc3RlbmVyIHRvIGJlIGNhbGxlZCwgaW1tZWRpYXRlbHkuCi0gICAgc2hvdWxkR2Vu
ZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImV4dGVuc2lvbi5sb3NlQ29udGV4dCgpIik7
CisgICAgLy8gTm90ZTogdGhpcyB3aWxsIGNhdXNlIHRoZSBjb250ZXh0IHRvIGJlIGxvc3QsIGJ1
dCB0aGUKKyAgICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IGxpc3RlbmVyIHRvIGJlIHF1ZXVl
ZC4KKyAgICBleHRlbnNpb24ubG9zZUNvbnRleHQoKTsKICAgICBkZWJ1ZygiIik7CiB9CiAKQEAg
LTMwNSwxOCArMzExLDkgQEAgZnVuY3Rpb24gdGVzdExvc3RDb250ZXh0KCkKIAogICAgIGRlYnVn
KCIiKTsKIAotICAgIGZpbmlzaCgpOworICAgIGZpbmlzaFRlc3QoKTsKIH0KIAotZnVuY3Rpb24g
ZmluaXNoKCkgewotICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNj
cmlwdCIpOwotICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAo
d2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKQotICAgICAgICAgICAgd2luZG93
Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7Ci0gICAgfTsKLSAgICBlcGlsb2d1ZS5z
cmMgPSAiLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7Ci0gICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChlcGlsb2d1ZSk7Ci19CiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5
IG9ubG9hZD0iaW5pdCgpIj4K
</data>
<flag name="review"
          id="121580"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>