<?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>21054</bug_id>
          
          <creation_ts>2008-09-24 04:57:50 -0700</creation_ts>
          <short_desc>Construction of certain DOM objects is heavily regressed by r36675</short_desc>
          <delta_ts>2008-09-26 04:56:11 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://nerget.com/jstests/performance/domtest.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>gsherloc</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92504</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-24 04:57:50 -0700</bug_when>
    <thetext>While Celtic Kane is not a very good benchmark, we should investigate why the ajax tests now take twice as long to run on ToT as they did vs. pre-SFX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92541</commentid>
    <comment_count>1</comment_count>
    <who name="Gavin Sherlock">gsherloc</who>
    <bug_when>2008-09-24 09:33:28 -0700</bug_when>
    <thetext>It&apos;s a regression even since Safari 3.1.2 for the ajax tests.  On ToT I get ~80ms, while on 3.1.2 I get 43ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92659</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-24 20:16:35 -0700</bug_when>
    <thetext>Have made a better test (see updated link)

Shark shows this to be StructureID churn </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92663</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-24 21:54:03 -0700</bug_when>
    <thetext>Okay in shark a couple of functions look to be of interest:
StructureID::~StructureID takes 14% of total time, which implies quite a bit of structureid thrashing
StructureID::addPropertyTransition which takes 23% of total time which is due to putDirect(&quot;length&quot;,..)

It should be possible to avoid both of these by initialising these objects with a single shared instance of the StructureID with just a length property.  This should hopefully avoid the addPropertyTransition cost, the StructureID alloc and dealloc cost, and reduce the cost of the setting the length property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92664</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-24 22:08:36 -0700</bug_when>
    <thetext>Progress!

The problem is that JSDOMWindowBase continually recreates the constructor objects for Image, HTMLOptionElement, XHR and Audio, which is basically wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92696</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-25 03:39:50 -0700</bug_when>
    <thetext>It turns out that this bug is actually a correctness bug as well, eg. Image.foo = &quot;bar; alert(Image.foo) will alert undefined

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92701</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-25 04:08:51 -0700</bug_when>
    <thetext>As discussed on IRC, this code is also crashy:

http://crypto.stanford.edu/~abarth/research/webkit/null-frame/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92741</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-25 09:52:02 -0700</bug_when>
    <thetext>I&apos;ll help fix this. Just let me know what you&apos;d like me to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92902</commentid>
    <comment_count>8</comment_count>
      <attachid>23847</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-26 04:14:25 -0700</bug_when>
    <thetext>Created attachment 23847
patch to fixerate this issue.

Fix the bug.

Doesn&apos;t do the refactoring sam requested as the caching/retrieval function requires knowledge of JSDomWindow and DOMWindow, swhich prevents it from being included in JSDOMBinding.h (it needs to be in the header due to it being a template function)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92903</commentid>
    <comment_count>9</comment_count>
      <attachid>23847</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-26 04:18:11 -0700</bug_when>
    <thetext>Comment on attachment 23847
patch to fixerate this issue.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92906</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-26 04:56:11 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/dom/constructors-cached-expected.txt
	A	LayoutTests/fast/dom/constructors-cached-navigate-expected.txt
	A	LayoutTests/fast/dom/constructors-cached-navigate.html
	A	LayoutTests/fast/dom/constructors-cached.html
	A	LayoutTests/fast/dom/resources/constructors-cached-navigate.js
	A	LayoutTests/fast/dom/resources/constructors-cached.js
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/JSAudioConstructor.cpp
	M	WebCore/bindings/js/JSAudioConstructor.h
	M	WebCore/bindings/js/JSDOMWindowBase.cpp
	M	WebCore/bindings/js/JSDOMWindowBase.h
	M	WebCore/bindings/js/JSHTMLOptionElementConstructor.cpp
	M	WebCore/bindings/js/JSHTMLOptionElementConstructor.h
	M	WebCore/bindings/js/JSImageConstructor.cpp
	M	WebCore/bindings/js/JSImageConstructor.h
	M	WebCore/bindings/js/JSMessageChannelConstructor.cpp
	M	WebCore/bindings/js/JSMessageChannelConstructor.h
	M	WebCore/bindings/js/JSXMLHttpRequestConstructor.cpp
	M	WebCore/bindings/js/JSXMLHttpRequestConstructor.h
Committed r36954

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23847</attachid>
            <date>2008-09-26 04:14:25 -0700</date>
            <delta_ts>2008-09-26 04:18:11 -0700</delta_ts>
            <desc>patch to fixerate this issue.</desc>
            <filename>object-creation.patch</filename>
            <type>text/plain</type>
            <size>27207</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhNmYwYjhmLi44ZWUwODZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDgtMDkt
MjYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjEwNTQ6IENvbnN0cnVjdGlvbiBvZiBj
ZXJ0YWluIERPTSBvYmplY3RzIGlzIGhlYXZpbHkgcmVncmVzc2VkIGJ5IHIzNjY3NQorICAgICAg
ICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDU0PgorCisgICAg
ICAgIFRlc3RzIHRvIGVuc3VyZSB0aGF0IHdlIGNvcnJlY3RseSBvbmx5IGhhdmUgc2luZ2xlIGlu
c3RhbmNlcyBvZiB0aGUKKyAgICAgICAgc3BlY2lhbCBjYXNlZCBJbWFnZSwgTWVzc2FnZUNoYW5u
ZWwsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsIGFuZCBBdWRpbworICAgICAgICBjb25zdHJ1Y3Rv
cnMuICBXZSBhbHNvIHRlc3QgdGhhdCB3ZSBkb24ndCBleHBvc2UgdGhlIGNhY2hlZCBvYmplY3Rz
CisgICAgICAgIHRvIHN1YnNlcXVlbnQgZG9jdW1lbnRzIGFzIG5hdmlnYXRpb24gb2NjdXJzLgor
CisgICAgICAgICogZmFzdC9kb20vY29uc3RydWN0b3JzLWNhY2hlZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2NvbnN0cnVjdG9ycy1jYWNoZWQtbmF2aWdhdGUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVk
LW5hdmlnYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2NvbnN0cnVjdG9ycy1j
YWNoZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vcmVzb3VyY2VzL2NvbnN0cnVj
dG9ycy1jYWNoZWQtbmF2aWdhdGUuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3Jlc291
cmNlcy9jb25zdHJ1Y3RvcnMtY2FjaGVkLmpzOiBBZGRlZC4KKwogMjAwOC0wOS0yNSAgRmVuZyBR
aWFuIDxmZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZXN0IGZvcjogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2NvbnN0cnVjdG9ycy1jYWNoZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOWRhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE5IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IG9iamVjdHMgd2l0aCBzZWN1cml0eSByZXN0
cmljdGlvbnMgYXJlIGNhY2hlZCBjb3JyZWN0bHkKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgSW1hZ2UgaXMgSW1hZ2UKK1BBU1MgSW1hZ2UudGVzdFByb3BlcnR5IGlzICJw
cm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1bGx5IgorUEFTUyBNZXNzYWdlQ2hhbm5lbCBpcyBNZXNzYWdl
Q2hhbm5lbAorUEFTUyBNZXNzYWdlQ2hhbm5lbC50ZXN0UHJvcGVydHkgaXMgInByb3BlcnR5IHNl
dCBzdWNjZXNzZnVsbHkiCitQQVNTIE9wdGlvbiBpcyBPcHRpb24KK1BBU1MgT3B0aW9uLnRlc3RQ
cm9wZXJ0eSBpcyAicHJvcGVydHkgc2V0IHN1Y2Nlc3NmdWxseSIKK1BBU1MgWE1MSHR0cFJlcXVl
c3QgaXMgWE1MSHR0cFJlcXVlc3QKK1BBU1MgWE1MSHR0cFJlcXVlc3QudGVzdFByb3BlcnR5IGlz
ICJwcm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1bGx5IgorUEFTUyBBdWRpbyBpcyBBdWRpbworUEFTUyBB
dWRpby50ZXN0UHJvcGVydHkgaXMgInByb3BlcnR5IHNldCBzdWNjZXNzZnVsbHkiCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vY29uc3RydWN0b3JzLWNhY2hlZC1uYXZpZ2F0ZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLW5hdmlnYXRl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FmMTE0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vY29uc3RydWN0b3JzLWNh
Y2hlZC1uYXZpZ2F0ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MCBAQAorCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgdGVzdEZyYW1lLmNv
bnRlbnRXaW5kb3cuSW1hZ2UgaXMgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuSW1hZ2UKK1BBU1Mg
dGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuSW1hZ2UgIT09IHdpbmRvdy5JbWFnZSBpcyB0cnVlCitQ
QVNTIHRlc3RGcmFtZS5jb250ZW50V2luZG93LkltYWdlLnRlc3RQcm9wZXJ0eSBpcyAicHJvcGVy
dHkgc2V0IHN1Y2Nlc3NmdWxseSIKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuTWVzc2Fn
ZUNoYW5uZWwgaXMgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuTWVzc2FnZUNoYW5uZWwKK1BBU1Mg
dGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuTWVzc2FnZUNoYW5uZWwgIT09IHdpbmRvdy5NZXNzYWdl
Q2hhbm5lbCBpcyB0cnVlCitQQVNTIHRlc3RGcmFtZS5jb250ZW50V2luZG93Lk1lc3NhZ2VDaGFu
bmVsLnRlc3RQcm9wZXJ0eSBpcyAicHJvcGVydHkgc2V0IHN1Y2Nlc3NmdWxseSIKK1BBU1MgdGVz
dEZyYW1lLmNvbnRlbnRXaW5kb3cuT3B0aW9uIGlzIHRlc3RGcmFtZS5jb250ZW50V2luZG93Lk9w
dGlvbgorUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5PcHRpb24gIT09IHdpbmRvdy5PcHRp
b24gaXMgdHJ1ZQorUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5PcHRpb24udGVzdFByb3Bl
cnR5IGlzICJwcm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1bGx5IgorUEFTUyB0ZXN0RnJhbWUuY29udGVu
dFdpbmRvdy5YTUxIdHRwUmVxdWVzdCBpcyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5YTUxIdHRw
UmVxdWVzdAorUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5YTUxIdHRwUmVxdWVzdCAhPT0g
d2luZG93LlhNTEh0dHBSZXF1ZXN0IGlzIHRydWUKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5k
b3cuWE1MSHR0cFJlcXVlc3QudGVzdFByb3BlcnR5IGlzICJwcm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1
bGx5IgorUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5BdWRpbyBpcyB0ZXN0RnJhbWUuY29u
dGVudFdpbmRvdy5BdWRpbworUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5BdWRpbyAhPT0g
d2luZG93LkF1ZGlvIGlzIHRydWUKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuQXVkaW8u
dGVzdFByb3BlcnR5IGlzICJwcm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1bGx5IgorUEFTUyB0ZXN0RnJh
bWUuY29udGVudFdpbmRvdy5JbWFnZSBpcyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5JbWFnZQor
UEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5JbWFnZSAhPT0gd2luZG93LkltYWdlIGlzIHRy
dWUKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuSW1hZ2UgIT09IHN0b3JlZENvbnN0cnVj
dG9ycy5JbWFnZSBpcyB0cnVlCitQQVNTIHN0b3JlZENvbnN0cnVjdG9ycy5JbWFnZS50ZXN0UHJv
cGVydHkgaXMgInByb3BlcnR5IHNldCBzdWNjZXNzZnVsbHkiCitQQVNTIHRlc3RGcmFtZS5jb250
ZW50V2luZG93LkltYWdlLnRlc3RQcm9wZXJ0eSBpcyB1bmRlZmluZWQuCitQQVNTIHRlc3RGcmFt
ZS5jb250ZW50V2luZG93LkltYWdlLmNhY2hlZE9uT3duZXJEb2N1bWVudCBpcyB0cnVlCitQQVNT
IHRlc3RGcmFtZS5jb250ZW50V2luZG93Lk1lc3NhZ2VDaGFubmVsIGlzIHRlc3RGcmFtZS5jb250
ZW50V2luZG93Lk1lc3NhZ2VDaGFubmVsCitQQVNTIHRlc3RGcmFtZS5jb250ZW50V2luZG93Lk1l
c3NhZ2VDaGFubmVsICE9PSB3aW5kb3cuTWVzc2FnZUNoYW5uZWwgaXMgdHJ1ZQorUEFTUyB0ZXN0
RnJhbWUuY29udGVudFdpbmRvdy5NZXNzYWdlQ2hhbm5lbCAhPT0gc3RvcmVkQ29uc3RydWN0b3Jz
Lk1lc3NhZ2VDaGFubmVsIGlzIHRydWUKK1BBU1Mgc3RvcmVkQ29uc3RydWN0b3JzLk1lc3NhZ2VD
aGFubmVsLnRlc3RQcm9wZXJ0eSBpcyAicHJvcGVydHkgc2V0IHN1Y2Nlc3NmdWxseSIKK1BBU1Mg
dGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuTWVzc2FnZUNoYW5uZWwudGVzdFByb3BlcnR5IGlzIHVu
ZGVmaW5lZC4KK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuTWVzc2FnZUNoYW5uZWwuY2Fj
aGVkT25Pd25lckRvY3VtZW50IGlzIHRydWUKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cu
T3B0aW9uIGlzIHRlc3RGcmFtZS5jb250ZW50V2luZG93Lk9wdGlvbgorUEFTUyB0ZXN0RnJhbWUu
Y29udGVudFdpbmRvdy5PcHRpb24gIT09IHdpbmRvdy5PcHRpb24gaXMgdHJ1ZQorUEFTUyB0ZXN0
RnJhbWUuY29udGVudFdpbmRvdy5PcHRpb24gIT09IHN0b3JlZENvbnN0cnVjdG9ycy5PcHRpb24g
aXMgdHJ1ZQorUEFTUyBzdG9yZWRDb25zdHJ1Y3RvcnMuT3B0aW9uLnRlc3RQcm9wZXJ0eSBpcyAi
cHJvcGVydHkgc2V0IHN1Y2Nlc3NmdWxseSIKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cu
T3B0aW9uLnRlc3RQcm9wZXJ0eSBpcyB1bmRlZmluZWQuCitQQVNTIHRlc3RGcmFtZS5jb250ZW50
V2luZG93Lk9wdGlvbi5jYWNoZWRPbk93bmVyRG9jdW1lbnQgaXMgdHJ1ZQorUEFTUyB0ZXN0RnJh
bWUuY29udGVudFdpbmRvdy5YTUxIdHRwUmVxdWVzdCBpcyB0ZXN0RnJhbWUuY29udGVudFdpbmRv
dy5YTUxIdHRwUmVxdWVzdAorUEFTUyB0ZXN0RnJhbWUuY29udGVudFdpbmRvdy5YTUxIdHRwUmVx
dWVzdCAhPT0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IGlzIHRydWUKK1BBU1MgdGVzdEZyYW1lLmNv
bnRlbnRXaW5kb3cuWE1MSHR0cFJlcXVlc3QgIT09IHN0b3JlZENvbnN0cnVjdG9ycy5YTUxIdHRw
UmVxdWVzdCBpcyB0cnVlCitQQVNTIHN0b3JlZENvbnN0cnVjdG9ycy5YTUxIdHRwUmVxdWVzdC50
ZXN0UHJvcGVydHkgaXMgInByb3BlcnR5IHNldCBzdWNjZXNzZnVsbHkiCitQQVNTIHRlc3RGcmFt
ZS5jb250ZW50V2luZG93LlhNTEh0dHBSZXF1ZXN0LnRlc3RQcm9wZXJ0eSBpcyB1bmRlZmluZWQu
CitQQVNTIHRlc3RGcmFtZS5jb250ZW50V2luZG93LlhNTEh0dHBSZXF1ZXN0LmNhY2hlZE9uT3du
ZXJEb2N1bWVudCBpcyB0cnVlCitQQVNTIHRlc3RGcmFtZS5jb250ZW50V2luZG93LkF1ZGlvIGlz
IHRlc3RGcmFtZS5jb250ZW50V2luZG93LkF1ZGlvCitQQVNTIHRlc3RGcmFtZS5jb250ZW50V2lu
ZG93LkF1ZGlvICE9PSB3aW5kb3cuQXVkaW8gaXMgdHJ1ZQorUEFTUyB0ZXN0RnJhbWUuY29udGVu
dFdpbmRvdy5BdWRpbyAhPT0gc3RvcmVkQ29uc3RydWN0b3JzLkF1ZGlvIGlzIHRydWUKK1BBU1Mg
c3RvcmVkQ29uc3RydWN0b3JzLkF1ZGlvLnRlc3RQcm9wZXJ0eSBpcyAicHJvcGVydHkgc2V0IHN1
Y2Nlc3NmdWxseSIKK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuQXVkaW8udGVzdFByb3Bl
cnR5IGlzIHVuZGVmaW5lZC4KK1BBU1MgdGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuQXVkaW8uY2Fj
aGVkT25Pd25lckRvY3VtZW50IGlzIHRydWUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vY29uc3RydWN0b3JzLWNhY2hlZC1uYXZpZ2F0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vY29uc3RydWN0b3JzLWNhY2hlZC1uYXZpZ2F0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM0YWY2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLW5hdmlnYXRlLmh0bWwKQEAgLTAsMCArMSwx
NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIGlkPSJ0ZXN0RnJh
bWUiPjwvaWZyYW1lPgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29uc3RydWN0b3JzLWNhY2hlZC1uYXZp
Z2F0ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTI5NWZmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L2NvbnN0cnVjdG9ycy1jYWNoZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbnN0cnVjdG9ycy1jYWNoZWQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vcmVzb3VyY2VzL2NvbnN0cnVjdG9ycy1jYWNoZWQtbmF2aWdhdGUuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvY29uc3RydWN0b3JzLWNhY2hlZC1uYXZpZ2F0ZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODI2YmRkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL2NvbnN0cnVjdG9ycy1jYWNo
ZWQtbmF2aWdhdGUuanMKQEAgLTAsMCArMSw1NSBAQAoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3Zh
ciBjb25zdHJ1Y3RvcnMgPSBbIkltYWdlIiwgIk1lc3NhZ2VDaGFubmVsIiwgIk9wdGlvbiIsICJY
TUxIdHRwUmVxdWVzdCIsICJBdWRpbyJdOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkg
eworICAgIHRlc3RGcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RnJhbWUiKTsK
KyAgICBzdG9yZWRDb25zdHJ1Y3RvcnMgPSBbXTsKKyAgICAvLyBJZGVudGl0eSBjaGVja3MKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0cnVjdG9ycy5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcnNbaV07CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBzaG91bGRCZSgidGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuIiArIGNvbnN0cnVjdG9y
LCAidGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuIitjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBz
aG91bGRCZVRydWUoInRlc3RGcmFtZS5jb250ZW50V2luZG93LiIgKyBjb25zdHJ1Y3RvciArICIg
IT09IHdpbmRvdy4iICsgY29uc3RydWN0b3IpOworICAgICAgICAgICAgdGVzdEZyYW1lLmNvbnRl
bnRXaW5kb3dbY29uc3RydWN0b3JdLnRlc3RQcm9wZXJ0eSA9ICJwcm9wZXJ0eSBzZXQgc3VjY2Vz
c2Z1bGx5IjsKKyAgICAgICAgICAgIHNob3VsZEJlKCJ0ZXN0RnJhbWUuY29udGVudFdpbmRvdy4i
ICsgY29uc3RydWN0b3IgKyAiLnRlc3RQcm9wZXJ0eSIsICcicHJvcGVydHkgc2V0IHN1Y2Nlc3Nm
dWxseSInKTsKKyAgICAgICAgICAgIHN0b3JlZENvbnN0cnVjdG9yc1tjb25zdHJ1Y3Rvcl0gPSB0
ZXN0RnJhbWUuY29udGVudFdpbmRvd1tjb25zdHJ1Y3Rvcl07CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRlc3RpbmcgIiArIGNvbnN0cnVjdG9yICsgIiB0
aHJldyAiICsgZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgdGVzdEZyYW1lLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgICAg
IEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIGFm
dGVyIGxvYWQKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yc1tpXTsK
KyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgLy8gUmVwZWF0IHRoZSBpZGVudGl0
eSBjaGVja3MgdG8gYmUgc2FmZQorICAgICAgICAgICAgICAgIHNob3VsZEJlKCJ0ZXN0RnJhbWUu
Y29udGVudFdpbmRvdy4iICsgY29uc3RydWN0b3IsICJ0ZXN0RnJhbWUuY29udGVudFdpbmRvdy4i
K2NvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZVRydWUoInRlc3RGcmFtZS5j
b250ZW50V2luZG93LiIgKyBjb25zdHJ1Y3RvciArICIgIT09IHdpbmRvdy4iICsgY29uc3RydWN0
b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHdlIGhhdmVuJ3QgcmV1c2VkIHRoZSBjb25zdHJ1Y3RvcnMgZnJvbSB0aGUgb2xkIGRvY3VtZW50
CisgICAgICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0ZXN0RnJhbWUuY29udGVudFdpbmRvdy4i
ICsgY29uc3RydWN0b3IgKyAiICE9PSBzdG9yZWRDb25zdHJ1Y3RvcnMuIiArIGNvbnN0cnVjdG9y
KTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3RvcmVkQ29uc3RydWN0b3JzLiIgKyBjb25z
dHJ1Y3RvciArICIudGVzdFByb3BlcnR5IiwgJyJwcm9wZXJ0eSBzZXQgc3VjY2Vzc2Z1bGx5Iicp
OworCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmVuJ3Qga2VwdCBhbnl0aGlu
ZyBvdmVyIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVVbmRlZmluZWQoInRlc3RGcmFtZS5jb250ZW50V2luZG93LiIgKyBjb25zdHJ1Y3RvciArICIu
dGVzdFByb3BlcnR5Iik7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIGdldHRp
bmcgdGhlIHNhbWUgY29uc3RydWN0b3IgYXMgdGhlIGZyYW1lIGRvZXMgaW50ZXJuYWxseQorICAg
ICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgidGVzdEZyYW1lLmNvbnRlbnRXaW5kb3cuIiArIGNv
bnN0cnVjdG9yICsgIi5jYWNoZWRPbk93bmVyRG9jdW1lbnQiKTsKKyAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0aW5nICIgKyBjb25zdHJ1
Y3RvciArICIgdGhyZXcgIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH07CisgICAgdGVzdEZyYW1l
LnNyYyA9ICdkYXRhOnRleHQvaHRtbCw8c2NyaXB0PnZhciBjb25zdHJ1Y3RvcnMgPSBbIkltYWdl
IiwgIk1lc3NhZ2VDaGFubmVsIiwgIk9wdGlvbiIsICJYTUxIdHRwUmVxdWVzdCIsICJBdWRpbyJd
OycKKyAgICAgICAgICAgICAgICAgICsgJ2Zvcih2YXIgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMu
bGVuZ3RoOyBpKyspIGlmKHdpbmRvd1tjb25zdHJ1Y3RvcnNbaV1dKScKKyAgICAgICAgICAgICAg
ICAgICsgJ3dpbmRvd1tjb25zdHJ1Y3RvcnNbaV1dLmNhY2hlZE9uT3duZXJEb2N1bWVudCA9IHRy
dWU7PC9zY3JpcHQ+JzsKK30KKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9jb25zdHJ1Y3RvcnMtY2FjaGVkLmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL2NvbnN0cnVjdG9ycy1jYWNoZWQuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyYzY5OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9jb25zdHJ1Y3RvcnMtY2FjaGVk
LmpzCkBAIC0wLDAgKzEsMjAgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IG9iamVjdHMgd2l0aCBzZWN1cml0eSByZXN0cmljdGlvbnMgYXJlIGNhY2hlZCBjb3JyZWN0bHki
KTsKKwordmFyIGNvbnN0cnVjdG9ycyA9IFsiSW1hZ2UiLCAiTWVzc2FnZUNoYW5uZWwiLCAiT3B0
aW9uIiwgIlhNTEh0dHBSZXF1ZXN0IiwgIkF1ZGlvIl07CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
Y29uc3RydWN0b3JzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3JzW2ldOworICAgIHRyeSB7CisgICAgICAgIC8vIFRlc3QgcmV0cmlldmluZyB0aGUgb2Jq
ZWN0IHR3aWNlIHJlc3VsdHMgaW4gdGhlIHNhbWUgb2JqZWN0CisgICAgICAgIHNob3VsZEJlKGNv
bnN0cnVjdG9yLCBjb25zdHJ1Y3Rvcik7CisKKyAgICAgICAgLy8gQmUgcGFyYW5vaWQgLS0gbWFr
ZSBzdXJlIHRoYXQgc2V0dGluZyBhIHByb3BlcnR5IHJlc3VsdHMgaW4gdGhhdCBwcm9wZXJ0eQor
ICAgICAgICAvLyBzdGF5cworICAgICAgICB0aGlzW2NvbnN0cnVjdG9yXS50ZXN0UHJvcGVydHkg
PSAicHJvcGVydHkgc2V0IHN1Y2Nlc3NmdWxseSI7CisgICAgICAgIHNob3VsZEJlKGNvbnN0cnVj
dG9yICsgIi50ZXN0UHJvcGVydHkiLCAnInByb3BlcnR5IHNldCBzdWNjZXNzZnVsbHkiJyk7Cisg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0aW5nICIgKyBjb25zdHJ1
Y3RvciArICIgdGhyZXcgIiArIGUpOworICAgIH0KK30KKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNGMzYWI1Yi4uYzkyNDgxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOC0wOS0yNiAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJ1ZyAyMTA1NDogQ29uc3RydWN0aW9uIG9mIGNlcnRhaW4gRE9N
IG9iamVjdHMgaXMgaGVhdmlseSByZWdyZXNzZWQgYnkgcjM2Njc1CisgICAgICAgIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNTQ+CisKKyAgICAgICAgVGhpcyBw
ZXJmb3JtYW5jZSByZWdyZXNzaW9uIGlzIGFjdHVhbGx5IGp1c3QgYSBzeW1wdG9tIG9mIGEgY29y
cmVjdG5lc3MKKyAgICAgICAgYnVnLiAgVGhlIGNvbnN0cnVjdG9yIG9iamVjdHMgZm9yIGEgbnVt
YmVyIG9mIHByb3BlcnRpZXMgdGhhdCBoYXZlIHNlY3VyaXR5CisgICAgICAgIGNoZWNrcyBvbiBh
Y2Nlc3Mgd2VyZSByZXR1cm5pbmcgbmV3IG9iamVjdHMgZWFjaCB0aW1lLiAgVGhlIG1vc3Qgb2J2
aW91cworICAgICAgICBzeW1wdG9tIG9mIHRoaXMgYnVnIGlzIHRoYXQgd2luZG93LkltYWdlICE9
IHdpbmRvdy5JbWFnZSwgZXRjLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiB0byB0aGlzIGlzIHRv
IG1ha2Ugc3VyZSB3ZSBjYWNoZSB0aGVzZSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgaW4gdGhlIHNh
bWUgd2F5IGFzIGFsbCB0aGUgb3RoZXIgRE9NIGNvbnN0cnVjdG9ycy4gIFRvIGFjaGlldmUgdGhp
cworICAgICAgICB3aXRob3V0IGNhdXNpbmcgYW55IHJlZmNvdW50IGN5Y2xlcyBpdCBpcyBuZWNl
c3NhcnkgdG8gcmVwbGFjZSB0aGUKKyAgICAgICAgcmVmY291bnRlZCBkb2N1bWVudCBwb2ludGVy
IGluIHRoZSBJbWFnZSwgTWVzc2FnZUNoYW5uZWwsIE9wdGlvbiwgCisgICAgICAgIFhNTEh0dHBS
ZXF1ZXN0LCBhbmQgQXVkaW8gY29uc3RydWN0b3Igb2JqZWN0cyB3aXRoIGEgcmVmZXJlbmNlIHRv
IAorICAgICAgICB0aGUgZG9jdW1lbnQncyBKUyB3cmFwcGVyLgorCisgICAgICAgIFRlc3RzOiBm
YXN0L2RvbS9jb25zdHJ1Y3RvcnMtY2FjaGVkLW5hdmlnYXRlLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZG9tL2NvbnN0cnVjdG9ycy1jYWNoZWQuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9D
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29uc3RydWN0b3I6Om1h
cmspOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNBdWRpb0NvbnN0cnVjdG9yOjpkb2N1bWVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQ
cm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6bWFyayk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjptYXJrKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1hZ2VDb25z
dHJ1Y3Rvcjo6ZG9jdW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3I6Om1hcmspOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVj
dG9yOjpkb2N1bWVudCk6CisKIDIwMDgtMDktMjUgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgc2Nyb2xsVG8oKSBtZXRob2QgZnJvbSBGcmFtZVZp
ZXcsIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IGFueW9uZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnN0cnVjdG9yLmNwcAppbmRleCAxNTdiMTljLi4yYjgzNGQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCkBAIC00Miw3ICs0Miw3IEBAIGNv
bnN0IENsYXNzSW5mbyBKU0F1ZGlvQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3Ry
dWN0b3IiLCAwLCAwLCAwIH07CiAKIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6SlNBdWRpb0NvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogRE9NT2JqZWN0
KEpTQXVkaW9Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50
KQorICAgICwgbV9kb2N1bWVudChzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4odG9KUyhleGVjLCBk
b2N1bWVudCkpKQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CkBA
IC02NSw2ICs2NSwxMyBAQCBDb25zdHJ1Y3RUeXBlIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKIH0KIAordm9pZCBKU0F1ZGlvQ29uc3RydWN0b3I6Om1hcmsoKQorewor
ICAgIERPTU9iamVjdDo6bWFyaygpOworICAgIGlmICghbV9kb2N1bWVudC0+bWFya2VkKCkpCisg
ICAgICAgIG1fZG9jdW1lbnQtPm1hcmsoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvQ29uc3RydWN0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0
cnVjdG9yLmgKaW5kZXggMDE0YmU3MS4uMDM4YjhhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Db25zdHJ1Y3Rvci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFZJREVPKQog
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMTYgKzM4
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTQXVkaW9D
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIERvY3VtZW50Kik7CiAKLSAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LT5pbXBsKCk7
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBK
U0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsK
IAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CiAKLSAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3Vt
ZW50OworICAgICAgICBKU0RvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAppbmRl
eCBiNmNhMjJkLi4wMDAzZTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCkBAIC00MzMsNiArNDMzLDE2IEBAIHN0YXRpYyBKU1ZhbHVlKiBzaG93TW9kYWxEaWFsb2co
RXhlY1N0YXRlKiBleGVjLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsCiAgICAgcmV0
dXJuIHJldHVyblZhbHVlID8gcmV0dXJuVmFsdWUgOiBqc1VuZGVmaW5lZCgpOwogfQogCit0ZW1w
bGF0ZTxjbGFzcyBDb25zdHJ1Y3RvckNsYXNzPiBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0RE9N
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTRE9NV2luZG93QmFzZSog
d2luZG93KQoreworICAgIGlmIChKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IHdpbmRvdy0+
Y29uc3RydWN0b3JzKCkuZ2V0KCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKQorICAgICAgICBy
ZXR1cm4gY29uc3RydWN0b3I7CisgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBuZXcg
KGV4ZWMpIENvbnN0cnVjdG9yQ2xhc3MoZXhlYywgd2luZG93LT5pbXBsKCktPmRvY3VtZW50KCkp
OworICAgIEFTU0VSVCghd2luZG93LT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0
b3JDbGFzczo6c19pbmZvKSk7CisgICAgd2luZG93LT5jb25zdHJ1Y3RvcnMoKS5zZXQoJkNvbnN0
cnVjdG9yQ2xhc3M6OnNfaW5mbywgY29uc3RydWN0b3IpOworICAgIHJldHVybiBjb25zdHJ1Y3Rv
cjsKK30KKwogSlNWYWx1ZSAqSlNET01XaW5kb3dCYXNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEFTU0VSVChpbXBsKCktPmZyYW1l
KCkpOwpAQCAtNDQ5LDI4ICs0NTksMjYgQEAgSlNWYWx1ZSAqSlNET01XaW5kb3dCYXNlOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogICAgIGNhc2Ug
SW1hZ2U6CiAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAvLyBGSVhNRTogdGhpcyBwcm9wZXJ0eSAo
YW5kIHRoZSBmZXcgYmVsb3cpIHByb2JhYmx5IHNob3VsZG4ndCBjcmVhdGUgYSBuZXcgb2JqZWN0
IGV2ZXJ5Ci0gICAgICAgIC8vIHRpbWUKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNJbWFn
ZUNvbnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMp
OwogICAgIGNhc2UgTWVzc2FnZUNoYW5uZWw6CiAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IoZXhlYywgaW1wbCgpLT5m
cmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CiAgICAgY2FzZSBPcHRpb246
CiAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0hUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3IoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAg
ICAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3Rvcj4oZXhlYywgdGhpcyk7CiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDoKICAgICAgICAgaWYg
KCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rv
cihleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgICAgICByZXR1cm4gZ2V0
RE9NQ29uc3RydWN0b3I8SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsK
ICAgICBjYXNlIEF1ZGlvOgogI2lmIEVOQUJMRShWSURFTykKICAgICAgICAgaWYgKCFhbGxvd3NB
Y2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIGlmICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBdWRpb0NvbnN0cnVj
dG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU0F1ZGlvQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwogI2Vsc2UK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAjZW5kaWYKQEAgLTQ3OCw3ICs0ODYsNyBA
QCBKU1ZhbHVlICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICAgIGlmICghYWxs
b3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvcihleGVj
KTsKKyAgICAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yPihleGVjKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAppbmRleCA3MDhhNmJmLi5jNzU2
NGQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xlYXJBbGxUaW1lb3V0cygp
OwogCiAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyByZXR1cm4gZCgp
LT5zdHJ1Y3R1cmVzOyB9Ci0gICAgICAgIEpTRE9NQ29uc3RydWN0b3JNYXAmIGNvbnN0cnVjdG9y
cygpIHsgcmV0dXJuIGQoKS0+Y29uc3RydWN0b3JzOyB9CisgICAgICAgIEpTRE9NQ29uc3RydWN0
b3JNYXAmIGNvbnN0cnVjdG9ycygpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y29uc3RydWN0b3JzOyB9
CiAKICAgICAgICAgZW51bSB7CiAgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggMTMyYTI1My4uZDAwZjkyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtMzUsNyArMzUsNyBAQCBj
b25zdCBDbGFzc0luZm8gSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJPcHRpb25Db25zdHJ1Y3RvciIsCiAKIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQq
IGRvY3VtZW50KQogICAgIDogRE9NT2JqZWN0KEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQ
cm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9kb2N1bWVu
dChzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4odG9KUyhleGVjLCBkb2N1bWVudCkpKQogewogICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCA0
KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CkBAIC03NSw0ICs3NSwxMSBAQCBD
b25zdHJ1Y3RUeXBlIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJiBjbwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0K
IAordm9pZCBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6Om1hcmsoKQoreworICAgIERP
TU9iamVjdDo6bWFyaygpOworICAgIGlmICghbV9kb2N1bWVudC0+bWFya2VkKCkpCisgICAgICAg
IG1fZG9jdW1lbnQtPm1hcmsoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
aCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgK
aW5kZXggMGQwNTM5ZS4uMjdiNzkxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVm
aW5lIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCiAKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yOCwxNSArMjksMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01PYmplY3QgewogICAgIHB1YmxpYzoKICAgICAgICAgSlNIVE1MT3B0aW9uRWxlbWVudENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsKLSAgICAgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LT5pbXBsKCk7IH0K
IAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCisgICAgICAg
IAorICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3RE
YXRhJik7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CisgICAgICAgIEpTRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlQ29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0
b3IuY3BwCmluZGV4IGNmOWU1ODguLjcwNTcwNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW1hZ2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpT
SW1hZ2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiSW1hZ2VDb25zdHJ1Y3RvciIsIDAsIDAsIDAg
fTsKIAogSlNJbWFnZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBET01PYmplY3QoSlNJbWFnZUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvdHlwZSgpKSkKLSAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2RvY3Vt
ZW50KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPih0b0pTKGV4ZWMsIGRvY3VtZW50KSkpCiB7CiB9
CiAKQEAgLTc0LDQgKzc0LDExIEBAIENvbnN0cnVjdFR5cGUgSlNJbWFnZUNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiAgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVIb3N0OwogfQogCit2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6bWFyaygp
Cit7CisgICAgRE9NT2JqZWN0OjptYXJrKCk7CisgICAgaWYgKCFtX2RvY3VtZW50LT5tYXJrZWQo
KSkKKyAgICAgICAgbV9kb2N1bWVudC0+bWFyaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaAppbmRleCBmOGRmN2Q5
Li43YmJkOTM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1
Y3Rvci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgKQEAg
LTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgSlNJbWFnZUNvbnN0cnVjdG9yX2gKIAogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0yOSwxNSArMzAsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIEpTSW1hZ2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1YmxpYzoK
ICAgICAgICAgSlNJbWFnZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsK
LSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5n
ZXQoKTsgfQorICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50LT5pbXBsKCk7IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOwotCisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERh
dGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAotICAgICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgICAgIEpTRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCmluZGV4IDhiNjFkYzQu
LjIzOWI2OWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5l
bENvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTTWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3QKIAogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpKU01lc3NhZ2VDaGFubmVsQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBET01PYmpl
Y3QoSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKLSAgICAsIG1fZG9jdW1l
bnQoZG9jdW1lbnQpCisgICAgLCBtX2RvY3VtZW50KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPih0
b0pTKGV4ZWMsIGRvY3VtZW50KSkpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTTWVzc2FnZUNoYW5uZWxQcm90b3R5cGU6OnNlbGYoZXhlYyksIE5v
bmUpOwogfQpAQCAtNTgsNCArNTgsMTEgQEAgSlNPYmplY3QqIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnMKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIE1lc3NhZ2VDaGFubmVsOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKj4oY29uc3RydWN0
b3IpLT5tX2RvY3VtZW50LmdldCgpKSkpOwogfQogCit2b2lkIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvcjo6bWFyaygpCit7CisgICAgRE9NT2JqZWN0OjptYXJrKCk7CisgICAgaWYgKCFtX2Rv
Y3VtZW50LT5tYXJrZWQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+bWFyaygpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuaAppbmRleCA1YzE1ZGJkLi5hMDk3ZDhiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKQEAgLTQzLDgg
KzQzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIGNvbnN0IEpTQzo6
QXJnTGlzdCYpOwogICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50Owor
ICAgICAgICBKU0RvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9yLmNwcAppbmRleCBjMGE4ZTU4Li4wMTgwYzFjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCkBAIC0zNCw3ICsz
NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0CiAKIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvcjo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgIDogRE9NT2JqZWN0KEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQ
cm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9kb2N1bWVu
dChzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4odG9KUyhleGVjLCBkb2N1bWVudCkpKQogewogICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1hNTEh0dHBSZXF1
ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBOb25lKTsKIH0KQEAgLTUxLDQgKzUxLDExIEBAIENv
bnN0cnVjdFR5cGUgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KENvbnN0cnVjdERhdGEmIGNvbnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQog
Cit2b2lkIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6bWFyaygpCit7CisgICAgRE9NT2Jq
ZWN0OjptYXJrKCk7CisgICAgaWYgKCFtX2RvY3VtZW50LT5tYXJrZWQoKSkKKyAgICAgICAgbV9k
b2N1bWVudC0+bWFyaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaAppbmRleCBlZmQy
MTI0Li45MWM4Y2M5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3Rvci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdENvbnN0cnVjdG9yLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgSlNYTUxIdHRwUmVx
dWVzdENvbnN0cnVjdG9yX2gKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkpTRG9jdW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yOSwxNCArMzAsMTUg
QEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwotICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KKyAgICBEb2N1bWVudCogZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LT5pbXBsKCk7IH0KICAgICBzdGF0aWMgY29u
c3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCisgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0M6OkNvbnN0cnVjdERhdGEmKTsKICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAKLSAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fZG9jdW1lbnQ7CisgICAgSlNEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="10738"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>