<?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>157365</bug_id>
          
          <creation_ts>2016-05-04 15:56:48 -0700</creation_ts>
          <short_desc>Add a few more WTF locking benchmarks</short_desc>
          <delta_ts>2016-05-04 16:01:02 -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 Template Framework</component>
          <version>WebKit 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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1190250</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-04 15:56:48 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190252</commentid>
    <comment_count>1</comment_count>
      <attachid>278137</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-04 15:58:34 -0700</bug_when>
    <thetext>Created attachment 278137
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190253</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-04 15:59:38 -0700</bug_when>
    <thetext>Attachment 278137 did not pass style-queue:


ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockFairnessTest.cpp:74:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/ToyLocks.h:35:  Do not use unnamed namespaces in header files.  See http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces for more information.  [build/namespaces] [4]
ERROR: Source/WTF/benchmarks/ToyLocks.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/benchmarks/ToyLocks.h:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190255</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-04 16:01:02 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/200438</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278137</attachid>
            <date>2016-05-04 15:58:34 -0700</date>
            <delta_ts>2016-05-04 15:59:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35324</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDA0MzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA1LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgZmV3IG1vcmUgV1RGIGxvY2tpbmcgYmVuY2ht
YXJrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3
MzY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBGYWN0b3JzIG91dCBvdXIgdG95IGxvY2tzIGludG8gVG95TG9ja3MuaCBhbmQgYWRkcyBh
IG5ldyB0ZXN0IChMb2NrRmFpcm5lc3NUZXN0KSB0aGF0IG1lYXN1cmVzCisgICAgICAgIHRoZSBm
YWlybmVzcyBvZiBsb2Nrcy4KKyAgICAgICAgCisgICAgICAgIFRoZSByZXN1bHQ6IFdURjo6TG9j
ayBpcyBwcmV0dHkgZmFpciBlbm91Z2guCisKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tGYWly
bmVzc1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGJlbmNobWFy
a3MvTG9ja1NwZWVkVGVzdC5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBiZW5jaG1h
cmtzL1RveUxvY2tzLmg6IEFkZGVkLgorCiAyMDE2LTA1LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlZWQgdXAgSlNHbG9iYWxPYmplY3QgaW5pdGlhbGl6
YXRpb24gYnkgbWFraW5nIHNvbWUgcHJvcGVydGllcyBsYXp5CkluZGV4OiBTb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9i
ZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dU
Ri9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
Ky8vIE9uIE1hYywgeW91IGNhbiBidWlsZCB0aGlzIGxpa2Ugc286CisvLyB4Y3J1biBjbGFuZysr
IC1vIExvY2tGYWlybmVzc1Rlc3QgU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rl
c3QuY3BwIC1PMyAtVyAtSVNvdXJjZS9XVEYgLUlTb3VyY2UvV1RGL2JlbmNobWFya3MgLUxXZWJL
aXRCdWlsZC9SZWxlYXNlIC1sV1RGIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtbGljdWNvcmUgLXN0
ZD1jKysxMSAtZnZpc2liaWxpdHk9aGlkZGVuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlRveUxvY2tzLmgiCisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgeworCitOT19SRVRVUk4gdm9pZCB1c2FnZSgpCit7CisgICAgcHJp
bnRmKCJVc2FnZTogTG9ja0ZhaXJuZXNzVGVzdCB5aWVsZHNwaW5sb2NrfHBhdXNlc3BpbmxvY2t8
d29yZGxvY2t8bG9ja3xiYXJnaW5nbG9ja3xiYXJnaW5nd29yZGxvY2t8dGh1bmRlcmxvY2t8dGh1
bmRlcndvcmRsb2NrfGNhc2NhZGVsb2NrfGNhc2NhZGV3b3JkbG9ja2hhbmRvZmZsb2NrfG11dGV4
fGFsbCA8bnVtIHRocmVhZHM+IDxzZWNvbmRzIHBlciB0ZXN0PlxuIik7CisgICAgZXhpdCgxKTsK
K30KKwordW5zaWduZWQgbnVtVGhyZWFkczsKK2RvdWJsZSBzZWNvbmRzUGVyVGVzdDsKKworc3Ry
dWN0IEJlbmNobWFyayB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgc3Rh
dGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICBMb2NrVHlwZSBs
b2NrOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjpt
YWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFk
SWRlbnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAKKyAgICAgICAgdm9sYXRpbGUgYm9vbCBr
ZWVwR29pbmcgPSB0cnVlOworICAgIAorICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHM7IHRocmVhZEluZGV4LS07
KSB7CisgICAgICAgICAgICBjb3VudHNbdGhyZWFkSW5kZXhdID0gMDsKKyAgICAgICAgICAgIHRo
cmVhZHNbdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJCZW5j
aG1hcmsgVGhyZWFkIiwKKyAgICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKGtlZXBHb2luZykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNbdGhyZWFk
SW5kZXhdKys7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgc2xlZXBNUygxMDApOworICAgICAgICBsb2NrLnVubG9jaygpOworICAgIAorICAgICAg
ICBzbGVlcChzZWNvbmRzUGVyVGVzdCk7CisgICAgCisgICAgICAgIGxvY2subG9jaygpOworICAg
ICAgICBrZWVwR29pbmcgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgZGF0YUxvZyhuYW1lLCAiOiAi
KTsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRo
cmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgICAgICBkYXRh
TG9nKGNvbW1hLCBjb3VudHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsK
KyAgICAKKyAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bVRocmVhZHM7IHRocmVhZEluZGV4LS07KQorICAgICAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgIH0KK307CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgCisgICAgaWYgKGFyZ2Mg
IT0gNAorICAgICAgICB8fCBzc2NhbmYoYXJndlsyXSwgIiV1IiwgJm51bVRocmVhZHMpICE9IDEK
KyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbM10sICIlbGYiLCAmc2Vjb25kc1BlclRlc3QpICE9IDEp
CisgICAgICAgIHVzYWdlKCk7CisgICAgCisgICAgcnVuRXZlcnl0aGluZzxCZW5jaG1hcms+KGFy
Z3ZbMV0pOworICAgIAorICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrU3BlZWRUZXN0LmNwcAkocmV2aXNpb24gMjAwNDMwKQorKysgU291cmNlL1dURi9iZW5j
aG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTEg
QEAKICAqLwogCiAvLyBPbiBNYWMsIHlvdSBjYW4gYnVpbGQgdGhpcyBsaWtlIHNvOgotLy8gY2xh
bmcrKyAtbyBMb2NrU3BlZWRUZXN0IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0
LmNwcCAtTzMgLVcgLUlTb3VyY2UvV1RGIC1MV2ViS2l0QnVpbGQvUmVsZWFzZSAtbFdURiAtZnJh
bWV3b3JrIEZvdW5kYXRpb24gLWxpY3Vjb3JlIC1zdGQ9YysrMTEKKy8vIHhjcnVuIGNsYW5nKysg
LW8gTG9ja1NwZWVkVGVzdCBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAg
LU8zIC1XIC1JU291cmNlL1dURiAtSVNvdXJjZS9XVEYvYmVuY2htYXJrcyAtTFdlYktpdEJ1aWxk
L1JlbGVhc2UgLWxXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1saWN1Y29yZSAtc3RkPWMrKzEx
IC1mdmlzaWJpbGl0eT1oaWRkZW4KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAi
VG95TG9ja3MuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC00OCwzNTggKzQ5LDggQEAgdW5zaWduZWQgbnVt
VGhyZWFkR3JvdXBzOwogdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwOwogdW5zaWduZWQgd29y
a1BlckNyaXRpY2FsU2VjdGlvbjsKIHVuc2lnbmVkIHdvcmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9u
czsKLXVuc2lnbmVkIHNwaW5MaW1pdDsKIGRvdWJsZSBzZWNvbmRzUGVyVGVzdDsKICAgICAKLS8v
IFRoaXMgaXMgdGhlIG9sZCBXVEY6OlNwaW5Mb2NrIGNsYXNzLCBpbmNsdWRlZCBoZXJlIHNvIHRo
YXQgd2UgY2FuIHN0aWxsIGNvbXBhcmUgb3VyIG5ldyBsb2NrcyB0byBhCi0vLyBzcGlubG9jayBi
YXNlbGluZS4KLWNsYXNzIFlpZWxkU3BpbkxvY2sgewotcHVibGljOgotICAgIFlpZWxkU3Bpbkxv
Y2soKQotICAgIHsKLSAgICAgICAgbV9sb2NrLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOwotICAgIH0KLQotICAgIHZvaWQgbG9jaygpCi0gICAgewotICAgICAgICB3aGlsZSAo
IW1fbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpKQotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBtX2xvY2suc3RvcmUoMCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9sb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEF0b21pYzx1bnNpZ25lZD4gbV9sb2NrOwotfTsK
LQotY2xhc3MgUGF1c2VTcGluTG9jayB7Ci1wdWJsaWM6Ci0gICAgUGF1c2VTcGluTG9jaygpCi0g
ICAgewotICAgICAgICBtX2xvY2suc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gICAgfQotCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9sb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCi0g
ICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJwYXVzZSIpOwotICAgIH0KLQotICAgIHZvaWQgdW5s
b2NrKCkKLSAgICB7Ci0gICAgICAgIG1fbG9jay5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKTsKLSAgICB9Ci0KLSAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljPHVuc2lnbmVkPiBtX2xvY2s7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdGF0ZVR5cGU+Ci1jbGFzcyBCYXJnaW5nTG9jayB7Ci1wdWJsaWM6Ci0gICAg
QmFyZ2luZ0xvY2soKQotICAgIHsKLSAgICAgICAgbV9zdGF0ZS5zdG9yZSgwKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZS5j
b21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzTG9ja2VkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBsb2NrU2xvdygp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElL
RUxZKG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgMCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgdW5sb2NrU2xvdygpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzTG9ja2VkKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkgJiBpc0xvY2tlZEJpdDsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE5FVkVSX0lO
TElORSB2b2lkIGxvY2tTbG93KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNw
aW5MaW1pdDsgaS0tOykgewotICAgICAgICAgICAgU3RhdGVUeXBlIGN1cnJlbnRTdGF0ZSA9IG1f
c3RhdGUubG9hZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIShjdXJyZW50U3Rh
dGUgJiBpc0xvY2tlZEJpdCkKLSAgICAgICAgICAgICAgICAmJiBtX3N0YXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoY3VycmVudFN0YXRlLCBjdXJyZW50U3RhdGUgfCBpc0xvY2tlZEJpdCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY3VycmVu
dFN0YXRlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBTdGF0ZVR5cGUgY3VycmVu
dFN0YXRlID0gbV9zdGF0ZS5sb2FkKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
KGN1cnJlbnRTdGF0ZSAmIGlzTG9ja2VkQml0KQotICAgICAgICAgICAgICAgICYmIG1fc3RhdGUu
Y29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50U3RhdGUsIGN1cnJlbnRTdGF0ZSB8IGlzTG9ja2Vk
Qml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgaXNMb2NrZWRCaXQgfCBo
YXNQYXJrZWRCaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQYXJraW5nTG90Ojpjb21w
YXJlQW5kUGFyaygmbV9zdGF0ZSwgaXNMb2NrZWRCaXQgfCBoYXNQYXJrZWRCaXQpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIE5FVkVSX0lOTElORSB2b2lkIHVubG9ja1Nsb3coKQotICAg
IHsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fc3RhdGUs
Ci0gICAgICAgICAgICBbdGhpc10gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIHsK
LSAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdG9yZSgwKTsKLSAgICAgICAgICAg
IH0pOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgU3RhdGVUeXBlIGlzTG9ja2VkQml0
ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgU3RhdGVUeXBlIGhhc1BhcmtlZEJpdCA9IDI7Ci0gICAg
Ci0gICAgQXRvbWljPFN0YXRlVHlwZT4gbV9zdGF0ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFN0YXRlVHlwZT4KLWNsYXNzIFRodW5kZXJMb2NrIHsKLXB1YmxpYzoKLSAgICBUaHVuZGVyTG9j
aygpCi0gICAgewotICAgICAgICBtX3N0YXRlLnN0b3JlKFVubG9ja2VkKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKFVubG9ja2VkLCBMb2NrZWQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGxvY2tTbG93KCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgdW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtF
TFkobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKExvY2tlZCwgVW5sb2NrZWQsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGVhc2UpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ICAgIHVubG9ja1Nsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICE9IFVubG9ja2VkOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgTkVWRVJfSU5M
SU5FIHZvaWQgbG9ja1Nsb3coKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Bp
bkxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBTdGF0ZSBjdXJyZW50U3RhdGUgPSBtX3N0YXRl
LmxvYWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBV
bmxvY2tlZAotICAgICAgICAgICAgICAgICYmIG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhV
bmxvY2tlZCwgTG9ja2VkKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gTG9ja2VkQW5kUGFya2VkKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgICAgICBpZiAobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKFVubG9ja2VkLCBMb2Nr
ZWQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKExvY2tlZCwgTG9ja2VkQW5kUGFya2VkKTsKLSAg
ICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZtX3N0YXRlLCBMb2NrZWRBbmRQ
YXJrZWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIE5FVkVSX0lOTElORSB2b2lkIHVu
bG9ja1Nsb3coKQotICAgIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuZXhjaGFuZ2UoVW5sb2NrZWQp
ID09IExvY2tlZEFuZFBhcmtlZCkKLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgm
bV9zdGF0ZSk7Ci0gICAgfQotICAgIAotICAgIGVudW0gU3RhdGUgOiBTdGF0ZVR5cGUgewotICAg
ICAgICBVbmxvY2tlZCwKLSAgICAgICAgTG9ja2VkLAotICAgICAgICBMb2NrZWRBbmRQYXJrZWQK
LSAgICB9OwotICAgIAotICAgIEF0b21pYzxTdGF0ZT4gbV9zdGF0ZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFN0YXRlVHlwZT4KLWNsYXNzIENhc2NhZGVMb2NrIHsKLXB1YmxpYzoKLSAgICBD
YXNjYWRlTG9jaygpCi0gICAgewotICAgICAgICBtX3N0YXRlLnN0b3JlKFVubG9ja2VkKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9z
dGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKFVubG9ja2VkLCBMb2NrZWQsIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGxv
Y2tTbG93KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdW5sb2NrKCkKLSAgICB7Ci0gICAgICAg
IGlmIChMSUtFTFkobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKExvY2tlZCwgVW5sb2NrZWQs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIHVubG9ja1Nsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpICE9IFVubG9ja2VkOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
TkVWRVJfSU5MSU5FIHZvaWQgbG9ja1Nsb3coKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3BpbkxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBTdGF0ZSBjdXJyZW50U3RhdGUg
PSBtX3N0YXRlLmxvYWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cnJlbnRT
dGF0ZSA9PSBVbmxvY2tlZAotICAgICAgICAgICAgICAgICYmIG1fc3RhdGUuY29tcGFyZUV4Y2hh
bmdlV2VhayhVbmxvY2tlZCwgTG9ja2VkKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gTG9ja2VkQW5kUGFya2Vk
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6
OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdGF0
ZSBkZXNpcmVkU3RhdGUgPSBMb2NrZWQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAg
IGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoVW5sb2NrZWQsIGRlc2lyZWRTdGF0ZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkZXNp
cmVkU3RhdGUgPSBMb2NrZWRBbmRQYXJrZWQ7Ci0gICAgICAgICAgICBtX3N0YXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoTG9ja2VkLCBMb2NrZWRBbmRQYXJrZWQpOwotICAgICAgICAgICAgUGFya2lu
Z0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIExvY2tlZEFuZFBhcmtlZCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgTkVWRVJfSU5MSU5FIHZvaWQgdW5sb2NrU2xvdygpCi0gICAg
ewotICAgICAgICBpZiAobV9zdGF0ZS5leGNoYW5nZShVbmxvY2tlZCkgPT0gTG9ja2VkQW5kUGFy
a2VkKQotICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKCZtX3N0YXRlKTsKLSAgICB9
Ci0gICAgCi0gICAgZW51bSBTdGF0ZSA6IFN0YXRlVHlwZSB7Ci0gICAgICAgIFVubG9ja2VkLAot
ICAgICAgICBMb2NrZWQsCi0gICAgICAgIExvY2tlZEFuZFBhcmtlZAotICAgIH07Ci0gICAgCi0g
ICAgQXRvbWljPFN0YXRlPiBtX3N0YXRlOwotfTsKLQotY2xhc3MgSGFuZG9mZkxvY2sgewotcHVi
bGljOgotICAgIEhhbmRvZmZMb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fc3RhdGUuc3RvcmUoMCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgbG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZ
KG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxvY2tTbG93
KCk7Ci0gICAgfQotCi0gICAgdm9pZCB1bmxvY2soKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VM
WShtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGVhc2UpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB1bmxvY2tT
bG93KCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9zdGF0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNMb2Nr
ZWRCaXQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBORVZFUl9JTkxJTkUgdm9pZCBsb2Nr
U2xvdygpCi0gICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
dGF0ZSA9IG1fc3RhdGUubG9hZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIShz
dGF0ZSAmIGlzTG9ja2VkQml0KSkgewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoc3RhdGUsIHN0YXRlIHwgaXNMb2NrZWRCaXQpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdl
YWsoc3RhdGUsIHN0YXRlICsgcGFya2VkQ291bnRVbml0KSkgewotICAgICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIHN0YXRlICsg
cGFya2VkQ291bnRVbml0KTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmV4Y2hhbmdlQW5kQWRk
KC1wYXJrZWRDb3VudFVuaXQpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBORVZFUl9JTkxJTkUgdm9pZCB1bmxvY2tTbG93KCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXRlID0gbV9zdGF0ZS5sb2FkKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghKHN0YXRlID4+IHBhcmtlZENvdW50U2hpZnQp
KSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUgPT0gaXNMb2NrZWRCaXQp
OwotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2Nr
ZWRCaXQsIDApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChQ
YXJraW5nTG90Ojp1bnBhcmtPbmUoJm1fc3RhdGUpLmRpZFVucGFya1RocmVhZCkgewotICAgICAg
ICAgICAgICAgIC8vIFdlIHVucGFya2VkIHNvbWVvbmUuIFRoZXJlIGFyZSBub3cgcnVubmluZyBh
bmQgdGhleSBob2xkIHRoZSBsb2NrLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm9ib2R5IHVucGFya2VkLiBNYXli
ZSB0aGVyZSBpc24ndCBhbnlvbmUgd2FpdGluZy4gSnVzdCB0cnkgYWdhaW4uCi0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlzTG9ja2VkQml0ID0gMTsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcGFya2VkQ291bnRTaGlmdCA9IDE7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHBhcmtlZENvdW50VW5pdCA9IDEgPDwgcGFya2VkQ291bnRTaGlm
dDsKLSAgICAKLSAgICBBdG9taWM8dW5zaWduZWQ+IG1fc3RhdGU7Ci19OwotCiBOT19SRVRVUk4g
dm9pZCB1c2FnZSgpCiB7CiAgICAgcHJpbnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCB5aWVsZHNw
aW5sb2NrfHBhdXNlc3BpbmxvY2t8d29yZGxvY2t8bG9ja3xiYXJnaW5nbG9ja3xiYXJnaW5nd29y
ZGxvY2t8dGh1bmRlcmxvY2t8dGh1bmRlcndvcmRsb2NrfGNhc2NhZGVsb2NrfGNhc2NhZGV3b3Jk
bG9ja2hhbmRvZmZsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0gdGhyZWFk
cyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8d29yayBiZXR3ZWVuIGNy
aXRpY2FsIHNlY3Rpb25zPiA8c3BpbiBsaW1pdD4gPHNlY29uZHMgcGVyIHRlc3Q+XG4iKTsKQEAg
LTQyMCw2NCArNzEsNjMgQEAgdm9pZCByZXBvcnRSZXN1bHQoY29uc3QgY2hhciogbmFtZSwgZG91
YgogICAgIHJlc3VsdHMuYWRkKG5hbWUsIFZlY3Rvcjxkb3VibGU+KCkpLml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQodmFsdWUpOwogfQogCi1ib29sIGRpZFJ1bjsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGU+Ci12b2lkIHJ1bkJlbmNobWFyayhjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMpOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxkb3VibGU+W10+IHdvcmRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxXaXRoUGFkZGluZzxkb3VibGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8
VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXAp
OwotCi0gICAgdm9sYXRpbGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOwotCi0gICAgZG91YmxlIGJl
Zm9yZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIAotICAgIExvY2sgbnVt
SXRlcmF0aW9uc0xvY2s7Ci0gICAgdWludDY0X3QgbnVtSXRlcmF0aW9ucyA9IDA7Ci0gICAgCi0g
ICAgZm9yICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJl
YWRHcm91cEluZGV4LS07KSB7Ci0gICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVl
ID0gMDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Bl
ckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91
cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFk
KAotICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKLSAgICAgICAgICAgICAgICBb
dGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZrZWVwR29pbmcsICZudW1JdGVyYXRp
b25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgpIHsKLSAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IGxvY2FsV29yZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IDE7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG15TnVtSXRlcmF0aW9ucyA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChrZWVwR29pbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlLmxvY2soKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XS52YWx1
ZSArPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t0aHJlYWRHcm91
cEluZGV4XS52YWx1ZSAqPSAxLjAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWU7CitzdHJ1Y3QgQmVuY2htYXJrIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KKyAgICBzdGF0aWMgdm9pZCBydW4oY29uc3Qg
Y2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxM
b2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBl
PltdPihudW1UaHJlYWRHcm91cHMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRp
bmc8ZG91YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91Ymxl
PltdPihudW1UaHJlYWRHcm91cHMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRl
bnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+
KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisKKyAgICAgICAgdm9sYXRp
bGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOworCisgICAgICAgIGRvdWJsZSBiZWZvcmUgPSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAKKyAgICAgICAgTG9jayBudW1JdGVyYXRp
b25zTG9jazsKKyAgICAgICAgdWludDY0X3QgbnVtSXRlcmF0aW9ucyA9IDA7CisgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhy
ZWFkR3JvdXBJbmRleC0tOykgeworICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0u
dmFsdWUgPSAwOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgeworICAgICAgICAgICAgICAgIHRocmVh
ZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9
IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAor
ICAgICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZr
ZWVwR29pbmcsICZudW1JdGVyYXRpb25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb2NhbFdvcmQgPSAwOworICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHZhbHVlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG15TnVtSXRlcmF0aW9ucyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
a2VlcEdvaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3NbdGhyZWFkR3Jv
dXBJbmRleF0udmFsdWUubG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWUgKz0gdmFs
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5k
ZXhdLnZhbHVlICo9IDEuMDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5k
ZXhdLnZhbHVlLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IHdvcmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9uczsgai0tOykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFdvcmQgKz0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2FsV29yZCAqPSAxLjAxOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGxvY2FsV29yZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlOdW1JdGVyYXRpb25zKys7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0
aHJlYWRHcm91cEluZGV4XS52YWx1ZS51bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHdvcmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9uczsgai0tOykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsV29yZCArPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhbFdvcmQgKj0gMS4wMTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGxvY2FsV29yZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG15TnVtSXRlcmF0aW9ucysrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG51bUl0ZXJh
dGlvbnNMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbnVtSXRlcmF0aW9ucyArPSBteU51bUl0
ZXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihudW1JdGVyYXRpb25zTG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBudW1JdGVyYXRpb25zICs9IG15TnVtSXRlcmF0aW9uczsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBzbGVlcChzZWNv
bmRzUGVyVGVzdCk7Ci0gICAga2VlcEdvaW5nID0gZmFsc2U7CisgICAgICAgIHNsZWVwKHNlY29u
ZHNQZXJUZXN0KTsKKyAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAgCi0gICAgZm9yICh1
bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91
cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51
bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAg
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CiAK
LSAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAg
ICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgCi0g
ICAgcmVwb3J0UmVzdWx0KG5hbWUsIG51bUl0ZXJhdGlvbnMgLyAoYWZ0ZXIgLSBiZWZvcmUpIC8g
MTAwMCk7Ci0gICAgZGlkUnVuID0gdHJ1ZTsKLX0KKyAgICAgICAgcmVwb3J0UmVzdWx0KG5hbWUs
IG51bUl0ZXJhdGlvbnMgLyAoYWZ0ZXIgLSBiZWZvcmUpIC8gMTAwMCk7CisgICAgfQorfTsKIAog
dW5zaWduZWQgcmFuZ2VNaW47CiB1bnNpZ25lZCByYW5nZU1heDsKQEAgLTUwOCwzNyArMTU4LDYg
QEAgYm9vbCBwYXJzZVZhbHVlKGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBydW5FdmVyeXRoaW5nKGNvbnN0IGNoYXIqIHdoYXQpCi17Ci0gICAg
aWYgKCFzdHJjbXAod2hhdCwgInlpZWxkc3BpbmxvY2siKSB8fCAhc3RyY21wKHdoYXQsICJhbGwi
KSkKLSAgICAgICAgcnVuQmVuY2htYXJrPFlpZWxkU3BpbkxvY2s+KCJZaWVsZFNwaW5Mb2NrIik7
Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgInBhdXNlc3BpbmxvY2siKSB8fCAhc3RyY21wKHdoYXQs
ICJhbGwiKSkKLSAgICAgICAgcnVuQmVuY2htYXJrPFBhdXNlU3BpbkxvY2s+KCJQYXVzZVNwaW5M
b2NrIik7Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgIndvcmRsb2NrIikgfHwgIXN0cmNtcCh3aGF0
LCAiYWxsIikpCi0gICAgICAgIHJ1bkJlbmNobWFyazxXb3JkTG9jaz4oIldURldvcmRMb2NrIik7
Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgImxvY2siKSB8fCAhc3RyY21wKHdoYXQsICJhbGwiKSkK
LSAgICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEZMb2NrIik7Ci0gICAgaWYgKCFzdHJjbXAo
d2hhdCwgImJhcmdpbmdsb2NrIikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCi0gICAgICAgIHJ1
bkJlbmNobWFyazxCYXJnaW5nTG9jazx1aW50OF90Pj4oIkJ5dGVCYXJnaW5nTG9jayIpOwotICAg
IGlmICghc3RyY21wKHdoYXQsICJiYXJnaW5nd29yZGxvY2siKSB8fCAhc3RyY21wKHdoYXQsICJh
bGwiKSkKLSAgICAgICAgcnVuQmVuY2htYXJrPEJhcmdpbmdMb2NrPHVpbnQzMl90Pj4oIldvcmRC
YXJnaW5nTG9jayIpOwotICAgIGlmICghc3RyY21wKHdoYXQsICJ0aHVuZGVybG9jayIpIHx8ICFz
dHJjbXAod2hhdCwgImFsbCIpKQotICAgICAgICBydW5CZW5jaG1hcms8VGh1bmRlckxvY2s8dWlu
dDhfdD4+KCJCeXRlVGh1bmRlckxvY2siKTsKLSAgICBpZiAoIXN0cmNtcCh3aGF0LCAidGh1bmRl
cndvcmRsb2NrIikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCi0gICAgICAgIHJ1bkJlbmNobWFy
azxUaHVuZGVyTG9jazx1aW50MzJfdD4+KCJXb3JkVGh1bmRlckxvY2siKTsKLSAgICBpZiAoIXN0
cmNtcCh3aGF0LCAiY2FzY2FkZWxvY2siKSB8fCAhc3RyY21wKHdoYXQsICJhbGwiKSkKLSAgICAg
ICAgcnVuQmVuY2htYXJrPENhc2NhZGVMb2NrPHVpbnQ4X3Q+PigiQnl0ZUNhc2NhZGVMb2NrIik7
Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgImNhc2NhZGV3b3JkbG9jayIpIHx8ICFzdHJjbXAod2hh
dCwgImFsbCIpKQotICAgICAgICBydW5CZW5jaG1hcms8Q2FzY2FkZUxvY2s8dWludDMyX3Q+Pigi
V29yZENhc2NhZGVMb2NrIik7Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgImhhbmRvZmZsb2NrIikg
fHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCi0gICAgICAgIHJ1bkJlbmNobWFyazxIYW5kb2ZmTG9j
az4oIkhhbmRvZmZMb2NrIik7Ci0gICAgaWYgKCFzdHJjbXAod2hhdCwgIm11dGV4IikgfHwgIXN0
cmNtcCh3aGF0LCAiYWxsIikpCi0gICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIlBsYXRmb3Jt
TXV0ZXgiKTsKLQotICAgIGlmICghZGlkUnVuKQotICAgICAgICB1c2FnZSgpOwotfQotCiB9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQpA
QCAtNTUwLDcgKzE2OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAg
ICAgfHwgIXBhcnNlVmFsdWUoYXJndlszXSwgJm51bVRocmVhZHNQZXJHcm91cCkKICAgICAgICAg
fHwgIXBhcnNlVmFsdWUoYXJndls0XSwgJndvcmtQZXJDcml0aWNhbFNlY3Rpb24pCiAgICAgICAg
IHx8ICFwYXJzZVZhbHVlKGFyZ3ZbNV0sICZ3b3JrQmV0d2VlbkNyaXRpY2FsU2VjdGlvbnMpCi0g
ICAgICAgIHx8ICFwYXJzZVZhbHVlKGFyZ3ZbNl0sICZzcGluTGltaXQpCisgICAgICAgIHx8ICFw
YXJzZVZhbHVlKGFyZ3ZbNl0sICZ0b3lMb2NrU3BpbkxpbWl0KQogICAgICAgICB8fCBzc2NhbmYo
YXJndls3XSwgIiVsZiIsICZzZWNvbmRzUGVyVGVzdCkgIT0gMSkKICAgICAgICAgdXNhZ2UoKTsK
ICAgICAKQEAgLTU1OSwxMCArMTc4LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA9IHJhbmdlTWluOyB2YWx1ZSA8PSByYW5n
ZU1heDsgdmFsdWUgKz0gcmFuZ2VTdGVwKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJSdW5uaW5n
IHdpdGggdmFsdWUgPSAiLCB2YWx1ZSwgIlxuIik7CiAgICAgICAgICAgICAqcmFuZ2VWYXJpYWJs
ZSA9IHZhbHVlOwotICAgICAgICAgICAgcnVuRXZlcnl0aGluZyhhcmd2WzFdKTsKKyAgICAgICAg
ICAgIHJ1bkV2ZXJ5dGhpbmc8QmVuY2htYXJrPihhcmd2WzFdKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQotICAgICAgICBydW5FdmVyeXRoaW5nKGFyZ3ZbMV0pOworICAgICAgICBydW5FdmVyeXRo
aW5nPEJlbmNobWFyaz4oYXJndlsxXSk7CiAgICAgCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHJl
c3VsdHMpIHsKICAgICAgICAgcHJpbnRmKCIlcyA9IHsiLCBlbnRyeS5rZXkuZGF0YSgpKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Ub3lMb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvYmVuY2htYXJrcy9Ub3lMb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi9i
ZW5jaG1hcmtzL1RveUxvY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFRveUxvY2tzX2gKKyNkZWZpbmUgVG95TG9ja3NfaAorCisjaW5jbHVkZSA8dGhyZWFkPgorI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvUGFya2luZ0xvdC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgorCituYW1lc3BhY2Ug
eworCit1bnNpZ25lZCB0b3lMb2NrU3BpbkxpbWl0ID0gNDA7CisKKy8vIFRoaXMgaXMgdGhlIG9s
ZCBXVEY6OlNwaW5Mb2NrIGNsYXNzLCBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgd2UgY2FuIHN0aWxs
IGNvbXBhcmUgb3VyIG5ldyBsb2NrcyB0byBhCisvLyBzcGlubG9jayBiYXNlbGluZS4KK2NsYXNz
IFlpZWxkU3BpbkxvY2sgeworcHVibGljOgorICAgIFlpZWxkU3BpbkxvY2soKQorICAgIHsKKyAg
ICAgICAgbV9sb2NrLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0K
KworICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICB3aGlsZSAoIW1fbG9jay5jb21wYXJl
RXhjaGFuZ2VXZWFrKDAsIDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAg
ICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygp
CisgICAgeworICAgICAgICBtX2xvY2suc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9sb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEF0b21pYzx1bnNpZ25lZD4gbV9sb2NrOworfTsKKworY2xhc3MgUGF1c2VT
cGluTG9jayB7CitwdWJsaWM6CisgICAgUGF1c2VTcGluTG9jaygpCisgICAgeworICAgICAgICBt
X2xvY2suc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorCisgICAg
dm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIHdoaWxlICghbV9sb2NrLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoMCwgMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAgICBhc20g
dm9sYXRpbGUgKCJwYXVzZSIpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7Cisg
ICAgICAgIG1fbG9jay5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICB9
CisKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xv
Y2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX2xvY2s7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdGF0
ZVR5cGU+CitjbGFzcyBCYXJnaW5nTG9jayB7CitwdWJsaWM6CisgICAgQmFyZ2luZ0xvY2soKQor
ICAgIHsKKyAgICAgICAgbV9zdGF0ZS5zdG9yZSgwKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2NrKCkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIGlzTG9ja2VkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBsb2NrU2xvdygpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUuY29t
cGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5sb2NrU2xvdygp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3N0YXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0xvY2tl
ZEJpdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5FVkVSX0lOTElORSB2b2lkIGxvY2tT
bG93KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRveUxvY2tTcGluTGltaXQ7
IGktLTspIHsKKyAgICAgICAgICAgIFN0YXRlVHlwZSBjdXJyZW50U3RhdGUgPSBtX3N0YXRlLmxv
YWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEoY3VycmVudFN0YXRlICYgaXNM
b2NrZWRCaXQpCisgICAgICAgICAgICAgICAgJiYgbV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KGN1cnJlbnRTdGF0ZSwgY3VycmVudFN0YXRlIHwgaXNMb2NrZWRCaXQpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAm
IGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgU3RhdGVUeXBlIGN1cnJlbnRTdGF0ZSA9
IG1fc3RhdGUubG9hZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIShjdXJyZW50
U3RhdGUgJiBpc0xvY2tlZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBtX3N0YXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoY3VycmVudFN0YXRlLCBjdXJyZW50U3RhdGUgfCBpc0xvY2tlZEJpdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N0YXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIGlzTG9ja2VkQml0IHwgaGFzUGFya2Vk
Qml0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBh
cmsoJm1fc3RhdGUsIGlzTG9ja2VkQml0IHwgaGFzUGFya2VkQml0KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUgdm9pZCB1bmxvY2tTbG93KCkKKyAgICB7CisgICAg
ICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKKyAgICAgICAgICAgICZtX3N0YXRlLAorICAgICAg
ICAgICAgW3RoaXNdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSB7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RvcmUoaGFzUGFya2VkQml0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RvcmUoMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IFN0YXRlVHlwZSBpc0xvY2tlZEJpdCA9IDE7Cisg
ICAgc3RhdGljIGNvbnN0IFN0YXRlVHlwZSBoYXNQYXJrZWRCaXQgPSAyOworICAgIAorICAgIEF0
b21pYzxTdGF0ZVR5cGU+IG1fc3RhdGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdGF0ZVR5
cGU+CitjbGFzcyBUaHVuZGVyTG9jayB7CitwdWJsaWM6CisgICAgVGh1bmRlckxvY2soKQorICAg
IHsKKyAgICAgICAgbV9zdGF0ZS5zdG9yZShVbmxvY2tlZCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUuY29tcGFyZUV4Y2hh
bmdlV2VhayhVbmxvY2tlZCwgTG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBsb2NrU2xvdygpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fc3Rh
dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhMb2NrZWQsIFVubG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxlYXNlKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bmxv
Y2tTbG93KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc3RhdGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAh
PSBVbmxvY2tlZDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5FVkVSX0lOTElORSB2b2lk
IGxvY2tTbG93KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRveUxvY2tTcGlu
TGltaXQ7IGktLTspIHsKKyAgICAgICAgICAgIFN0YXRlIGN1cnJlbnRTdGF0ZSA9IG1fc3RhdGUu
bG9hZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IFVu
bG9ja2VkCisgICAgICAgICAgICAgICAgJiYgbV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKFVu
bG9ja2VkLCBMb2NrZWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBMb2NrZWRBbmRQYXJrZWQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJl
YWQ6OnlpZWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoVW5sb2NrZWQsIExvY2tl
ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoTG9ja2VkLCBMb2NrZWRBbmRQYXJrZWQpOworICAg
ICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIExvY2tlZEFuZFBh
cmtlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHZvaWQgdW5s
b2NrU2xvdygpCisgICAgeworICAgICAgICBpZiAobV9zdGF0ZS5leGNoYW5nZShVbmxvY2tlZCkg
PT0gTG9ja2VkQW5kUGFya2VkKQorICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZt
X3N0YXRlKTsKKyAgICB9CisgICAgCisgICAgZW51bSBTdGF0ZSA6IFN0YXRlVHlwZSB7CisgICAg
ICAgIFVubG9ja2VkLAorICAgICAgICBMb2NrZWQsCisgICAgICAgIExvY2tlZEFuZFBhcmtlZAor
ICAgIH07CisgICAgCisgICAgQXRvbWljPFN0YXRlPiBtX3N0YXRlOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgU3RhdGVUeXBlPgorY2xhc3MgQ2FzY2FkZUxvY2sgeworcHVibGljOgorICAgIENh
c2NhZGVMb2NrKCkKKyAgICB7CisgICAgICAgIG1fc3RhdGUuc3RvcmUoVW5sb2NrZWQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3N0
YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoVW5sb2NrZWQsIExvY2tlZCwgc3RkOjptZW1vcnlfb3Jk
ZXJfYWNxdWlyZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbG9j
a1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAg
aWYgKExJS0VMWShtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoTG9ja2VkLCBVbmxvY2tlZCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTG9ja2Vk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXRlLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkgIT0gVW5sb2NrZWQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBO
RVZFUl9JTkxJTkUgdm9pZCBsb2NrU2xvdygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0b3lMb2NrU3BpbkxpbWl0OyBpLS07KSB7CisgICAgICAgICAgICBTdGF0ZSBjdXJyZW50
U3RhdGUgPSBtX3N0YXRlLmxvYWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1
cnJlbnRTdGF0ZSA9PSBVbmxvY2tlZAorICAgICAgICAgICAgICAgICYmIG1fc3RhdGUuY29tcGFy
ZUV4Y2hhbmdlV2VhayhVbmxvY2tlZCwgTG9ja2VkKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gTG9ja2VkQW5k
UGFya2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBTdGF0ZSBkZXNpcmVkU3RhdGUgPSBMb2NrZWQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoVW5sb2NrZWQsIGRlc2lyZWRT
dGF0ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZXNpcmVkU3RhdGUgPSBMb2NrZWRBbmRQYXJrZWQ7CisgICAgICAgICAgICBtX3N0YXRlLmNv
bXBhcmVFeGNoYW5nZVdlYWsoTG9ja2VkLCBMb2NrZWRBbmRQYXJrZWQpOworICAgICAgICAgICAg
UGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIExvY2tlZEFuZFBhcmtlZCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHZvaWQgdW5sb2NrU2xvdygp
CisgICAgeworICAgICAgICBpZiAobV9zdGF0ZS5leGNoYW5nZShVbmxvY2tlZCkgPT0gTG9ja2Vk
QW5kUGFya2VkKQorICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKCZtX3N0YXRlKTsK
KyAgICB9CisgICAgCisgICAgZW51bSBTdGF0ZSA6IFN0YXRlVHlwZSB7CisgICAgICAgIFVubG9j
a2VkLAorICAgICAgICBMb2NrZWQsCisgICAgICAgIExvY2tlZEFuZFBhcmtlZAorICAgIH07Cisg
ICAgCisgICAgQXRvbWljPFN0YXRlPiBtX3N0YXRlOworfTsKKworY2xhc3MgSGFuZG9mZkxvY2sg
eworcHVibGljOgorICAgIEhhbmRvZmZMb2NrKCkKKyAgICB7CisgICAgICAgIG1fc3RhdGUuc3Rv
cmUoMCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAo
TElLRUxZKG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxdWlyZSkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxv
Y2tTbG93KCk7CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYg
KExJS0VMWShtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1
bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9zdGF0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYg
aXNMb2NrZWRCaXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBORVZFUl9JTkxJTkUgdm9p
ZCBsb2NrU2xvdygpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBzdGF0ZSA9IG1fc3RhdGUubG9hZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIShzdGF0ZSAmIGlzTG9ja2VkQml0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoc3RhdGUsIHN0YXRlIHwgaXNMb2NrZWRCaXQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoc3RhdGUsIHN0YXRlICsgcGFya2VkQ291bnRVbml0KSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIHN0
YXRlICsgcGFya2VkQ291bnRVbml0KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLmV4Y2hhbmdl
QW5kQWRkKC1wYXJrZWRDb3VudFVuaXQpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUgdm9pZCB1bmxvY2tTbG93KCkKKyAgICB7CisgICAg
ICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXRlID0gbV9zdGF0ZS5sb2Fk
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghKHN0YXRlID4+IHBhcmtlZENvdW50
U2hpZnQpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUgPT0gaXNMb2Nr
ZWRCaXQpOworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWso
aXNMb2NrZWRCaXQsIDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChQYXJraW5nTG90Ojp1bnBhcmtPbmUoJm1fc3RhdGUpLmRpZFVucGFya1RocmVhZCkgewor
ICAgICAgICAgICAgICAgIC8vIFdlIHVucGFya2VkIHNvbWVvbmUuIFRoZXJlIGFyZSBub3cgcnVu
bmluZyBhbmQgdGhleSBob2xkIHRoZSBsb2NrLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTm9ib2R5IHVucGFya2Vk
LiBNYXliZSB0aGVyZSBpc24ndCBhbnlvbmUgd2FpdGluZy4gSnVzdCB0cnkgYWdhaW4uCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlzTG9ja2VkQml0
ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcGFya2VkQ291bnRTaGlmdCA9IDE7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBhcmtlZENvdW50VW5pdCA9IDEgPDwgcGFya2VkQ291
bnRTaGlmdDsKKyAgICAKKyAgICBBdG9taWM8dW5zaWduZWQ+IG1fc3RhdGU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCZW5jaG1hcms+Cit2b2lkIHJ1bkV2ZXJ5dGhpbmcoY29uc3QgY2hhciog
d2hhdCkKK3sKKyAgICBpZiAoIXN0cmNtcCh3aGF0LCAieWllbGRzcGlubG9jayIpIHx8ICFzdHJj
bXAod2hhdCwgImFsbCIpKQorICAgICAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxZaWVsZFNw
aW5Mb2NrPigiWWllbGRTcGluTG9jayIpOworICAgIGlmICghc3RyY21wKHdoYXQsICJwYXVzZXNw
aW5sb2NrIikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCisgICAgICAgIEJlbmNobWFyazo6dGVt
cGxhdGUgcnVuPFBhdXNlU3BpbkxvY2s+KCJQYXVzZVNwaW5Mb2NrIik7CisgICAgaWYgKCFzdHJj
bXAod2hhdCwgIndvcmRsb2NrIikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCisgICAgICAgIEJl
bmNobWFyazo6dGVtcGxhdGUgcnVuPFdvcmRMb2NrPigiV1RGV29yZExvY2siKTsKKyAgICBpZiAo
IXN0cmNtcCh3aGF0LCAibG9jayIpIHx8ICFzdHJjbXAod2hhdCwgImFsbCIpKQorICAgICAgICBC
ZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxMb2NrPigiV1RGTG9jayIpOworICAgIGlmICghc3RyY21w
KHdoYXQsICJiYXJnaW5nbG9jayIpIHx8ICFzdHJjbXAod2hhdCwgImFsbCIpKQorICAgICAgICBC
ZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxCYXJnaW5nTG9jazx1aW50OF90Pj4oIkJ5dGVCYXJnaW5n
TG9jayIpOworICAgIGlmICghc3RyY21wKHdoYXQsICJiYXJnaW5nd29yZGxvY2siKSB8fCAhc3Ry
Y21wKHdoYXQsICJhbGwiKSkKKyAgICAgICAgQmVuY2htYXJrOjp0ZW1wbGF0ZSBydW48QmFyZ2lu
Z0xvY2s8dWludDMyX3Q+PigiV29yZEJhcmdpbmdMb2NrIik7CisgICAgaWYgKCFzdHJjbXAod2hh
dCwgInRodW5kZXJsb2NrIikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCisgICAgICAgIEJlbmNo
bWFyazo6dGVtcGxhdGUgcnVuPFRodW5kZXJMb2NrPHVpbnQ4X3Q+PigiQnl0ZVRodW5kZXJMb2Nr
Iik7CisgICAgaWYgKCFzdHJjbXAod2hhdCwgInRodW5kZXJ3b3JkbG9jayIpIHx8ICFzdHJjbXAo
d2hhdCwgImFsbCIpKQorICAgICAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxUaHVuZGVyTG9j
azx1aW50MzJfdD4+KCJXb3JkVGh1bmRlckxvY2siKTsKKyAgICBpZiAoIXN0cmNtcCh3aGF0LCAi
Y2FzY2FkZWxvY2siKSB8fCAhc3RyY21wKHdoYXQsICJhbGwiKSkKKyAgICAgICAgQmVuY2htYXJr
Ojp0ZW1wbGF0ZSBydW48Q2FzY2FkZUxvY2s8dWludDhfdD4+KCJCeXRlQ2FzY2FkZUxvY2siKTsK
KyAgICBpZiAoIXN0cmNtcCh3aGF0LCAiY2FzY2FkZXdvcmRsb2NrIikgfHwgIXN0cmNtcCh3aGF0
LCAiYWxsIikpCisgICAgICAgIEJlbmNobWFyazo6dGVtcGxhdGUgcnVuPENhc2NhZGVMb2NrPHVp
bnQzMl90Pj4oIldvcmRDYXNjYWRlTG9jayIpOworICAgIGlmICghc3RyY21wKHdoYXQsICJoYW5k
b2ZmbG9jayIpIHx8ICFzdHJjbXAod2hhdCwgImFsbCIpKQorICAgICAgICBCZW5jaG1hcms6OnRl
bXBsYXRlIHJ1bjxIYW5kb2ZmTG9jaz4oIkhhbmRvZmZMb2NrIik7CisgICAgaWYgKCFzdHJjbXAo
d2hhdCwgIm11dGV4IikgfHwgIXN0cmNtcCh3aGF0LCAiYWxsIikpCisgICAgICAgIEJlbmNobWFy
azo6dGVtcGxhdGUgcnVuPE11dGV4PigiUGxhdGZvcm1NdXRleCIpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFRveUxvY2tzX2gKKwo=
</data>
<flag name="review"
          id="302253"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>