<?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>37755</bug_id>
          
          <creation_ts>2010-04-17 12:51:02 -0700</creation_ts>
          <short_desc>[v8] Web Inspector: implement JavaScriptCallFrame for v8</short_desc>
          <delta_ts>2010-04-19 10:11:19 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>37663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213646</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-17 12:51:02 -0700</bug_when>
    <thetext>Provide JavaScriptCallFrame implementation that works for v8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213649</commentid>
    <comment_count>1</comment_count>
      <attachid>53608</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-17 13:03:21 -0700</bug_when>
    <thetext>Created attachment 53608
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213650</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-17 13:08:36 -0700</bug_when>
    <thetext>Attachment 53608 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/1719123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213651</commentid>
    <comment_count>3</comment_count>
      <attachid>53608</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-17 13:09:59 -0700</bug_when>
    <thetext>Comment on attachment 53608
patch

+ v8::Persistent&lt;v8::Context&gt; m_debuggerContext

Please use OwnHandle to avoid manual new/delete.

+ v8::Handle&lt;v8::Value&gt; callerFrame = m_callFrame-&gt;Get(v8String(&quot;caller&quot;));

Is this value writeable from JavaScript?  Might we get confused about who the
caller is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213932</commentid>
    <comment_count>4</comment_count>
      <attachid>53656</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-19 00:36:41 -0700</bug_when>
    <thetext>Created attachment 53656
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213935</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-19 00:43:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 53608 [details])
&gt; + v8::Persistent&lt;v8::Context&gt; m_debuggerContext
&gt; 
&gt; Please use OwnHandle to avoid manual new/delete.
&gt; 
Done. Thanks for pointing that, I didn&apos;t know.

&gt; + v8::Handle&lt;v8::Value&gt; callerFrame = m_callFrame-&gt;Get(v8String(&quot;caller&quot;));
&gt; 
&gt; Is this value writeable from JavaScript?  Might we get confused about who the
&gt; caller is?
This field is set in the debugger context from DebuggerScript.js when the call stack is traversed and only accessed from JavaScriptCallFrame.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214071</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-19 10:03:45 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gyp/WebCore.gyp
	M	WebCore/WebCore.gypi
	M	WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp
	A	WebCore/bindings/v8/JavaScriptCallFrame.cpp
	A	WebCore/bindings/v8/JavaScriptCallFrame.h
	M	WebCore/bindings/v8/ScriptDebugServer.cpp
	M	WebCore/bindings/v8/ScriptDebugServer.h
	M	WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
	A	WebCore/bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp
	M	WebCore/inspector/JavaScriptCallFrame.idl
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebKit/chromium/src/js/DebuggerScript.js
Committed r57812</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214075</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-19 10:11:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57812 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53608</attachid>
            <date>2010-04-17 13:03:21 -0700</date>
            <delta_ts>2010-04-19 00:36:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>v8-call-frame.patch</filename>
            <type>text/plain</type>
            <size>21941</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWM0MDYyMi4uODZkNTdhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0OCBAQAogMjAxMC0wNC0xNyAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgSmF2YVNjcmlwdENh
