<?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>184175</bug_id>
          
          <creation_ts>2018-03-29 22:43:36 -0700</creation_ts>
          <short_desc>Add pointer profiling support to Wasm.</short_desc>
          <delta_ts>2018-03-30 09:32:52 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1410554</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 22:43:36 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410555</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-29 22:44:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/39027923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410557</commentid>
    <comment_count>2</comment_count>
      <attachid>336842</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 23:01:46 -0700</bug_when>
    <thetext>Created attachment 336842
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410609</commentid>
    <comment_count>3</comment_count>
      <attachid>336842</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-30 08:46:57 -0700</bug_when>
    <thetext>Comment on attachment 336842
proposed patch.

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

r=me this is great! :D

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyFunction.h:72
&gt; +        return m_jsEntrypoint.retagged(CodeEntryPtrTag, CodeEntryWithArityCheckPtrTag);

Right now vmEntryToWebAssembly is the same thing as vmEntryToJavaScript. Should we split them and use different CodeEntryPtrTag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410627</commentid>
    <comment_count>4</comment_count>
      <attachid>336842</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 09:26:54 -0700</bug_when>
    <thetext>Comment on attachment 336842
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyFunction.h:72
&gt;&gt; +        return m_jsEntrypoint.retagged(CodeEntryPtrTag, CodeEntryWithArityCheckPtrTag);
&gt; 
&gt; Right now vmEntryToWebAssembly is the same thing as vmEntryToJavaScript. Should we split them and use different CodeEntryPtrTag?

Let&apos;s only make a change when the need arises later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410630</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 09:32:52 -0700</bug_when>
    <thetext>Landed in r230106: &lt;http://trac.webkit.org/r230106&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336842</attachid>
            <date>2018-03-29 23:01:46 -0700</date>
            <delta_ts>2018-03-30 08:46:57 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184175.patch</filename>
            <type>text/plain</type>
            <size>29610</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE4LTAzLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgcG9pbnRlciBwcm9maWxpbmcgc3VwcG9ydCB0byBXYXNtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTc1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zOTAyNzkyMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+
KToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QkJRUGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRl
KToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
d2FzbVRvV2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5oOgorICAgICAgICAqIHdh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBI
YW5kbGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OmhhbmRsZUJhZEk2NFVzZSk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpjYWxs
V2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmg6CisKIDIwMTgtMDMtMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzb21lIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgdG8gQjMgYW5kIEFpci4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCShyZXZpc2lvbiAyMzAx
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KFlhcnJNYXRjaE9u
bHk4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcpIFwKICAgICB2
KFlhcnJCYWNrdHJhY2tQdHJUYWcpIFwKKyAgICBcCisgICAgdihXYXNtQ2FsbFB0clRhZykgXAor
ICAgIHYoV2FzbUhlbHBlclB0clRhZykgXAogCiAKIGVudW0gUHRyVGFnIDogdWludHB0cl90IHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDIzMDEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk0LDcgKzU5NCw3IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXMKICAgICB9OwogCiAgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMy
LCBvcmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdyb3dNZW1vcnkpKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGdyb3dNZW1vcnksIEIzQ0NhbGxQdHJU
YWcpKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKCkpLCBpbnN0YW5jZVZhbHVlKCksIGRlbHRhKTsK
IAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3VycmVu
dEJsb2NrKTsKQEAgLTExMzUsOCArMTEzNSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW4KICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBvaXNvbmluZygpKQogICAg
ICAgICAgICAganVtcERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4oKSwganVtcERlc3RpbmF0aW9uLCBpc0VtYmVkZGVy
QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklUQ29k
ZVBvaXNvbikpOwogCisgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdhc21DYWxsUHRy
VGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAgICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3Vs
dCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJC
bG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAotICAgICAgICAgICAg
WyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIFs9XSAoUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChqdW1wRGVzdGluYXRpb24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTE0
NCw5ICsxMTQ1LDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgog
ICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUg
Y2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGUsIGNhbGxUYWddIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0g
Vm9pZCA/IDAgOiAxXS5ncHIoKSwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgICAgICBqaXQu
Y2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBjYWxsVGFnKTsK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBVcHNpbG9uVmFs
dWUqIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxs
cHRyIDogaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBlbWJlZGRlckNhbGxSZXN1bHQpOwpAQCAtMTMxNyw2ICsxMzE4LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICBjYWxsZWVDb2RlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRYb3IsIG9yaWdpbigp
LCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7CiAKICAgICBUeXBlIHJldHVyblR5cGUg
PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKFdh
c21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKICAgICByZXN1bHQgPSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCks
IGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwpAQCAtMTMzMSw3ICsxMzMzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxl
ZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICBqaXQu
Y2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBOb1B0clRhZyk7
CisgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAg
OiAxXS5ncHIoKSwgY2FsbFRhZyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKQEAg
LTE1ODIsNyArMTU4NCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQ
b3AKICNlbmRpZgogCiAgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50
MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVl
KTsgfTsKLSAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9w
Y291bnQpKTsKKyAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4ocG9wY291bnQsIEIzQ0NhbGxQdHJUYWcpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3Rz
Ojpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNjA0
LDcgKzE2MDYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wCiAj
ZW5kaWYKIAogICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGludDY0X3Qg
dmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsg
fTsKLSAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9wY291
bnQpKTsKKyAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
cG9wY291bnQsIEIzQ0NhbGxQdHJUYWcpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpu
b25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwogICAgIHJldHVybiB7IH07CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyMzAxMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NCw4ICsxNzQsMTAgQEAgdm9pZCBCQlFQbGFuOjpwcmVwYXJlKCkKICAgICAg
ICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBtX3dh
c21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tpbXBvcnRGdW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3Npbmcg
aW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBtYWtl
U3RyaW5nKGltcG9ydC0+bW9kdWxlKSwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPmZpZWxkKSk7
Ci0gICAgICAgIGF1dG8gYmluZGluZyA9IHdhc21Ub1dhc20oaW1wb3J0RnVuY3Rpb25JbmRleCk7
CisgICAgICAgIGF1dG8gYmluZGluZyA9IHdhc21Ub1dhc20oc2lnbmF0dXJlLCBpbXBvcnRGdW5j
dGlvbkluZGV4KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFiaW5kaW5nKSkgewogICAgICAgICAg
ICAgc3dpdGNoIChiaW5kaW5nLmVycm9yKCkpIHsKICAgICAgICAgICAgIGNhc2UgQmluZGluZ0Zh
aWx1cmU6Ok91dE9mTWVtb3J5OgpAQCAtMzAwLDYgKzMwMiw4IEBAIHZvaWQgQkJRUGxhbjo6Y29t
cGxldGUoY29uc3QgQWJzdHJhY3RMb2MKICAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewogICAgICAgICAgICAgQ29t
cGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdOwogICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlv
bkluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBQdHJUYWcg
Y2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0
Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KSB7CkBAIC0zMDgsNyArMzEyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0
cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICAgICAgICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWld
ICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgY2FsbFRhZywgIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVp
XSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KSwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cykpOwogICAgICAgICAgICAgfQogCkBAIC0zMjAsNyArMzI0LDcgQEAgdm9pZCBCQlFQ
bGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5j
b21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAg
ICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkVtYmVkZGVy
LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpLAorICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIENvZGVF
bnRyeVB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVj
dHMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzMzLDcgKzMzNywxMCBAQCB2b2lk
IEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5j
dGlvbkNvdW50KCkpLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCk7Ci0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7
CisgICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBQdHJUYWcg
b2xkVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcy5yZXRhZ2dlZChvbGRUYWcs
IE5lYXJDYWxsUHRyVGFnKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24g
MjMwMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCiB1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLUV4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0
SW5kZXgpCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9XYXNtKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1bnNpZ25lZCBpbXBvcnRJbmRl
eCkKIHsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdW5pcXVpZnkgdGhlIHN0dWJzIGJhc2VkIG9u
IHNpZ25hdHVyZSArIGluZGV4IHRvIHNlZSBpZiB0aGlzIHNhdmVzIG1lbW9yeS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MTU3CisKICAgICBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpOwogICAgIEpJVCBqaXQ7CiAKQEAgLTc4LDEzICs4MSwxNCBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRj
aCk7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVBvaXNvbmluZygpKQogICAgICAgICBqaXQueG9yUHRy
KEpJVDo6VHJ1c3RlZEltbVB0cihnX0pJVENvZGVQb2lzb24pLCBzY3JhdGNoKTsKLSAgICBqaXQu
anVtcChzY3JhdGNoLCBOb1B0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtQ2Fs
bFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7CisgICAgaml0Lmp1bXAoc2NyYXRjaCwgdGFnKTsK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1
cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBOb1B0clRhZywgIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBvcnRbJWldIiwgaW1wb3J0
SW5kZXgpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0YWcsICJXZWJB
c3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuaAkocmV2aXNpb24gMjMwMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgZW51
bSBjbGFzcyBCaW5kaW5nRmFpbHVyZSB7CiAgICAgT3V0T2ZNZW1vcnksCiB9OwogCi1FeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2ln
bmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub1dhc20oY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQgaW1wb3J0SW5k
ZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkocmV2
aXNpb24gMjMwMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgU2lnbmFs
QWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25hbCwgCiAgICAgZGF0YUxvZ0xuSWYoV2FzbUZhdWx0U2ln
bmFsSGFuZGxlckludGVybmFsOjp2ZXJib3NlLCAiSklUIG1lbW9yeSBzdGFydDogIiwgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbCkpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRP
ZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSk7CiAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBt
YWtlIHN1cmUgd2UgYXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4gYXF1aXJlIGFueSBsb2Nr
cy4gT3RoZXJ3aXNlLAogICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hlZCBpbiBjb2RlIHRoYXQg
aXMgYWxyZWFkeSBob2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2FudCB0byBhcXVpcmUuCisg
ICAgYXNzZXJ0SXNOb3RUYWdnZWQoZmF1bHRpbmdJbnN0cnVjdGlvbik7CiAgICAgaWYgKGlzSklU
UEMoZmF1bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9vbCBmYXVsdGVkSW5BY3RpdmVG
YXN0TWVtb3J5ID0gZmFsc2U7CiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDIzMDEwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCAr
OTcsOSBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRh
Zywgc2lnbmF0dXJlLmhhc2goKSk7CiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBOb1B0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMiLCBt
X2Z1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
LnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIGNhbGxUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIiwgbV9mdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAogICAgIG9tZ0Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVz
dWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CkBAIC0xMjUsNyAr
MTI2LDEwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21F
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhT
cGFjZSkuZW50cnlwb2ludCgpOwogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChlbnRyeXBvaW50
KSk7CisgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2FsbFB0clRhZywgc2lnbmF0dXJlLmhhc2go
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChlbnRyeXBvaW50LnJldGFnZ2VkKG9sZFRhZywg
TmVhckNhbGxQdHJUYWcpKSk7CiAgICAgICAgIH0KICAgICAgICAgdW5saW5rZWRDYWxscyA9IHN0
ZDo6ZXhjaGFuZ2UobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1ttX2Z1bmN0aW9u
SW5kZXhdLCB1bmxpbmtlZENhbGxzKTsKICAgICB9CkBAIC0xNDUsNyArMTQ5LDEwIEBAIHZvaWQg
T01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGlu
ZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigp
KSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAg
ICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2Up
IHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZW50cnlw
b2ludCkpOworICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2Fz
bUNhbGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOworICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChlbnRyeXBvaW50LnJldGFnZ2VkKG9sZFRhZywgTmVhckNhbGxQdHJUYWcpKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkocmV2aXNpb24gMjMwMTAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1
ICs1MSwxNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7Ci0gICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKworICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwodGFnKTsKKyAgICBqaXQuanVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmJyZWFr
cG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCiAgICAgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNt
RXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIlRocm93IGV4Y2VwdGlv
biBmcm9tIFdhc20iKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIodGhy
b3dXYXNtRXhjZXB0aW9uLCB0YWcpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOZWFyQ2FsbFB0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5l
cmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKQEAgLTczLDcgKzc1LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93U3RhY2tPdmVyZmxvdwogICAgIGF1dG8ganVtcFRvRXhj
ZXB0aW9uSGFuZGxlciA9IGppdC5qdW1wKCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9u
SGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKGxvY2tl
ciwgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIlRocm93IHN0YWNrIG92
ZXJmbG93IGZyb20gV2FzbSIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IE5lYXJKdW1wUHRyVGFnLCAiVGhyb3cgc3RhY2sgb3ZlcmZsb3cgZnJvbSBXYXNtIik7CiB9CiAK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29u
c3QgQWJzdHJhY3RMb2NrZXImKQpAQCAtOTEsMTUgKzkzLDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0cmlnZ2VyT01HVGllclVwVGgKICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEluc3RhbmNl
KiwgdWludDMyX3QpOwogICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsKLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICBqaXQuY2FsbChHUFJJbmZv
Ojphcmd1bWVudEdQUjIsIE5vUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdhc21I
ZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIocnVuLCB0YWcpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIsIHRhZyk7CiAK
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CiAK
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIlRyaWdnZXIgT01HIHRpZXIgdXAiKTsK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgIlRy
aWdnZXIgT01HIHRpZXIgdXAiKTsKIH0KIAogc3RhdGljIFRodW5rcyogdGh1bmtzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24gMjMw
MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw3ICs5Myw4IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYsIEIKICAgICAgICAgLy8gTGV0J3MgYmUgcGFyYW5vaWQgb24gdGhlIGV4Y2VwdGlv
biBwYXRoIGFuZCB6ZXJvIG91dCB0aGUgcG9pc29uIGluc3RlYWQgb2YgbGVhdmluZyBpdCBpbiBh
biBhcmd1bWVudCBHUFIuCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogCi0gICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUhl
bHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bChjYWxsVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAog
ICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSkgLT4gdm9pZCB7CkBAIC0xMTUsOCArMTE2LDkgQEAgc3RhdGljIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiwgQgogICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5k
aW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCB0aHJvd0JhZEk2NCk7Ci0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IE5vUHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGlt
cG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cih0aHJvd0JhZEk2NCwgY2FsbFRhZykpOworICAgICAgICBQdHJUYWcgdGFnID0g
cHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKKyAgICAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQg
aW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCk7CiAgICAgfQogICAg
IAogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKQEAgLTMwMCw5ICszMDIsMTIg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICAvLyBM
ZXQncyBiZSBwYXJhbm9pZCBiZWZvcmUgdGhlIGNhbGwgYW5kIHplcm8gb3V0IHRoZSBwb2lzb24g
aW5zdGVhZCBvZiBsZWF2aW5nIGl0IGluIGFuIGFyZ3VtZW50IEdQUi4KICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7
CiAKKyAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoV2FzbUhlbHBlclB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOworICAgICAgICBQdHJUYWcgZG9VbndpbmRpbmdUYWcgPSBwdHJUYWcoV2Fz
bUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworCiAgICAgICAgIHN0YXRpY19hc3NlcnQo
R1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2UgcmVseSBvbiB0aGlz
IHdpdGggdGhlIGNhbGwgYmVsb3cuIik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShjYWxsRnVuYyk+KEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVm
ZmVyKSk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24g
PSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrKTsKIAogICAgICAgICAvLyBFeGNlcHRpb24gaGVyZS4KQEAgLTMxNCw3ICsz
MTksNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAg
ICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5j
YWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIH07Ci0gICAgICAgIGF1dG8gZXhjZXB0aW9uQ2Fs
bCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0
LmNhbGwoZG9VbndpbmRpbmdUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cigqdm0pOwogCiAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CkBAIC0zMzksMTAgKzM0
NCwxMSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAg
IGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsKLSAgICAgICAgbGlua0J1
ZmZlci5saW5rKGV4Y2VwdGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKKyAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxGdW5jLCBjYWxsVGFnKSk7CisgICAgICAgIGxp
bmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBGdW5jdGlvblB0cihkb1Vud2luZGluZywgZG9V
bndpbmRpbmdUYWcpKTsKIAotICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBOb1B0clRhZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBv
cnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBQ
dHJUYWcgdGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKKyAg
ICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHkt
PkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVl
ZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgpA
QCAtNTQ0LDEzICs1NTAsMTQgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5k
aW5nRgogICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBu
ZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9JMzIpPihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAg
ICAgYXV0byBjYWxsID0gaml0LmNhbGwodGFnKTsKICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihjb252ZXJ0VG9JMzIsIHRhZykpOwogICAgICAgICB9KTsKIAog
ICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC01NzksMTMgKzU4NiwxNCBAQCBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgIGppdC5jb252ZXJ0RG91Ymxl
VG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OwogICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKIAorICAgICAgICBQdHJUYWcgdGFn
ID0gcHRyVGFnKFdhc21IZWxwZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgbm90
QU51bWJlci5saW5rKCZqaXQpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
Y29udmVydFRvRjMyKT4oR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKHRh
Zyk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRp
b24oKnZtKSk7CiAKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0Yz
Mik7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29udmVy
dFRvRjMyLCB0YWcpKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwpA
QCAtNjEzLDEzICs2MjEsMTQgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5k
aW5nRgogICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhXYXNtSGVscGVyUHRyVGFnLCBuZXh0
UHRyVGFnSUQoKSk7CiAgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGNvbnZlcnRUb0Y2NCk+KEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbCh0YWcpOwogICAgICAgICBleGNlcHRpb25DaGVja3MuYXBw
ZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIEZ1bmN0aW9uUHRyKGNvbnZlcnRUb0Y2NCwgdGFnKSk7CiAgICAgICAgIH0pOwogCiAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKQEAgLTYzMSwxMCArNjQwLDExIEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICBqaXQucmV0KCk7CiAKICAgICBpZiAo
IWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
V2FzbUhlbHBlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgICAgICBleGNlcHRpb25DaGVj
a3MubGluaygmaml0KTsKICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAg
IGF1dG8gY2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwodGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAog
ICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYykgLT4gdm9pZCB7CkBAIC02NDUsNyArNjU1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRgogICAgICAgICB9OwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBkb1Vud2luZGluZyk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoZG9VbndpbmRpbmcsIHRhZykpOwogICAgICAgICB9KTsKICAgICB9CiAK
QEAgLTY1OSw3ICs2NjksOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRp
bmdGCiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENhbGxM
b2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7
CiAKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJXZWJB
c3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFdh
c21DYWxsUHRyVGFnLCBzaWduYXR1cmUuaGFzaCgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgdGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAl
cyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiB9
CiAKIHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0
aW9uVHlwZSB0eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIzMDEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIHZtLndhc21Db250ZXh0LnN0
b3JlKHdhc21JbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgQVNTRVJUKHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgQVNTRVJUKCZ3YXNtRnVuY3Rpb24tPmluc3RhbmNl
KCktPmluc3RhbmNlKCkgPT0gdm0ud2FzbUNvbnRleHQubG9hZCgpKTsKLSAgICBFbmNvZGVkSlNW
YWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOworICAgIEVuY29k
ZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5
cG9pbnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2Fs
bEZyYW1lKTsKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0
ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4K
ICAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhl
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5jZQogICAgIC8vIGFs
aXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMzAxMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDEzIEBAIHB1YmxpYzoKICAgICBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRp
b247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFy
aXR5KQorICAgIHsKKyAgICAgICAgaWYgKGFyaXR5ID09IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkK
KyAgICAgICAgICAgIHJldHVybiBtX2pzRW50cnlwb2ludDsKKyAgICAgICAgQVNTRVJUKGFyaXR5
ID09IE11c3RDaGVja0FyaXR5KTsKKyAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBvaW50LnJldGFn
Z2VkKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAg
IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9u
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0
YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50
cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAK
</data>
<flag name="review"
          id="355331"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>