<?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>34658</bug_id>
          
          <creation_ts>2010-02-05 13:09:50 -0800</creation_ts>
          <short_desc>[V8] Use toV8() for wrapping objects in a WorkerContext</short_desc>
          <delta_ts>2010-02-08 11:47:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188262</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-05 13:09:50 -0800</bug_when>
    <thetext>The main thing this requires is checking for the existence of a WorkerContextExecutionProxy in V8DOMWrapper::instantiateV8Object() prior to checking for a V8Proxy, since calling V8Proxy::retrieve() in a WorkerContext will crash us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188272</commentid>
    <comment_count>1</comment_count>
      <attachid>48254</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-05 13:42:41 -0800</bug_when>
    <thetext>Created attachment 48254
patch

Perf tests are still running, but I think this change is ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188431</commentid>
    <comment_count>2</comment_count>
      <attachid>48254</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-06 09:45:17 -0800</bug_when>
    <thetext>Comment on attachment 48254
patch

This looks great! Except:

&gt; +    // Get the WorkerContextExecutionProxy first. If we are in a WorkerContext and we try to call V8Proxy::retrieve(),
&gt; +    // we crash trying to retrieve a DOMWindow.
&gt; +    WorkerContextExecutionProxy* workerContextProxy = WorkerContextExecutionProxy::retrieve();

Are you sure this doesn&apos;t affect performance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188649</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-08 09:23:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 48254 [details])
&gt; This looks great! Except:
&gt; 
&gt; &gt; +    // Get the WorkerContextExecutionProxy first. If we are in a WorkerContext and we try to call V8Proxy::retrieve(),
&gt; &gt; +    // we crash trying to retrieve a DOMWindow.
&gt; &gt; +    WorkerContextExecutionProxy* workerContextProxy = WorkerContextExecutionProxy::retrieve();
&gt; 
&gt; Are you sure this doesn&apos;t affect performance?

I ran the dromaeo tests locally and the results were comparable with and without the change.  If there&apos;s anything else you&apos;d like me to run, please let me know :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188659</commentid>
    <comment_count>4</comment_count>
      <attachid>48254</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-08 09:45:16 -0800</bug_when>
    <thetext>Comment on attachment 48254
patch

ok. I trust you&apos;ll monitor the perf bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188708</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-08 11:47:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/54499</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48254</attachid>
            <date>2010-02-05 13:42:41 -0800</date>
            <delta_ts>2010-02-08 09:45:15 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>19984</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMDUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIFVuaWZ5IHRoZSBXb3JrZXJDb250ZXh0IFY4IG9iamVjdCB3cmFwcGluZyBjb2RlIHdpdGgK