bGxGcmFtZSB0aGF0IHdvcmtzIGZvciB2OC4KKyAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgYmlu
ZGluZyBmb3IgdjggYWxsb3dzIHRvIG1ha2UgZXZhbHVhdGlvbnMgb24KKyAgICAgICAgY2FsbCBm
cmFtZXMgYW5kIHByb3RlY3RzIGFjY2VzcyB0byB0aGUgZGVidWdnZXIgY29udGV4dCBmcm9tCisg
ICAgICAgIGluc3BlY3RlZCBjb250ZXh0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc1NQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFT
Y3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENh
bGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjp+SmF2YVNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlw
dENhbGxGcmFtZTo6c291cmNlSUQpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxG
cmFtZTo6bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5j
dGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVD
aGFpbik6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0
OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlY4SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW5BY2Nlc3NvckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVj
dEFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SmF2YVNjcmlwdENhbGxGcmFt
ZTo6dHlwZUFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdENh
bGxGcmFtZS5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKworMjAxMC0wNC0x
NyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSmF2
YVNjcmlwdENhbGxGcmFtZS57aCxjcHB9IHRvIFdlYkNvcmUvYmluZGluZ3MvanMKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCmluZGV4IGMxYTU2MGIuLmM1NjRhZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cApAQCAtMTgwLDkgKzE4MCw2IEBACiAgICAgICAnLi4vZG9tL0V2ZW50VGFyZ2V0LmlkbCcs
CiAgICAgICAnLi4vaHRtbC9Wb2lkQ2FsbGJhY2suaWRsJywKIAotICAgICAgIyBKU0Mtb25seS4K
LSAgICAgICcuLi9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5pZGwnLAotCiAgICAgICAj
IEJpbmRpbmdzIHdpdGggY3VzdG9tIE9iamVjdGl2ZS1DIGltcGxlbWVudGF0aW9ucy4KICAgICAg
ICcuLi9wYWdlL0Fic3RyYWN0Vmlldy5pZGwnLAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZiODg4N2MuLjU5MzM2NzcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC03NTgsNiArNzU4LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJ
bmRleGVkRGF0YWJhc2VSZXF1ZXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3Nh
Z2VFdmVudEN1c3RvbS5jcHAnLApAQCAtODA0LDYgKzgwNSw4IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Jc29sYXRlZFdvcmxk
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvTWFpblRocmVhZERPTURhdGEuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvTlBWOE9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ph
dmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCmluZGV4IGFmYmRmNWQuLmIwMGNjYWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAK
QEAgLTg1LDYgKzg1LDEyIEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNo
YWluKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhl
YywgbGlzdCk7CiB9CiAKK0pTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIC8vIEZJWE1FKDM3
NjYzKTogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRoZSB3YXkgaXQncyBkb25lIGluIHRoZSBJbmpl
Y3RlZFNjaXB0LmpzCisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU1ZmM2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisKKyNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0phdmFTY3JpcHRDYWxsRnJhbWU6OkphdmFTY3JpcHRDYWxsRnJh
bWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNhbGxGcmFtZSkKKyAgICA6IG1fZGVidWdnZXJDb250ZXh0KHY4OjpQZXJzaXN0
ZW50PHY4OjpDb250ZXh0Pjo6TmV3KGRlYnVnZ2VyQ29udGV4dCkpCisgICAgLCBtX2NhbGxGcmFt
ZSh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxGcmFtZSkpCit7Cit9CisKK0ph
dmFTY3JpcHRDYWxsRnJhbWU6On5KYXZhU2NyaXB0Q2FsbEZyYW1lKCkKK3sKKyAgICBtX2RlYnVn
Z2VyQ29udGV4dC5EaXNwb3NlKCk7CisgICAgbV9kZWJ1Z2dlckNvbnRleHQuQ2xlYXIoKTsKKyAg
ICBtX2NhbGxGcmFtZS5EaXNwb3NlKCk7CisgICAgbV9jYWxsRnJhbWUuQ2xlYXIoKTsKK30KKwor
SmF2YVNjcmlwdENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKCkKK3sKKyAg
ICBpZiAoIW1fY2FsbGVyKSB7CisgICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
KyAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2RlYnVnZ2VyQ29udGV4
dCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjYWxsZXJGcmFtZSA9IG1fY2FsbEZy
YW1lLT5HZXQodjhTdHJpbmcoImNhbGxlciIpKTsKKyAgICAgICAgaWYgKCFjYWxsZXJGcmFtZS0+
SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBtX2NhbGxlciA9IEph
dmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShtX2RlYnVnZ2VyQ29udGV4dCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChjYWxsZXJGcmFtZSkpOworICAgIH0KKyAgICByZXR1cm4gbV9jYWxs
ZXIuZ2V0KCk7Cit9CisKK2ludCBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzb3VyY2VJRCgpIGNvbnN0
Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBjb250ZXh0U2NvcGUobV9kZWJ1Z2dlckNvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZXN1bHQgPSBtX2NhbGxGcmFtZS0+R2V0KHY4U3RyaW5nKCJzb3VyY2VJRCIpKTsK
KyAgICBpZiAocmVzdWx0LT5Jc0ludDMyKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPkludDMy
VmFsdWUoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEphdmFTY3JpcHRDYWxsRnJhbWU6Omxp
bmUoKSBjb25zdAoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6
Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fZGVidWdnZXJDb250ZXh0KTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gbV9jYWxsRnJhbWUtPkdldCh2OFN0cmluZygibGlu
ZSIpKTsKKyAgICBpZiAocmVzdWx0LT5Jc0ludDMyKCkpCisgICAgICAgIHJldHVybiByZXN1bHQt
PkludDMyVmFsdWUoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEphdmFTY3JpcHRDYWxs
RnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9kZWJ1Z2dlckNv
bnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBtX2NhbGxGcmFtZS0+
R2V0KHY4U3RyaW5nKCJmdW5jdGlvbk5hbWUiKSk7CisgICAgcmV0dXJuIHRvV2ViQ29yZVN0cmlu
ZyhyZXN1bHQpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gSmF2YVNjcmlwdENhbGxGcmFt
ZTo6c2NvcGVDaGFpbigpIGNvbnN0Cit7CisgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHNjb3Bl
Q2hhaW4gPSB2ODo6SGFuZGxlPHY4OjpBcnJheT46OkNhc3QobV9jYWxsRnJhbWUtPkdldCh2OFN0
cmluZygic2NvcGVDaGFpbiIpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9
IHY4OjpBcnJheTo6TmV3KHNjb3BlQ2hhaW4tPkxlbmd0aCgpKTsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgc2NvcGVDaGFpbi0+TGVuZ3RoKCk7IGkrKykKKyAgICAgICAgcmVzdWx0LT5T
ZXQoaSwgc2NvcGVDaGFpbi0+R2V0KGkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg
SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVUeXBlKGludCBzY29wZUluZGV4KSBjb25zdAorewor
ICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBzY29wZVR5cGUgPSB2ODo6SGFuZGxlPHY4OjpBcnJh
eT46OkNhc3QobV9jYWxsRnJhbWUtPkdldCh2OFN0cmluZygic2NvcGVUeXBlIikpKTsKKyAgICBy
ZXR1cm4gc2NvcGVUeXBlLT5HZXQoc2NvcGVJbmRleCktPkludDMyVmFsdWUoKTsKK30KKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IEphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplY3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NhbGxGcmFtZS0+R2V0KHY4U3RyaW5nKCJ0aGlzT2JqZWN0Iikp
OworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVh
dGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQoreworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBldmFsRnVuY3Rpb24gPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobV9jYWxs
RnJhbWUtPkdldCh2OFN0cmluZygiZXZhbHVhdGUiKSkpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBhcmd2W10gPSB7IHY4U3RyaW5nKGV4cHJlc3Npb24pIH07CisgICAgcmV0dXJuIGV2YWxG
dW5jdGlvbi0+Q2FsbChtX2NhbGxGcmFtZSwgMSwgYXJndik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9KYXZhU2NyaXB0Q2FsbEZyYW1lLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45NDVkNDEzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEphdmFT
Y3JpcHRDYWxsRnJhbWVfaAorI2RlZmluZSBKYXZhU2NyaXB0Q2FsbEZyYW1lX2gKKworI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlIDx2OC1kZWJ1Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEph
dmFTY3JpcHRDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxKYXZhU2NyaXB0Q2FsbEZyYW1l
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4g
Y3JlYXRlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjYWxsRnJhbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEphdmFTY3JpcHRDYWxsRnJhbWUoZGVidWdnZXJDb250ZXh0LCBjYWxsRnJhbWUpKTsKKyAg
ICB9CisgICAgfkphdmFTY3JpcHRDYWxsRnJhbWUoKTsKKworICAgIEphdmFTY3JpcHRDYWxsRnJh
bWUqIGNhbGxlcigpOworCisgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdDsKKyAgICBpbnQg
bGluZSgpIGNvbnN0OworICAgIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKKyAgICAKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NvcGVDaGFpbigpIGNvbnN0OworICAgIGludCBzY29w
ZVR5cGUoaW50IHNjb3BlSW5kZXgpIGNvbnN0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
aGlzT2JqZWN0KCkgY29uc3Q7CisgICAgCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbik7CisgICAgCitwcml2YXRlOgorICAgIEphdmFT
Y3JpcHRDYWxsRnJhbWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNhbGxGcmFtZSk7CisKKyAgICBSZWZQdHI8SmF2YVNjcmlw
dENhbGxGcmFtZT4gbV9jYWxsZXI7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1f
ZGVidWdnZXJDb250ZXh0OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbEZy
YW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisKKyNlbmRpZiAvLyBKYXZhU2NyaXB0Q2FsbEZyYW1lX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggM2M5ZjA1My4uMDk4
YzNkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTM0
LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCkBAIC0yMzIsNiArMjMzLDExIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZVY4KCkKICNlbmRpZgogfQogCitQYXNzUmVmUHRy
PEphdmFTY3JpcHRDYWxsRnJhbWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKHY4OjpEZWJ1Zzo6
R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY3VycmVudENh
bGxGcmFtZVY4KCkpKTsgCit9CisKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01l
c3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIFNjcmlwdERl
YnVnU2VydmVyOjpzaGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA5MzllMDBjLi5iYjExN2FkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC00NCw2ICs0NCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKIGNs
YXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwogCkBAIC05Niw2ICs5Nyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihN
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikgeyBz
X21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7
IH0KIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjgoKTsKKyAg
ICBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGN1cnJlbnRDYWxsRnJhbWUoKTsKIAog
cHJpdmF0ZToKICAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCmluZGV4
IDE1NTQzMWMuLjRjMDkxYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAK
ICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiVjhEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlY4SmF2YVNjcmlwdENhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJW
OFN0b3JhZ2UuaCIKQEAgLTE1OCw3ICsxNTksNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJ
bmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmRDYWxsYmFjayhjb25zdAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZy
YW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMo
IkluamVjdGVkU2NyaXB0SG9zdC5jdXJyZW50Q2FsbEZyYW1lKCkiKTsKLSAgICByZXR1cm4gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWVWOCgpOworICAgIHJldHVy
biB0b1Y4KFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lKCkpOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZh
dGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE2OTFkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1l
Q3VzdG9tLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4SmF2YVNjcmlwdENhbGxGcmFtZS5oIgorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SmF2YVNjcmlwdENh
bGxGcmFtZTo6ZXZhbHVhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIElOQ19TVEFUUygiVjhKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlQ2FsbGJhY2soKSIp
OworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGltcGwgPSBWOEphdmFTY3JpcHRDYWxsRnJhbWU6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFN0cmluZyBleHByZXNzaW9uID0gdG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgIHJldHVybiBp
bXBsLT5ldmFsdWF0ZShleHByZXNzaW9uKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbkFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElO
Q19TVEFUUygiVjhKYXZhU2NyaXB0Q2FsbEZyYW1lLnNjb3BlQ2hhaW5BY2Nlc3NvckdldHRlcigp
Iik7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogaW1wbCA9IFY4SmF2YVNjcmlwdENhbGxGcmFt
ZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGltcGwtPnNjb3BlQ2hhaW4o
KTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SmF2YVNjcmlwdENhbGxGcmFtZTo6c2Nv
cGVUeXBlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RB
VFMoIlY4SmF2YVNjcmlwdENhbGxGcmFtZS5zY29wZVR5cGVDYWxsYmFjaygpIik7CisgICAgSmF2
YVNjcmlwdENhbGxGcmFtZSogaW1wbCA9IFY4SmF2YVNjcmlwdENhbGxGcmFtZTo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgaW50IHNjb3BlSW5kZXggPSBhcmdzWzBdLT5JbnQzMlZhbHVl
KCk7CisgICAgcmV0dXJuIHY4OjpJbnQzMjo6TmV3KGltcGwtPnNjb3BlVHlwZShzY29wZUluZGV4
KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnRo
aXNPYmplY3RBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIlY4SmF2YVNjcmlwdENh
bGxGcmFtZS50aGlzT2JqZWN0QWNjZXNzb3JHZXR0ZXIoKSIpOworICAgIEphdmFTY3JpcHRDYWxs
RnJhbWUqIGltcGwgPSBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOworICAgIHJldHVybiBpbXBsLT50aGlzT2JqZWN0KCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGVBY2Nlc3NvckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAg
ICBJTkNfU1RBVFMoIlY4SmF2YVNjcmlwdENhbGxGcmFtZS50eXBlQWNjZXNzb3JHZXR0ZXIoKSIp
OworICAgIHJldHVybiB2OFN0cmluZygiZnVuY3Rpb24iKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCmluZGV4IDYzOWVjYzkuLjI4ZjRmMzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCkBAIC0yNiwxMiAr
MjYsMjEgQEAKIG1vZHVsZSBpbnNwZWN0b3IgewogCiAgICAgaW50ZXJmYWNlIFtDb25kaXRpb25h
bD1KQVZBU0NSSVBUX0RFQlVHR0VSLCBPbWl0Q29uc3RydWN0b3JdIEphdmFTY3JpcHRDYWxsRnJh
bWUgeworCisgICAgICAgIC8vIFNjb3BlIHR5cGUKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgR0xPQkFMX1NDT1BFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9DQUxf
U0NPUEUgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBXSVRIX1NDT1BFID0gMjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU1VSRV9TQ09QRSA9IDM7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENBVENIX1NDT1BFID0gNDsKKwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGV2YWx1YXRlKGluIERPTVN0cmluZyBzY3JpcHQpOwogCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lIGNhbGxlcjsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGxvbmcgc291cmNlSUQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25n
IGxpbmU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBz
Y29wZUNoYWluOworICAgICAgICBbQ3VzdG9tXSB1bnNpZ25lZCBzaG9ydCBzY29wZVR5cGUoaW4g
aW50IHNjb3BlSW5kZXgpOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRl
cl0gT2JqZWN0IHRoaXNPYmplY3Q7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgZnVuY3Rpb25OYW1lOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRl
cl0gRE9NU3RyaW5nIHR5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMKaW5kZXggMDgxMzU2MS4uODk4NGQwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtODQ1LDM1ICs4NDUsMzUgQEAgSW5q
ZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihpZCwgY2FsbEZyYW1lKQogaWYg
KGpzRW5naW5lID09PSAidjgiKSB7CiAKIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnBy
b3RvdHlwZSA9IHsKLSAgICAKLQogICAgIF93cmFwU2NvcGVDaGFpbjogZnVuY3Rpb24oY2FsbEZy
YW1lKQogICAgIHsKLSAgICAgICAgdmFyIFNjb3BlVHlwZSA9IHsgR2xvYmFsOiAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBMb2NhbDogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
V2l0aDogMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZTogMywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2F0Y2g6IDQgfTsKKyAgICAgICAgY29uc3QgR0xPQkFMX1NDT1BF
ID0gMDsKKyAgICAgICAgY29uc3QgTE9DQUxfU0NPUEUgPSAxOworICAgICAgICBjb25zdCBXSVRI
X1NDT1BFID0gMjsKKyAgICAgICAgY29uc3QgQ0xPU1VSRV9TQ09QRSA9IDM7CisgICAgICAgIGNv
bnN0IENBVENIX1NDT1BFID0gNDsKKyAgICAKICAgICAgICAgdmFyIHNjb3BlQ2hhaW4gPSBjYWxs
RnJhbWUuc2NvcGVDaGFpbjsKICAgICAgICAgdmFyIHNjb3BlQ2hhaW5Qcm94eSA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpICs9IDIpIHsKLSAg
ICAgICAgICAgIHZhciBzY29wZVR5cGUgPSBzY29wZUNoYWluW2ldOwotICAgICAgICAgICAgdmFy
IHNjb3BlT2JqZWN0ID0gc2NvcGVDaGFpbltpICsgMV07Ci0gICAgICAgICAgICB2YXIgc2NvcGVP
YmplY3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2JqZWN0
LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogKGkgKyAxKSB9LCB0cnVlKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZUNoYWluLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgc2NvcGVUeXBlID0gY2FsbEZyYW1lLnNjb3BlVHlwZShpKTsKKyAgICAgICAg
ICAgIHZhciBzY29wZU9iamVjdCA9IHNjb3BlQ2hhaW5baV07CisgICAgICAgICAgICB2YXIgc2Nv
cGVPYmplY3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2Jq
ZWN0LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogaSB9LCB0cnVlKTsKIAogICAg
ICAgICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOwogICAgICAgICAgICAgc3dpdGNo
KHNjb3BlVHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBMT0NBTF9TQ09QRTogewogICAgICAgICAgICAgICAgICAgICBm
b3VuZExvY2FsU2NvcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFBy
b3h5LmlzTG9jYWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5
LnRoaXNPYmplY3QgPSBJbmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdChjYWxsRnJhbWUu
dGhpc09iamVjdCwgeyBjYWxsRnJhbWU6IHRoaXMuaWQsIHRoaXNPYmplY3Q6IHRydWUgfSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5DbG9zdXJlOiB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBDTE9TVVJFX1NDT1BFOiB7CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0UHJveHku
aXNDbG9zdXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLldpdGg6IHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFdJVEhfU0NPUEU6CisgICAgICAgICAgICAgICAgY2FzZSBDQVRDSF9TQ09Q
RTogewogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzV2l0aEJsb2NrID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQo=
</data>
<flag name="review"
          id="37375"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53656</attachid>
            <date>2010-04-19 00:36:41 -0700</date>
            <delta_ts>2010-04-19 10:00:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>v8-call-frame2.patch</filename>
            <type>text/plain</type>
            <size>31232</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzI3ZmNlMC4uNjMwZDgzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMC0wNC0xNyAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgSmF2YVNjcmlwdENh
bGxGcmFtZSB0aGF0IHdvcmtzIGZvciB2OC4KKyAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgYmlu
ZGluZyBmb3IgdjggYWxsb3dzIHRvIG1ha2UgZXZhbHVhdGlvbnMgb24KKyAgICAgICAgY2FsbCBm
cmFtZXMgYW5kIHByb3RlY3RzIGFjY2VzcyB0byB0aGUgZGVidWdnZXIgY29udGV4dCBmcm9tCisg
ICAgICAgIGluc3BlY3RlZCBjb250ZXh0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc1NQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFT
Y3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENh
bGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjp+SmF2YVNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlw
dENhbGxGcmFtZTo6c291cmNlSUQpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxG
cmFtZTo6bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5j
dGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVD
aGFpbik6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0
OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlY4SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW5BY2Nlc3NvckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVj
dEFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SmF2YVNjcmlwdENhbGxGcmFt
ZTo6dHlwZUFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdENh
bGxGcmFtZS5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKwogMjAxMC0wNC0x
OCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGMx
YTU2MGIuLmM1NjRhZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTgwLDkgKzE4MCw2
IEBACiAgICAgICAnLi4vZG9tL0V2ZW50VGFyZ2V0LmlkbCcsCiAgICAgICAnLi4vaHRtbC9Wb2lk
Q2FsbGJhY2suaWRsJywKIAotICAgICAgIyBKU0Mtb25seS4KLSAgICAgICcuLi9pbnNwZWN0b3Iv
SmF2YVNjcmlwdENhbGxGcmFtZS5pZGwnLAotCiAgICAgICAjIEJpbmRpbmdzIHdpdGggY3VzdG9t
IE9iamVjdGl2ZS1DIGltcGxlbWVudGF0aW9ucy4KICAgICAgICcuLi9wYWdlL0Fic3RyYWN0Vmll
dy5pZGwnLAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGZiODg4N2MuLjU5MzM2NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NTgsNiArNzU4LDcgQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbmRleGVkRGF0YWJhc2VSZXF1ZXN0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5jcHAnLApA
QCAtODA0LDYgKzgwNSw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3JhcHBlcldv
cmxkLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9Jc29sYXRlZFdvcmxkLmgnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy92OC9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L01h
aW5UaHJlYWRET01EYXRhLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvTWFpblRocmVh
ZERPTURhdGEuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20u
Y3BwCmluZGV4IGFmYmRmNWQuLjA4MGY3MzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKQEAgLTg1LDYgKzg1LDEyIEBAIEpT
VmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKK0pTVmFs
dWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpCit7CisgICAgLy8gRklYTUUoMzc2NjMpOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdGhl
IHdheSBpdCdzIGRvbmUgaW4gdGhlIEluamVjdGVkU2NpcHQuanMKKyAgICByZXR1cm4ganNOdWxs
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9KYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MzIxYgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAK
QEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFTY3Jp
cHRDYWxsRnJhbWUuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSmF2YVNjcmlwdENh
bGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBkZWJ1
Z2dlckNvbnRleHQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY2FsbEZyYW1lKQorICAgIDogbV9k
ZWJ1Z2dlckNvbnRleHQoZGVidWdnZXJDb250ZXh0KQorICAgICwgbV9jYWxsRnJhbWUoY2FsbEZy
YW1lKQoreworfQorCitKYXZhU2NyaXB0Q2FsbEZyYW1lOjp+SmF2YVNjcmlwdENhbGxGcmFtZSgp
Cit7Cit9CisKK0phdmFTY3JpcHRDYWxsRnJhbWUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmNhbGxl
cigpCit7CisgICAgaWYgKCFtX2NhbGxlcikgeworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9kZWJ1
Z2dlckNvbnRleHQuZ2V0KCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FsbGVy
RnJhbWUgPSBtX2NhbGxGcmFtZS5nZXQoKS0+R2V0KHY4U3RyaW5nKCJjYWxsZXIiKSk7CisgICAg
ICAgIGlmICghY2FsbGVyRnJhbWUtPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgbV9jYWxsZXIgPSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUobV9kZWJ1Z2dl
ckNvbnRleHQuZ2V0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY2FsbGVyRnJhbWUp
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fY2FsbGVyLmdldCgpOworfQorCitpbnQgSmF2YVNjcmlw
dENhbGxGcmFtZTo6c291cmNlSUQoKSBjb25zdAoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fZGVidWdnZXJD
b250ZXh0LmdldCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gbV9jYWxs
RnJhbWUuZ2V0KCktPkdldCh2OFN0cmluZygic291cmNlSUQiKSk7CisgICAgaWYgKHJlc3VsdC0+
SXNJbnQzMigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT5JbnQzMlZhbHVlKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2ludCBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpsaW5lKCkgY29uc3QKK3sKKyAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNv
bnRleHRTY29wZShtX2RlYnVnZ2VyQ29udGV4dC5nZXQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlc3VsdCA9IG1fY2FsbEZyYW1lLmdldCgpLT5HZXQodjhTdHJpbmcoImxpbmUiKSk7
CisgICAgaWYgKHJlc3VsdC0+SXNJbnQzMigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT5JbnQz
MlZhbHVlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fZGVidWdnZXJDb250ZXh0
LmdldCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gbV9jYWxsRnJhbWUu
Z2V0KCktPkdldCh2OFN0cmluZygiZnVuY3Rpb25OYW1lIikpOworICAgIHJldHVybiB0b1dlYkNv
cmVTdHJpbmcocmVzdWx0KTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IEphdmFTY3JpcHRD
YWxsRnJhbWU6OnNjb3BlQ2hhaW4oKSBjb25zdAoreworICAgIHY4OjpIYW5kbGU8djg6OkFycmF5
PiBzY29wZUNoYWluID0gdjg6OkhhbmRsZTx2ODo6QXJyYXk+OjpDYXN0KG1fY2FsbEZyYW1lLmdl
dCgpLT5HZXQodjhTdHJpbmcoInNjb3BlQ2hhaW4iKSkpOworICAgIHY4OjpIYW5kbGU8djg6OkFy
cmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhzY29wZUNoYWluLT5MZW5ndGgoKSk7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNjb3BlQ2hhaW4tPkxlbmd0aCgpOyBpKyspCisgICAg
ICAgIHJlc3VsdC0+U2V0KGksIHNjb3BlQ2hhaW4tPkdldChpKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW50IEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZShpbnQgc2NvcGVJbmRl
eCkgY29uc3QKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NvcGVUeXBlID0gdjg6Okhh
bmRsZTx2ODo6QXJyYXk+OjpDYXN0KG1fY2FsbEZyYW1lLmdldCgpLT5HZXQodjhTdHJpbmcoInNj
b3BlVHlwZSIpKSk7CisgICAgcmV0dXJuIHNjb3BlVHlwZS0+R2V0KHNjb3BlSW5kZXgpLT5JbnQz
MlZhbHVlKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBKYXZhU2NyaXB0Q2FsbEZyYW1l
Ojp0aGlzT2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWxsRnJhbWUuZ2V0KCktPkdl
dCh2OFN0cmluZygidGhpc09iamVjdCIpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IEph
dmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbikKK3sK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZXZhbEZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+OjpDYXN0KG1fY2FsbEZyYW1lLmdldCgpLT5HZXQodjhTdHJpbmcoImV2YWx1
YXRlIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyB2OFN0cmluZyhl
eHByZXNzaW9uKSB9OworICAgIHJldHVybiBldmFsRnVuY3Rpb24tPkNhbGwobV9jYWxsRnJhbWUu
Z2V0KCksIDEsIGFyZ3YpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSmF2YVNjcmlwdENhbGxGcmFtZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9KYXZhU2Ny
aXB0Q2FsbEZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2NTdm
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvSmF2YVNjcmlwdENhbGxG
cmFtZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhU2NyaXB0Q2FsbEZyYW1lX2gKKyNk
ZWZpbmUgSmF2YVNjcmlwdENhbGxGcmFtZV9oCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKworI2luY2x1ZGUgIk93bkhhbmRsZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8djgtZGVidWcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBKYXZhU2NyaXB0Q2FsbEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8SmF2YVNjcmlwdENhbGxG
cmFtZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJh
bWU+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBkZWJ1Z2dlckNvbnRleHQsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKYXZhU2NyaXB0Q2FsbEZyYW1lKGRlYnVnZ2VyQ29udGV4dCwgY2FsbEZyYW1lKSk7
CisgICAgfQorICAgIH5KYXZhU2NyaXB0Q2FsbEZyYW1lKCk7CisKKyAgICBKYXZhU2NyaXB0Q2Fs
bEZyYW1lKiBjYWxsZXIoKTsKKworICAgIGludHB0cl90IHNvdXJjZUlEKCkgY29uc3Q7CisgICAg
aW50IGxpbmUoKSBjb25zdDsKKyAgICBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7CisgICAg
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNjb3BlQ2hhaW4oKSBjb25zdDsKKyAgICBpbnQg
c2NvcGVUeXBlKGludCBzY29wZUluZGV4KSBjb25zdDsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdGhpc09iamVjdCgpIGNvbnN0OworICAgIAorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pOworICAgIAorcHJpdmF0ZToKKyAgICBK
YXZhU2NyaXB0Q2FsbEZyYW1lKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4
dCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjYWxsRnJhbWUpOworCisgICAgUmVmUHRyPEphdmFT
Y3JpcHRDYWxsRnJhbWU+IG1fY2FsbGVyOworICAgIE93bkhhbmRsZTx2ODo6Q29udGV4dD4gbV9k
ZWJ1Z2dlckNvbnRleHQ7CisgICAgT3duSGFuZGxlPHY4OjpPYmplY3Q+IG1fY2FsbEZyYW1lOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisKKyNlbmRpZiAvLyBKYXZhU2NyaXB0Q2FsbEZyYW1lX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggM2M5ZjA1My4uNTRkNzY5NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTM0LDYgKzM0
LDcgQEAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CkBAIC03Myw3ICs3NCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNj
cmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQogCiAgICAgaWYgKCFtX2xp
c3RlbmVyc01hcC5zaXplKCkpIHsKICAgICAgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxl
ZCgpOwotICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3JpcHQtPklzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPklzVW5kZWZpbmVkKCkpOwog
ICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmU2NyaXB0RGVidWdTZXJ2ZXI6
Om9uVjhEZWJ1Z01lc3NhZ2UpOwogICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhh
bmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlzcGF0Y2gsIDEwMCAvKiBt
cyAqLyk7CiAgICAgfQpAQCAtODMsNyArODQsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjph
ZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnZSkKICAg
ICBTdHJpbmcgY29udGV4dERhdGEgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRl
eHQtPkdldERhdGEoKSk7CiAgICAgbV9jb250ZXh0RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRl
eHREYXRhKTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rp
b24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQo
djg6OlN0cmluZzo6TmV3KCJnZXRTY3JpcHRzIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gZ2V0U2NyaXB0c0Z1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
bV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZ2V0U2NyaXB0cyIp
KSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gdjg6OkRlYnVnOjpDYWxsKGdl
dFNjcmlwdHNGdW5jdGlvbik7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTI1LDcgKzEyNiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlCiAgICAgYXJn
cy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29uZGl0aW9uIiksIHY4U3RyaW5nKGJyZWFrcG9pbnQu
Y29uZGl0aW9uKSk7CiAgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2
ODo6Qm9vbGVhbjo6TmV3KGJyZWFrcG9pbnQuZW5hYmxlZCkpOwogCi0gICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFr
cG9pbnQiKSkpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50RnVu
Y3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0Lmdl
dCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRCcmVha3BvaW50IikpKTsKICAgICB2ODo6RGVi
dWc6OkNhbGwoc2V0QnJlYWtwb2ludEZ1bmN0aW9uLCBhcmdzKTsKICNlbmRpZgogfQpAQCAtMTQx
LDcgKzE0Miw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51CiAgICAgYXJncy0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygic2NyaXB0SWQiKSwgdjhTdHJpbmcoc291cmNlSUQpKTsKICAgICBhcmdzLT5T
ZXQodjg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2VyOjpOZXcobGluZU51
bWJlcikpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHJlbW92ZUJyZWFrcG9pbnRG
dW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInJlbW92ZUJyZWFrcG9pbnQiKSkpOworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiByZW1vdmVCcmVha3BvaW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6
TmV3KCJyZW1vdmVCcmVha3BvaW50IikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwocmVtb3ZlQnJl
YWtwb2ludEZ1bmN0aW9uLCBhcmdzKTsKICNlbmRpZgogfQpAQCAtMTU0LDcgKzE1NSw3IEBAIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogICAgIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQo
KTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7
CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQg
PSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6
OlN0cmluZzo6TmV3KCJjbGVhckJyZWFrcG9pbnRzIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4gc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
Pjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJjbGVh
ckJyZWFrcG9pbnRzIikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludHNBY3Rp
dmF0ZWQpOwogI2VuZGlmCiB9CkBAIC0xNjksNyArMTcwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBlbmFibGVkKQogCiAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKICAgICBhcmdzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOwot
ICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3Ry
aW5nOjpOZXcoInNldEJyZWFrcG9pbnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQgPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJz
ZXRCcmVha3BvaW50c0FjdGl2YXRlZCIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkLCBhcmdzKTsKICNlbmRpZgogfQpAQCAtMjE4LDIwICsyMTksMjUgQEAg
U2NyaXB0U3RhdGUqIFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lU3RhdGUoKQog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1l
VjgoKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIGlmICghbV9j
dXJyZW50Q2FsbEZyYW1lLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENhbGxG
cmFtZTsKKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZS5nZXQoKS5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7CiAKICAgICAvLyBDaGVjayBvbiBh
IGJwLgotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rp
b24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQo
djg6OlN0cmluZzo6TmV3KCJjdXJyZW50Q2FsbEZyYW1lIikpKTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlIH07Ci0gICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHJlc3VsdCA9IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbi0+Q2FsbChtX2RlYnVn
Z2VyU2NyaXB0LCAxLCBhcmd2KTsKLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSB2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+OjpOZXcocmVzdWx0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4gY3VycmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNh
c3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENh
bGxGcmFtZSIpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVj
dXRpb25TdGF0ZS5nZXQoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBj
dXJyZW50Q2FsbEZyYW1lRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwg
YXJndik7CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLnNldChyZXN1bHQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiAjZWxzZQogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICNlbmRp
ZgogfQogCitQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IFNjcmlwdERlYnVnU2VydmVy
OjpjdXJyZW50Q2FsbEZyYW1lKCkKK3sKKyAgICByZXR1cm4gSmF2YVNjcmlwdENhbGxGcmFtZTo6
Y3JlYXRlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY3VycmVudENhbGxGcmFtZVY4KCkpKTsgCit9CisKIHZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdl
KQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2Fn
ZShtZXNzYWdlKTsKQEAgLTI4OCwxNCArMjk0LDE0IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmhhbmRsZVY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSkK
ICAgICAgICAgICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4OjpEZWJ1
Zzo6R2V0RGVidWdDb250ZXh0KCkpOwogICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3KCk7CiAgICAgICAgICAgICAgICAgYXJncy0+U2V0
KHY4OjpTdHJpbmc6Ok5ldygiZXZlbnREYXRhIiksIG1lc3NhZ2UuR2V0RXZlbnREYXRhKCkpOwot
ICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBvbkFmdGVyQ29tcGlsZUZ1
bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+
R2V0KHY4OjpTdHJpbmc6Ok5ldygiZ2V0QWZ0ZXJDb21waWxlU2NyaXB0IikpKTsKKyAgICAgICAg
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gb25BZnRlckNvbXBpbGVGdW5jdGlvbiA9
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdl
dCh2ODo6U3RyaW5nOjpOZXcoImdldEFmdGVyQ29tcGlsZVNjcmlwdCIpKSk7CiAgICAgICAgICAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbWVzc2FnZS5HZXRFeGVjdXRp
b25TdGF0ZSgpLCBhcmdzIH07Ci0gICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlID0gb25BZnRlckNvbXBpbGVGdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LCAy
LCBhcmd2KTsKKyAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBv
bkFmdGVyQ29tcGlsZUZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDIsIGFy
Z3YpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CiAgICAgICAg
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHZhbHVlKTsKICAgICAgICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291
cmNlKGxpc3RlbmVyLCBvYmplY3QpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLkdl
dEV2ZW50KCkgPT0gdjg6OkJyZWFrKSB7Ci0gICAgICAgICAgICAgICAgbV9leGVjdXRpb25TdGF0
ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcobWVzc2FnZS5HZXRFeGVjdXRpb25T
dGF0ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLnNldChtZXNzYWdlLkdl
dEV4ZWN1dGlvblN0YXRlKCkpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0
YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpOwogICAgICAgICAgICAgICAgIGxpc3Rl
bmVyLT5kaWRQYXVzZSgpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRl
ID0gMDsKQEAgLTMxOSwyNCArMzI1LDE4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3Bh
dGNoRGlkUGFyc2VTb3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4CiAKIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmVuc3VyZURlYnVnZ2VyU2NyaXB0Q29tcGlsZWQoKQogewot
ICAgIGlmIChtX2RlYnVnZ2VyU2NyaXB0LklzRW1wdHkoKSkgeworICAgIGlmIChtX2RlYnVnZ2Vy
U2NyaXB0LmdldCgpLklzRW1wdHkoKSkgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0ID0gdjg6OkRl
YnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKICAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOwotICAgICAgICBtX2RlYnVnZ2VyU2NyaXB0ID0gdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHY4OjpTY3JpcHQ6OkNvbXBpbGUodjhTdHJpbmcobV9kZWJ1Z2dlclNjcmlwdFNvdXJjZSkpLT5S
dW4oKSkpOworICAgICAgICBtX2RlYnVnZ2VyU2NyaXB0LnNldCh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KHY4OjpTY3JpcHQ6OkNvbXBpbGUodjhTdHJpbmcobV9kZWJ1Z2dlclNjcmlwdFNv
dXJjZSkpLT5SdW4oKSkpOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlk
UmVzdW1lKCkKIHsKLSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZS5Jc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLkRpc3Bvc2UoKTsKLSAgICAgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lLkNsZWFyKCk7Ci0gICAgfQotICAgIGlmICghbV9leGVjdXRpb25TdGF0ZS5Jc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9leGVjdXRpb25TdGF0ZS5EaXNwb3NlKCk7Ci0gICAgICAgIG1fZXhl
Y3V0aW9uU3RhdGUuQ2xlYXIoKTsKLSAgICB9CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLmNsZWFy
KCk7CisgICAgbV9leGVjdXRpb25TdGF0ZS5jbGVhcigpOwogfQogCiAvLyBDcmVhdGUgdGhlIHV0
aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVy
bmFsbHkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA5MzllMDBj
Li4wNDg1N2U0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2Vy
dmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0z
Myw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAorI2luY2x1
ZGUgIk93bkhhbmRsZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U2NyaXB0QnJlYWtwb2ludC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCkBAIC00NCw2ICs0
NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFt
ZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwogCkBAIC05Niw2ICs5
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlcihNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cikgeyBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gbWVzc2FnZUxvb3BEaXNwYXRjaEhh
bmRsZXI7IH0KIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjgo
KTsKKyAgICBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGN1cnJlbnRDYWxsRnJhbWUo
KTsKIAogcHJpdmF0ZToKICAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOwpAQCAtMTMxLDEwICsxMzQs
MTAgQEAgcHJpdmF0ZToKICAgICBDb250ZXh0RGF0YU1hcCBtX2NvbnRleHREYXRhTWFwOwogICAg
IFN0cmluZyBtX2RlYnVnZ2VyU2NyaXB0U291cmNlOwogICAgIFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IG1fZGVidWdnZXJTY3JpcHQ7CisgICAgT3duSGFuZGxlPHY4OjpPYmplY3Q+IG1fZGVidWdn
ZXJTY3JpcHQ7CiAgICAgU2NyaXB0U3RhdGUqIG1fY3VycmVudENhbGxGcmFtZVN0YXRlOwotICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gbV9jdXJyZW50Q2FsbEZyYW1lOwotICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZXhlY3V0aW9uU3RhdGU7CisgICAgT3duSGFuZGxlPHY4
OjpWYWx1ZT4gbV9jdXJyZW50Q2FsbEZyYW1lOworICAgIE93bkhhbmRsZTx2ODo6T2JqZWN0PiBt
X2V4ZWN1dGlvblN0YXRlOwogCiAgICAgc3RhdGljIE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVy
IHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCmluZGV4
IDE1NTQzMWMuLjRjMDkxYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAK
ICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiVjhEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlY4SmF2YVNjcmlwdENhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJW
OFN0b3JhZ2UuaCIKQEAgLTE1OCw3ICsxNTksNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJ
bmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmRDYWxsYmFjayhjb25zdAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZy
YW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMo
IkluamVjdGVkU2NyaXB0SG9zdC5jdXJyZW50Q2FsbEZyYW1lKCkiKTsKLSAgICByZXR1cm4gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWVWOCgpOworICAgIHJldHVy
biB0b1Y4KFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lKCkpOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZh
dGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE2OTFkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1l
Q3VzdG9tLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4SmF2YVNjcmlwdENhbGxGcmFtZS5oIgorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SmF2YVNjcmlwdENh
bGxGcmFtZTo6ZXZhbHVhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIElOQ19TVEFUUygiVjhKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlQ2FsbGJhY2soKSIp
OworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGltcGwgPSBWOEphdmFTY3JpcHRDYWxsRnJhbWU6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFN0cmluZyBleHByZXNzaW9uID0gdG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgIHJldHVybiBp
bXBsLT5ldmFsdWF0ZShleHByZXNzaW9uKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbkFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElO
Q19TVEFUUygiVjhKYXZhU2NyaXB0Q2FsbEZyYW1lLnNjb3BlQ2hhaW5BY2Nlc3NvckdldHRlcigp
Iik7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogaW1wbCA9IFY4SmF2YVNjcmlwdENhbGxGcmFt
ZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGltcGwtPnNjb3BlQ2hhaW4o
KTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SmF2YVNjcmlwdENhbGxGcmFtZTo6c2Nv
cGVUeXBlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RB
VFMoIlY4SmF2YVNjcmlwdENhbGxGcmFtZS5zY29wZVR5cGVDYWxsYmFjaygpIik7CisgICAgSmF2
YVNjcmlwdENhbGxGcmFtZSogaW1wbCA9IFY4SmF2YVNjcmlwdENhbGxGcmFtZTo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgaW50IHNjb3BlSW5kZXggPSBhcmdzWzBdLT5JbnQzMlZhbHVl
KCk7CisgICAgcmV0dXJuIHY4OjpJbnQzMjo6TmV3KGltcGwtPnNjb3BlVHlwZShzY29wZUluZGV4
KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnRo
aXNPYmplY3RBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIlY4SmF2YVNjcmlwdENh
bGxGcmFtZS50aGlzT2JqZWN0QWNjZXNzb3JHZXR0ZXIoKSIpOworICAgIEphdmFTY3JpcHRDYWxs
RnJhbWUqIGltcGwgPSBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOworICAgIHJldHVybiBpbXBsLT50aGlzT2JqZWN0KCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGVBY2Nlc3NvckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAg
ICBJTkNfU1RBVFMoIlY4SmF2YVNjcmlwdENhbGxGcmFtZS50eXBlQWNjZXNzb3JHZXR0ZXIoKSIp
OworICAgIHJldHVybiB2OFN0cmluZygiZnVuY3Rpb24iKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCmluZGV4IDYzOWVjYzkuLjI4ZjRmMzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsCkBAIC0yNiwxMiAr
MjYsMjEgQEAKIG1vZHVsZSBpbnNwZWN0b3IgewogCiAgICAgaW50ZXJmYWNlIFtDb25kaXRpb25h
bD1KQVZBU0NSSVBUX0RFQlVHR0VSLCBPbWl0Q29uc3RydWN0b3JdIEphdmFTY3JpcHRDYWxsRnJh
bWUgeworCisgICAgICAgIC8vIFNjb3BlIHR5cGUKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgR0xPQkFMX1NDT1BFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9DQUxf
U0NPUEUgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBXSVRIX1NDT1BFID0gMjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU1VSRV9TQ09QRSA9IDM7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENBVENIX1NDT1BFID0gNDsKKwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGV2YWx1YXRlKGluIERPTVN0cmluZyBzY3JpcHQpOwogCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lIGNhbGxlcjsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGxvbmcgc291cmNlSUQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25n
IGxpbmU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBz
Y29wZUNoYWluOworICAgICAgICBbQ3VzdG9tXSB1bnNpZ25lZCBzaG9ydCBzY29wZVR5cGUoaW4g
aW50IHNjb3BlSW5kZXgpOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRl
cl0gT2JqZWN0IHRoaXNPYmplY3Q7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgZnVuY3Rpb25OYW1lOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRl
cl0gRE9NU3RyaW5nIHR5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMKaW5kZXggMDgxMzU2MS4uODk4NGQwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtODQ1LDM1ICs4NDUsMzUgQEAgSW5q
ZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihpZCwgY2FsbEZyYW1lKQogaWYg
KGpzRW5naW5lID09PSAidjgiKSB7CiAKIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnBy
b3RvdHlwZSA9IHsKLSAgICAKLQogICAgIF93cmFwU2NvcGVDaGFpbjogZnVuY3Rpb24oY2FsbEZy
YW1lKQogICAgIHsKLSAgICAgICAgdmFyIFNjb3BlVHlwZSA9IHsgR2xvYmFsOiAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBMb2NhbDogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
V2l0aDogMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZTogMywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2F0Y2g6IDQgfTsKKyAgICAgICAgY29uc3QgR0xPQkFMX1NDT1BF
ID0gMDsKKyAgICAgICAgY29uc3QgTE9DQUxfU0NPUEUgPSAxOworICAgICAgICBjb25zdCBXSVRI
X1NDT1BFID0gMjsKKyAgICAgICAgY29uc3QgQ0xPU1VSRV9TQ09QRSA9IDM7CisgICAgICAgIGNv
bnN0IENBVENIX1NDT1BFID0gNDsKKyAgICAKICAgICAgICAgdmFyIHNjb3BlQ2hhaW4gPSBjYWxs
RnJhbWUuc2NvcGVDaGFpbjsKICAgICAgICAgdmFyIHNjb3BlQ2hhaW5Qcm94eSA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpICs9IDIpIHsKLSAg
ICAgICAgICAgIHZhciBzY29wZVR5cGUgPSBzY29wZUNoYWluW2ldOwotICAgICAgICAgICAgdmFy
IHNjb3BlT2JqZWN0ID0gc2NvcGVDaGFpbltpICsgMV07Ci0gICAgICAgICAgICB2YXIgc2NvcGVP
YmplY3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2JqZWN0
LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogKGkgKyAxKSB9LCB0cnVlKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZUNoYWluLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgc2NvcGVUeXBlID0gY2FsbEZyYW1lLnNjb3BlVHlwZShpKTsKKyAgICAgICAg
ICAgIHZhciBzY29wZU9iamVjdCA9IHNjb3BlQ2hhaW5baV07CisgICAgICAgICAgICB2YXIgc2Nv
cGVPYmplY3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2Jq
ZWN0LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogaSB9LCB0cnVlKTsKIAogICAg
ICAgICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOwogICAgICAgICAgICAgc3dpdGNo
KHNjb3BlVHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBMT0NBTF9TQ09QRTogewogICAgICAgICAgICAgICAgICAgICBm
b3VuZExvY2FsU2NvcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFBy
b3h5LmlzTG9jYWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5
LnRoaXNPYmplY3QgPSBJbmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdChjYWxsRnJhbWUu
dGhpc09iamVjdCwgeyBjYWxsRnJhbWU6IHRoaXMuaWQsIHRoaXNPYmplY3Q6IHRydWUgfSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5DbG9zdXJlOiB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBDTE9TVVJFX1NDT1BFOiB7CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0UHJveHku
aXNDbG9zdXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLldpdGg6IHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFdJVEhfU0NPUEU6CisgICAgICAgICAgICAgICAgY2FzZSBDQVRDSF9TQ09Q
RTogewogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzV2l0aEJsb2NrID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKaW5kZXggZmJkMjZkYi4uNzVjNTQ2
NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC0xNjcsNiAr
MTY3LDcgQEAgRGVidWdnZXJTY3JpcHQuX2ZyYW1lTWlycm9yVG9KU0NhbGxGcmFtZSA9IGZ1bmN0
aW9uKGZyYW1lTWlycm9yLCBjYWxsZXJGcmFtZSkKIAogICAgIC8vIEdldCBzY29wZSBjaGFpbiBh
cnJheSBpbiBmb3JtYXQ6IFs8c2NvcGUgdHlwZT4sIDxzY29wZSBvYmplY3Q+LCA8c2NvcGUgdHlw
ZT4sIDxzY29wZSBvYmplY3Q+LC4uLl0KICAgICB2YXIgc2NvcGVDaGFpbiA9IFtdOworICAgIHZh
ciBzY29wZVR5cGUgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lTWlycm9yLnNj
b3BlQ291bnQoKTsgaSsrKSB7CiAgICAgICAgIHZhciBzY29wZU1pcnJvciA9IGZyYW1lTWlycm9y
LnNjb3BlKGkpOwogICAgICAgICB2YXIgc2NvcGVPYmplY3RNaXJyb3IgPSBzY29wZU1pcnJvci5z
Y29wZU9iamVjdCgpOwpAQCAtMTc0LDEwICsxNzUsMTQgQEAgRGVidWdnZXJTY3JpcHQuX2ZyYW1l
TWlycm9yVG9KU0NhbGxGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lTWlycm9yLCBjYWxsZXJGcmFtZSkK
ICAgICAgICAgdmFyIHNjb3BlT2JqZWN0ID0ge307CiAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgcHJvcGVydGllcy5sZW5ndGg7IGorKykKICAgICAgICAgICAgIHNjb3BlT2JqZWN0W3Byb3Bl
cnRpZXNbal0ubmFtZSgpXSA9IHByb3BlcnRpZXNbal0udmFsdWVfOwotICAgICAgICBzY29wZUNo
YWluLnB1c2goc2NvcGVNaXJyb3Iuc2NvcGVUeXBlKCkpOworICAgICAgICBzY29wZVR5cGUucHVz
aChzY29wZU1pcnJvci5zY29wZVR5cGUoKSk7CiAgICAgICAgIHNjb3BlQ2hhaW4ucHVzaChzY29w
ZU9iamVjdCk7CiAgICAgfQogICAgIAorICAgIGZ1bmN0aW9uIGV2YWx1YXRlKGV4cHJlc3Npb24p
IHsKKyAgICAgICAgcmV0dXJuIGZyYW1lTWlycm9yLmV2YWx1YXRlKGV4cHJlc3Npb24sIGZhbHNl
KS52YWx1ZSgpOworICAgIH0KKyAgICAKICAgICByZXR1cm4gewogICAgICAgICAic291cmNlSUQi
OiBzb3VyY2VJRCwKICAgICAgICAgImxpbmUiOiBsaW5lLApAQCAtMTg1LDYgKzE5MCw4IEBAIERl
YnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUgPSBmdW5jdGlvbihmcmFtZU1p
cnJvciwgY2FsbGVyRnJhbWUpCiAgICAgICAgICJ0eXBlIjogImZ1bmN0aW9uIiwKICAgICAgICAg
InRoaXNPYmplY3QiOiB0aGlzT2JqZWN0LAogICAgICAgICAic2NvcGVDaGFpbiI6IHNjb3BlQ2hh
aW4sCisgICAgICAgICJzY29wZVR5cGUiOiBzY29wZVR5cGUsCisgICAgICAgICJldmFsdWF0ZSI6
IGV2YWx1YXRlLAogICAgICAgICAiY2FsbGVyIjogY2FsbGVyRnJhbWUKICAgICB9OwogfQo=
</data>
<flag name="review"
          id="37421"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>