KyAgICAgICAgdGhlIHN0YW5kYXJkIFY4IG9iamVjdCB3cmFwcGluZyBjb2RlLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDY1OAorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNv
bnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4Tm90aWZpY2F0aW9uQ2VudGVyOjpjcmVhdGVIVE1MTm90aWZpY2F0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZU5v
dGlmaWNhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorCiAyMDEwLTAx
LTE5ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1NDQ0MCkKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3
Miw2ICsyNzIsNyBAQAogIHB1YmxpYzoKICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOworICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CiAgIHN0YXRpYyAke25hdGl2ZVR5
cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcCgke25hdGl2ZVR5cGV9KiR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0
ZXJ9KTsKIEVORApAQCAtMzM2LDggKzMzNyw2IEBACiAgICAgfQogCiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgPDxFTkQpOwotCi0gIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKIH07CiAKICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoJHtuYXRpdmVUeXBlfSoke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7CkBAIC02MDgsNyAr
NjA3LDYgQEAKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBlLCBW
OERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSkpOwogRU5ECiAgICAgfSBlbHNpZiAo
JGNsYXNzSW5kZXggZXEgIkRFRElDQVRFRFdPUktFUkNPTlRFWFQiIG9yICRjbGFzc0luZGV4IGVx
ICJXT1JLRVJDT05URVhUIiBvciAkY2xhc3NJbmRleCBlcSAiU0hBUkVEV09SS0VSQ09OVEVYVCIp
IHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmgi
fSA9IDE7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBlLCBWOFdvcmtlckNvbnRleHQ6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpKTsKIEVORApAQCAtMTk1NCwxMiArMTk1Miw4IEBACiAKIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp3cmFwKCR7bmF0aXZlVHlwZX0qIGlt
cGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CiAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlcjsKLUVORAotICAgIGlmICghTmVlZHNXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHlUb1Y4
KCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwog
ICBWOFByb3h5KiBwcm94eSA9IDA7CiBFTkQKLSAgICB9CiAKICAgICBpZiAoSXNOb2RlU3ViVHlw
ZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CkBAIC0x
OTk3LDE3ICsxOTkxLDEwIEBACiAgICAgY29udGV4dC0+RW50ZXIoKTsKIEVORAogICAgIH0KLQot
ICAgIGlmIChOZWVkc1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eVRvVjgoJGludGVyZmFjZU5h
bWUpKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oIn0gPSAxOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICB3cmFwcGVy
ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojp0b1Y4KCR7d3JhcHBlclR5cGV9LCBpbXBs
KTsKLUVORAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgICAgCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgd3JhcHBlciA9IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJHt3cmFwcGVyVHlwZX0sIGltcGwp
OwogRU5ECi0gICAgfQogCiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwpAQCAtMjA1NSwxOSArMjA0Miw2IEBACiAg
ICAgfQogfQogCi1zdWIgTmVlZHNXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHlUb1Y4IHsKLSAg
ICAjIFRoZXNlIG9iamVjdHMgY2FuIGJlIGNvbnN0cnVjdGVkIHVuZGVyIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS4gVGhleSBuZWVkIHNwZWNpYWwKLSAgICAjIGhhbmRsaW5nLCBzaW5jZSBp
ZiB3ZSBjYWxsIFY4UHJveHk6OnJldHJpZXZlKCksIHdlIHdpbGwgY3Jhc2guCi0gICAgIyBGSVhN
RTogd2Vic29ja2V0PwotICAgICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7Ci0gICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTUNvcmVFeGNlcHRpb24iOwotICAgIHJldHVybiAxIGlm
ICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudEV4Y2VwdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGlu
dGVyZmFjZU5hbWUgZXEgIlJhbmdlRXhjZXB0aW9uIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJm
YWNlTmFtZSBlcSAiWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24iOwotICAgIHJldHVybiAxIGlmICRp
bnRlcmZhY2VOYW1lIGVxICJNZXNzYWdlUG9ydCI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN1YiBI
YXNDdXN0b21Ub1Y4SW1wbGVtZW50YXRpb24gewogICAgICMgRklYTUU6IFRoaXMgc3Vicm91dGlu
ZSBpcyBsYW1lLiBQcm9iYWJseSBzaG91bGQgYmUgYW4gLmlkbCBhdHRyaWJ1dGUgKEN1c3RvbVRv
VjgpPwogICAgICRkYXRhTm9kZSA9IHNoaWZ0OwpAQCAtMjA4OSw2ICsyMDYzLDcgQEAKICAgICBy
ZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRG9jdW1lbnQiOwogICAgIHJldHVybiAx
IGlmICRpbnRlcmZhY2VOYW1lIGVxICJTVkdFbGVtZW50IjsKICAgICByZXR1cm4gMSBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAiU2NyZWVuIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBl
cSAiV29ya2VyQ29udGV4dCI7CiAgICAgCiAgICAgIyBXZSBkb24ndCBnZW5lcmF0ZSBhIGN1c3Rv
bSBjb252ZXJ0ZXIgKGJ1dCBKU0MgZG9lcykgZm9yIHRoZSBmb2xsb3dpbmc6CiAgICAgcmV0dXJu
IDAgaWYgJGludGVyZmFjZU5hbWUgZXEgIkFic3RyYWN0V29ya2VyIjsKQEAgLTI3NzksMTggKzI3
NTQsNiBAQAogICAgICAgICByZXR1cm4gInJldHVybiAkdmFsdWUtPmRlc2VyaWFsaXplKCkiOwog
ICAgIH0KIAotICAgIGlmICgkdHlwZSBlcSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dCIgb3IgJHR5
cGUgZXEgIldvcmtlckNvbnRleHQiIG9yICR0eXBlIGVxICJTaGFyZWRXb3JrZXJDb250ZXh0Iikg
ewotICAgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9
ID0gMTsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
Ojpjb252ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoJHZhbHVlKSI7Ci0gICAgfQotCi0gICAg
aWYgKCR0eXBlIGVxICJXb3JrZXJMb2NhdGlvbiIgb3IgJHR5cGUgZXEgIldvcmtlck5hdmlnYXRv
ciIgb3IgJHR5cGUgZXEgIk5vdGlmaWNhdGlvbkNlbnRlciIpIHsKLSAgICAgICAgJGltcGxJbmNs
dWRlc3siV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgifSA9IDE7Ci0gICAgICAgIG15ICRj
bGFzc0luZGV4ID0gdWMoJHR5cGUpOwotCi0gICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgJHZhbHVlKSI7Ci0gICAgfQotCiAgICAgJGltcGxJbmNsdWRlc3sid3RmL1JlZkNv
dW50ZWQuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmUHRyLmgifSA9IDE7CiAg
ICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNTQ0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAKICNp
bmNsdWRlICJWOFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJWOFdlYlNvY2tldC5oIgogI2luY2x1
ZGUgIlY4V29ya2VyLmgiCisjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAi
VjhYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKICNpbmNsdWRlICJX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24u
aCIKQEAgLTI2NywxMyArMjY5LDE2IEBACiAKIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdy
YXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQogeworICAgIC8vIEdldCB0aGUgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5IGZpcnN0LiBJZiB3ZSBhcmUgaW4gYSBXb3JrZXJDb250ZXh0
IGFuZCB3ZSB0cnkgdG8gY2FsbCBWOFByb3h5OjpyZXRyaWV2ZSgpLAorICAgIC8vIHdlIGNyYXNo
IHRyeWluZyB0byByZXRyaWV2ZSBhIERPTVdpbmRvdy4KKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6cmV0cmlldmUoKTsKICAgICBpZiAoVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkg
ewogICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSB3cmFwcGVyIGNhY2hl
IGZvciBpc29sYXRlZCB3b3JsZHMuCiAgICAgICAgIHByb3h5ID0gMDsKICAgICAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgYSB3cmFwcGVyIGNhY2hlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQ/ICBX
ZSBzaG91bGQKICAgICAgICAgLy8gICAgICAgIHNlZSBpZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbnMg
YXJlIHdvcnRoIHdoaWxlLgogICAgICAgICAvLyBXZSdsbCBnZXQgb25lIG9uY2Ugd2UgZ2l2ZSB0
aGUgaXNvbGF0ZWQgY29udGV4dCBhIHByb3BlciB3aW5kb3cgc2hlbGwuCi0gICAgfSBlbHNlIGlm
ICghcHJveHkpCisgICAgfSBlbHNlIGlmICghcHJveHkgJiYgIXdvcmtlckNvbnRleHRQcm94eSkK
ICAgICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOwogCiAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGluc3RhbmNlOwpAQCAtMjgxLDcgKzI4NiwxMSBAQAogICAgICAgICAvLyBGSVhN
RTogRml4IHRoaXMgdG8gd29yayBwcm9wZXJseSB3aXRoIGlzb2xhdGVkIHdvcmxkcyAoc2VlIGFi
b3ZlKS4KICAgICAgICAgaW5zdGFuY2UgPSBwcm94eS0+d2luZG93U2hlbGwoKS0+Y3JlYXRlV3Jh
cHBlckZyb21DYWNoZSh0eXBlKTsKICAgICBlbHNlIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpG
dW5jdGlvbj4gZnVuY3Rpb24gPSBWOENsYXNzSW5kZXg6OmdldFRlbXBsYXRlKHR5cGUpLT5HZXRG
dW5jdGlvbigpOworICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAg
ICAgICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2V0
Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dFByb3h5LT53b3JrZXJDb250ZXh0KCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IFY4Q2xhc3NJbmRleDo6Z2V0VGVt
cGxhdGUodHlwZSktPkdldEZ1bmN0aW9uKCk7CiAgICAgICAgIGluc3RhbmNlID0gU2FmZUFsbG9j
YXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKICAgICB9CiAgICAgaWYgKCFpbnN0YW5jZS5J
c0VtcHR5KCkpIHsKQEAgLTM2NSwxMSArMzc0LDE3IEBACiAjaWYgRU5BQkxFKFdPUktFUlMpCiAg
ICAgaWYgKFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpKQogICAgICAgICByZXR1
cm4gdG9WOCh3b3JrZXIpOworCisgICAgaWYgKERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtl
ckNvbnRleHQgPSB0YXJnZXQtPnRvRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm4gdG9WOCh3b3JrZXJDb250ZXh0KTsKICNlbmRpZiAvLyBXT1JLRVJTCiAKICNpZiBFTkFC
TEUoU0hBUkVEX1dPUktFUlMpCiAgICAgaWYgKFNoYXJlZFdvcmtlciogc2hhcmVkV29ya2VyID0g
dGFyZ2V0LT50b1NoYXJlZFdvcmtlcigpKQogICAgICAgICByZXR1cm4gdG9WOChzaGFyZWRXb3Jr
ZXIpOworCisgICAgaWYgKFNoYXJlZFdvcmtlckNvbnRleHQqIHNoYXJlZFdvcmtlckNvbnRleHQg
PSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gdG9WOChz
aGFyZWRXb3JrZXJDb250ZXh0KTsKICNlbmRpZiAvLyBTSEFSRURfV09SS0VSUwogCiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCkBAIC0zOTUsNiArNDEwLDkgQEAKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAgICAgfQogCisgICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4aHIgPSB0YXJnZXQtPnRv
WE1MSHR0cFJlcXVlc3QoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoeGhyKTsKKwogICAgIC8vIE1l
c3NhZ2VQb3J0IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVycGFydAogICAgIGlmIChN
ZXNzYWdlUG9ydCogcG9ydCA9IHRhcmdldC0+dG9NZXNzYWdlUG9ydCgpKSB7CiAgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVjdE1hcCgpLmdl
dChwb3J0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNTQ0NDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw5IEBACiAKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVy
LmgiCiAKLSNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4RXZlbnQuaCIKICNpbmNsdWRlICJXb3Jr
ZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAK
QEAgLTc2LDcgKzc3LDcgQEAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0
KTsKIAogICAgIC8vIEdldCB0aGUgVjggd3JhcHBlciBmb3IgdGhlIGV2ZW50IG9iamVjdC4KLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6Y29udmVydEV2ZW50VG9WOE9iamVjdChldmVudCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGpzRXZlbnQgPSB0b1Y4KGV2ZW50KTsKIAogICAgIGludm9rZUV2ZW50SGFuZGxlcihj
b250ZXh0LCBldmVudCwganNFdmVudCk7CiB9CkBAIC0xNTUsNyArMTU2LDcgQEAKICAgICAgICAg
cmV0dXJuIGxpc3RlbmVyOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50LT5jdXJy
ZW50VGFyZ2V0KCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOwogICAgIHJldHVybiB2ODo6
TG9jYWw8djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVl
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCShyZXZpc2lvbiA1NDQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDE5
NSArMTc2LDYgQEAKICAgICBnbG9iYWxPYmplY3QtPlNldChpbXBsaWNpdFByb3RvU3RyaW5nLCBq
c1dvcmtlckNvbnRleHQpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSwgdm9pZCogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOwotCi0gICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpERURJQ0FURURX
T1JLRVJDT05URVhUCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgICAgICB8fCB0eXBl
ID09IFY4Q2xhc3NJbmRleDo6U0hBUkVEV09SS0VSQ09OVEVYVAotI2VuZGlmCi0gICAgICAgICkK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRXb3JrZXJDb250ZXh0VG9WOE9iamVjdChzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oaW1wbCkpOwotCi0gICAgYm9vbCBpc0FjdGl2ZURvbU9iamVjdCA9
IGZhbHNlOwotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFN
RSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6Ci0gICAgICAgIEFDVElWRV9ET01fT0JKRUNUX1RZ
UEVTKE1BS0VfQ0FTRSkKLSAgICAgICAgaXNBY3RpdmVEb21PYmplY3QgPSB0cnVlOwotICAgICAg
ICBicmVhazsKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAoaXNBY3RpdmVEb21PYmplY3QpIHsKLSAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gcmVzdWx0ID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KGlt
cGwpOwotICAgICAgICBpZiAoIXJlc3VsdC5Jc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB0b1Y4KHR5
cGUsIHR5cGUsIGltcGwpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9D
QVNFKFRZUEUsIE5BTUUpIFwKLSAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6IHN0YXRp
Y19jYXN0PE5BTUUqPihpbXBsKS0+cmVmKCk7IGJyZWFrOwotICAgICAgICAgICAgQUNUSVZFX0RP
TV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQotI3VuZGVmIE1BS0VfQ0FTRQotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXN1bHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9iamVjdCk7Ci0g
ICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KGltcGws
IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gTm9uIERP
TSBub2RlCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gcmVzdWx0ID0gZ2V0RE9NT2Jq
ZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmIChyZXN1bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB0b1Y4KHR5cGUsIHR5cGUsIGltcGwpOwot
ICAgICAgICBpZiAoIW9iamVjdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldPUktFUkxPQ0FUSU9OOgotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlckxvY2F0aW9uKj4oaW1wbCktPnJlZigpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldP
UktFUk5BVklHQVRPUjoKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJOYXZpZ2F0
b3IqPihpbXBsKS0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCi0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9O
Q0VOVEVSOgotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE5vdGlmaWNhdGlvbkNlbnRlcio+
KGltcGwpLT5yZWYoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT046Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Tm90aWZpY2F0aW9uKj4oaW1wbCktPnJlZigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NQ09SRUVYQ0VQVElPTjoKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxET01Db3JlRXhjZXB0aW9uKj4oaW1wbCktPnJlZigp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OlJBTkdFRVhDRVBUSU9OOgotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJhbmdlRXhjZXB0
aW9uKj4oaW1wbCktPnJlZigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkVWRU5URVhDRVBUSU9OOgotICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEV2ZW50RXhjZXB0aW9uKj4oaW1wbCktPnJlZigpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNURVhDRVBU
SU9OOgotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9u
Kj4oaW1wbCktPnJlZigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhvYmplY3Qp
OwotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1w
bCwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0
RXZlbnRUb1Y4T2JqZWN0KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50KQotICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IGdldERPTU9iamVjdE1hcCgpLmdldChldmVudCk7Ci0gICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RVZFTlQ7Ci0KLSAgICBpZiAoZXZlbnQtPmlz
TWVzc2FnZUV2ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VFVkVO
VDsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gdG9WOCh0eXBlLCBWOENs
YXNzSW5kZXg6OkVWRU5ULCBldmVudCk7Ci0gICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gSW5zdGFudGlhdGlvbiBmYWlsZWQuIEF2b2lkIHVwZGF0aW5nIHRoZSBET00gb2Jq
ZWN0IG1hcCBhbmQgcmV0dXJuIG51bGwgd2hpY2gKLSAgICAgICAgLy8gaXMgYWxyZWFkeSBoYW5k
bGVkIGJ5IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBpbiBjYXNlIHRoZSBldmVudCBpcyBudWxs
LgotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB9Ci0KLSAgICBldmVudC0+cmVmKCk7
ICAvLyBmYXN0IHJlZgotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0
KGV2ZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCog
dGFyZ2V0KQotewotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
LQotICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB0YXJnZXQtPnRv
RGVkaWNhdGVkV29ya2VyQ29udGV4dCgpOwotICAgIGlmICh3b3JrZXJDb250ZXh0KQotICAgICAg
ICByZXR1cm4gY29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KHdvcmtlckNvbnRleHQpOwot
Ci0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIFNoYXJlZFdvcmtlckNvbnRleHQqIHNo
YXJlZFdvcmtlckNvbnRleHQgPSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyQ29udGV4dCgpOwotICAg
IGlmIChzaGFyZWRXb3JrZXJDb250ZXh0KQotICAgICAgICByZXR1cm4gY29udmVydFdvcmtlckNv
bnRleHRUb1Y4T2JqZWN0KHNoYXJlZFdvcmtlckNvbnRleHQpOwotI2VuZGlmCi0KLSAgICBXb3Jr
ZXIqIHdvcmtlciA9IHRhcmdldC0+dG9Xb3JrZXIoKTsKLSAgICBpZiAod29ya2VyKQotICAgICAg
ICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpXT1JLRVIsIHdvcmtlcik7
Ci0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgU2hhcmVkV29ya2VyKiBzaGFyZWRX
b3JrZXIgPSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyKCk7Ci0gICAgaWYgKHNoYXJlZFdvcmtlcikK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U0hBUkVEV09S
S0VSLCBzaGFyZWRXb3JrZXIpOwotI2VuZGlmCi0KLSAgICBYTUxIdHRwUmVxdWVzdCogeGhyID0g
dGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgaWYgKHhocikKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIHhocik7Ci0K
LSAgICBNZXNzYWdlUG9ydCogbXAgPSB0YXJnZXQtPnRvTWVzc2FnZVBvcnQoKTsKLSAgICBpZiAo
bXApCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NB
R0VQT1JULCBtcCk7Ci0KLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0gICAgV2ViU29ja2V0KiB3
ZWJTb2NrZXQgPSB0YXJnZXQtPnRvV2ViU29ja2V0KCk7Ci0gICAgaWYgKHdlYlNvY2tldCkKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCU09DS0VULCB3
ZWJTb2NrZXQpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0gICAgRXZlbnRT
b3VyY2UqIGV2ZW50U291cmNlID0gdGFyZ2V0LT50b0V2ZW50U291cmNlKCk7Ci0gICAgaWYgKGV2
ZW50U291cmNlKQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpFVkVOVFNPVVJDRSwgZXZlbnRTb3VyY2UpOwotI2VuZGlmCi0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXY4OjpI
YW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRXb3Jr
ZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KQotewotICAg
IGlmICghd29ya2VyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCkt
PnByb3h5KCktPmNvbnRleHQoKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFs
ID0gY29udGV4dC0+R2xvYmFsKCk7Ci0gICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gZ2xvYmFsOwotfQotCi12ODo6TG9jYWw8djg6Ok9iamVjdD4gV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5Ojp0b1Y4KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlw
dG9yVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBs
KQotewotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uOwotICAgIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSByZXRyaWV2ZSgpOwotICAgIGlmIChwcm94eSkK
LSAgICAgICAgZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKGRlc2NyaXB0
b3JUeXBlLCBwcm94eS0+d29ya2VyQ29udGV4dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZ1bmN0
aW9uID0gVjhDbGFzc0luZGV4OjpnZXRUZW1wbGF0ZShkZXNjcmlwdG9yVHlwZSktPkdldEZ1bmN0
aW9uKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBTYWZlQWxsb2Nh
dGlvbjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwotICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgp
KQotICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFpbGVkIGFs
bG9jYXRpb25zLgotICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaW5zdGFuY2Us
IFY4Q2xhc3NJbmRleDo6VG9JbnQoY3B0clR5cGUpLCBpbXBsKTsKLSAgICByZXR1cm4gaW5zdGFu
Y2U7Ci19Ci0KIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50
T2JqZWN0KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZ2V0RE9NT2JqZWN0TWFwKCkuY29udGFp
bnMoZXZlbnQpKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgJKHJldmlzaW9uIDU0NDQwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODQs
MjIgKzg0LDYgQEAKICAgICAgICAgLy8gUmV0dXJucyBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkgb2JqZWN0IG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQuIDAgd2lsbCBiZSBy
ZXR1cm5lZCBpZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3QgdGhlIHdvcmtl
ciBjb250ZXh0LgogICAgICAgICBzdGF0aWMgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBy
ZXRyaWV2ZSgpOwogCi0gICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBhbGwgdGhlc2UgY29udmVy
c2lvbiBmdW5jdGlvbnMgaGVyZSBiZWZvcmUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5IGlz
IHJlZmFjdG9yLWVkLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFQ+IGltcGwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXBsLmdldCgpKTsKLSAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdm9pZCogaW1wbCk7Ci0gICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VG9WOE9iamVjdChFdmVudCop
OwotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdl
dFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqKTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoV29ya2VyQ29udGV4dCopOwot
Ci0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdG9WOChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHRvVjgodHlwZSwgdHlwZSwgaW1wbCk7Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgaW5pdFY4SWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCBpbml0Q29udGV4
dElmTmVlZGVkKCk7CkBAIC0xMDgsOCArOTIsNiBAQAogICAgICAgICAvLyBSdW4gYW4gYWxyZWFk
eSBjb21waWxlZCBzY3JpcHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJ1blNjcmlw
dCh2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IHRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NyaXB0b3JUeXBl
LCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwpOwotCiAg
ICAgICAgIHN0YXRpYyBib29sIGZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqKTsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtXb3JrZXJNYXhTdGFja1NpemUgPSA1MDAgKiAxMDI0OwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiA1NDQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsxNzMs
MTYgQEAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChXb3JrZXJDb250ZXh0KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2Jh
bCA9IGltcGwtPnNjcmlwdCgpLT5wcm94eSgpLT5jb250ZXh0KCktPkdsb2JhbCgpOworICAgIEFT
U0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50
ZXJDdXN0b20uY3BwCShyZXZpc2lvbiA1NDQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNiBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MSw5ICs5MCw2IEBA
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKLSAgICBpZiAo
bm90aWZpY2F0aW9uQ2VudGVyLT5jb250ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKQotICAgICAg
ICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uLmdldCgpKTsKLQogICAgIHJl
dHVybiB0b1Y4KG5vdGlmaWNhdGlvbi5nZXQoKSk7CiB9CiAKQEAgLTEwOCw5ICsxMDQsNiBAQAog
ICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOwogCi0gICAgaWYgKG5v
dGlmaWNhdGlvbkNlbnRlci0+Y29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmaWNhdGlvbi5nZXQoKSk7Ci0KICAgICByZXR1
cm4gdG9WOChub3RpZmljYXRpb24uZ2V0KCkpOwogfQogCg==
</data>
<flag name="review"
          id="30901"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>