<?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>20821</bug_id>
          
          <creation_ts>2008-09-12 18:07:38 -0700</creation_ts>
          <short_desc>Cache property transitions to speed up object initialization</short_desc>
          <delta_ts>2008-09-14 01:19:15 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91007</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-12 18:07:38 -0700</bug_when>
    <thetext>EarlyBoyer spends 16.6% of its time in cti_op_put_by_id_generic, much of it under StructureID::addPropertyTransition. A lot of this time could be removed by inline caching property transitions - the old structure ID, the new structureID, and the offset to write to (and a call to resize if needed). DeltaBlue is also somewhat affected (3.6% in put_by_id_generic) as is Raytrace, though in the case of RayTrace much of the badness could just be due to Arguments not being very clever.

See bug 20813.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91026</commentid>
    <comment_count>1</comment_count>
      <attachid>23389</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-13 02:03:29 -0700</bug_when>
    <thetext>Created attachment 23389
patch mostly by oliver with some bug fixes by me (needs ChangeLog, cleanup)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91098</commentid>
    <comment_count>2</comment_count>
      <attachid>23406</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-13 23:51:11 -0700</bug_when>
    <thetext>Created attachment 23406
Fully implemented transition cache, now with a bonus feature: correctness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91099</commentid>
    <comment_count>3</comment_count>
      <attachid>23406</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-14 00:30:59 -0700</bug_when>
    <thetext>Comment on attachment 23406
Fully implemented transition cache, now with a bonus feature: correctness

Removing review flag, this apparently breaks gmail :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91100</commentid>
    <comment_count>4</comment_count>
      <attachid>23406</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-14 00:46:19 -0700</bug_when>
    <thetext>Comment on attachment 23406
Fully implemented transition cache, now with a bonus feature: correctness

Cameron lied to me, it works fine!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91101</commentid>
    <comment_count>5</comment_count>
      <attachid>23406</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 01:08:11 -0700</bug_when>
    <thetext>Comment on attachment 23406
Fully implemented transition cache, now with a bonus feature: correctness

I think &quot;failuresCases&quot; would probably be better as &quot;failureCases&quot;.

You have some extra blank lines, like CTI.cpp:1900 and Machine.cpp:2474.

Perhaps sIDC would be better as structureIDChain or chain? What do you think?

Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91102</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-09-14 01:19:15 -0700</bug_when>
    <thetext>	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/VM/CTI.cpp
	M	JavaScriptCore/VM/CTI.h
	M	JavaScriptCore/VM/CodeBlock.cpp
	M	JavaScriptCore/VM/CodeGenerator.cpp
	M	JavaScriptCore/VM/Machine.cpp
	M	JavaScriptCore/VM/Machine.h
	M	JavaScriptCore/VM/Opcode.h
	M	JavaScriptCore/kjs/JSObject.h
	M	JavaScriptCore/kjs/PutPropertySlot.h
	M	JavaScriptCore/kjs/StructureID.cpp
	M	JavaScriptCore/kjs/StructureID.h
	M	JavaScriptCore/masm/X86Assembler.h
Committed r36401

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23389</attachid>
            <date>2008-09-13 02:03:29 -0700</date>
            <delta_ts>2008-09-13 23:51:11 -0700</delta_ts>
            <desc>patch mostly by oliver with some bug fixes by me (needs ChangeLog, cleanup)</desc>
            <filename>fast-transition.patch.txt</filename>
            <type>text/plain</type>
            <size>27850</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzYz
NjgpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNyArNTg0LDcgQEAgdm9p
ZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdFB1dEFyZyhY
ODY6OmVheCwgMCk7IC8vIGxlYXZlIHRoZSBiYXNlIGluIGVheAogICAgICAgICAgICAgZW1pdFB1
dEFyZyhYODY6OmVkeCwgOCk7IC8vIGxlYXZlIHRoZSBiYXNlIGluIGVkeAogICAgICAgICAgICAg
ZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgICAgICAgICBpICs9
IDY7CisgICAgICAgICAgICBpICs9IDg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDogewpAQCAtMTMwNCw2ICsxMzA0LDcgQEAgdm9pZCBD
VEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBjYXNlIG9wX2dldF9zdHJpbmdf
bGVuZ3RoOgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5lcmljOgogICAgICAgICBjYXNl
IG9wX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xODM0LDYgKzE4MzUsMTA5IEBAIHZvaWQqIENUSTo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlk
UmVwbGFjZSgKICAgICByZXR1cm4gY29kZTsKIH0KIAorc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxM
IHRyYW5zaXRpb25PYmplY3QoU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAg
U3RydWN0dXJlSUQqIG9sZFN0cnVjdHVyZUlEID0gbmV3U3RydWN0dXJlSUQtPnByZXZpb3VzSUQo
KTsKKworICAgIGJhc2VPYmplY3QtPnRyYW5zaXRpb25UbyhuZXdTdHJ1Y3R1cmVJRCk7CisKKyAg
ICBpZiAob2xkU3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuc3RvcmFnZVNpemUoKSA9PSBKU09i
amVjdDo6aW5saW5lU3RvcmFnZUNhcGFjaXR5KQorICAgICAgICBiYXNlT2JqZWN0LT5hbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShvbGRTdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5zdG9yYWdlU2l6
ZSgpLCBvbGRTdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5zaXplKCkpOworCisgICAgYmFzZU9i
amVjdC0+cHV0RGlyZWN0T2Zmc2V0KGNhY2hlZE9mZnNldCwgdmFsdWUpOworICAgIHJldHVybiBi
YXNlT2JqZWN0OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNpdGlvbldpbGxOZWVkU3Rv
cmFnZVJlYWxsb2MoU3RydWN0dXJlSUQqIG9sZFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3
U3RydWN0dXJlSUQpCit7CisgICAgaWYgKG9sZFN0cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0
b3JhZ2VTaXplKCkgPT0gSlNPYmplY3Q6OmlubGluZVN0b3JhZ2VDYXBhY2l0eSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAob2xkU3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuc3Rv
cmFnZVNpemUoKSA8IEpTT2JqZWN0OjppbmxpbmVTdG9yYWdlQ2FwYWNpdHkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChvbGRTdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5zaXpl
KCkgIT0gbmV3U3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCogQ1RJOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWROZXcoU3RydWN0dXJlSUQqIG9sZFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCog
bmV3U3RydWN0dXJlSUQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUlEQ2hhaW4qIGNo
YWluKQoreworICAgIFZlY3RvcjxYODZBc3NlbWJsZXI6OkptcFNyYywgMTY+IGJ1Y2tldHNPZkZh
aWw7CisgICAgLy8gY2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJl
SUQuCisgICAgbV9qaXQudGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgp
OworICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKG1faml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKKyAg
ICBtX2ppdC5jbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ob2xkU3RydWN0dXJl
SUQpLCBPQkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWF4KTsKKyAg
ICBidWNrZXRzT2ZGYWlsLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSk7CisgICAgVmVj
dG9yPFg4NkFzc2VtYmxlcjo6Sm1wU3JjPiBidWNrZXRzT2ZXaW47CisKKyAgICAvLyAgZWN4ID0g
YmFzZU9iamVjdAorICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlSUQpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgIC8vIHByb3RvKGVjeCkgPSBiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGUoKQorICAgIG1faml0LmNtcGxfaTMybShP
YmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGUpLCBYODY6OmVjeCk7
CisgICAgYnVja2V0c09mRmFpbC5hcHBlbmQobV9qaXQuZW1pdFVubGlua2VkSm5lKCkpOworICAg
IG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV9wcm90b3R5cGUpLCBY
ODY6OmVjeCwgWDg2OjplY3gpOworICAgIAorICAgIC8vIGVjeCA9IGJhc2VPYmplY3QtPm1fc3Ry
dWN0dXJlSUQKKyAgICBmb3IgKFJlZlB0cjxTdHJ1Y3R1cmVJRD4qIGl0ID0gY2hhaW4tPmhlYWQo
KTsgKml0OyArK2l0KSB7CisgICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHByb3RvdHlwZQorICAg
ICAgICBtX2ppdC5jbXBsX2kzMnIocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4gKGpzTnVsbCgp
KSwgWDg2OjplY3gpOworICAgICAgICBidWNrZXRzT2ZXaW4uYXBwZW5kKG1faml0LmVtaXRVbmxp
bmtlZEplKCkpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKKyAgICAgICAg
bV9qaXQuY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIE9C
SkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlEKSwgWDg2OjplY3gpOworICAgICAgICBi
dWNrZXRzT2ZGYWlsLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlE
KSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgbV9qaXQuY21wbF9pMzJtKE9iamVjdFR5
cGUsIE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICAg
ICAgYnVja2V0c09mRmFpbC5hcHBlbmQobV9qaXQuZW1pdFVubGlua2VkSm5lKCkpOworICAgICAg
ICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fcHJvdG90eXBlKSwg
WDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgCisgICAgfQorICAgIGJ1Y2tldHNPZkZhaWwu
YXBwZW5kKG1faml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnVja2V0c09mV2luLnNpemUoKTsgKytpKQorICAgICAgICBtX2ppdC5saW5rKGJ1Y2tl
dHNPZldpbltpXSwgbV9qaXQubGFiZWwoKSk7CisKKyAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBj
YWxsVGFyZ2V0OworICAgIC8vIEZhc3QgY2FzZSwgZG9uJ3QgbmVlZCB0byBkbyBhbnkgaGVhdnkg
bGlmdGluZywgc28gZG9uJ3QgYm90aGVyIG1ha2luZyBhIGNhbGwuCisgICAgaWYgKCF0cmFuc2l0
aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmVJRCwgbmV3U3RydWN0dXJlSUQp
KSB7CisgICAgICAgIC8vIEFzc3VtZXMgbV9yZWZDb3VudCBjYW4gYmUgZGVjcmVtZW50ZWQgZWFz
aWx5LCByZWZjb3VudCBkZWNyZW1lbnQgaXMgc2FmZSBhcyAKKyAgICAgICAgLy8gY29kZWJsb2Nr
IHNob3VsZCBlbnN1cmUgb2xkU3RydWN0dXJlSUQtPm1fcmVmQ291bnQgPiAwCisgICAgICAgIG1f
aml0LnN1YmxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZFN0cnVjdHVyZUlEKSk7
CisgICAgICAgIG1faml0LmFkZGxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5ld1N0
cnVjdHVyZUlEKSk7CisgICAgICAgIG1faml0Lm1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PihuZXdTdHJ1Y3R1cmVJRCksIE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZUlEKSwgWDg2OjplYXgpOworCisgICAgICAgIC8vIHdyaXRlIHRoZSB2YWx1ZQorICAgICAgICBt
X2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwg
WDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgbV9qaXQubW92bF9ybShYODY6OmVkeCwgY2Fj
aGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIFNsb3cgY2FzZSB0cmFuc2l0aW9uIC0tIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8g
cXVpdGUgYSBiaXQgb2Ygd29yaywKKyAgICAgICAgLy8gc28ganVzdCBtYWtlIGEgY2FsbAorICAg
ICAgICBtX2ppdC5wdXNobF9yKFg4Njo6ZWR4KTsKKyAgICAgICAgbV9qaXQucHVzaGxfcihYODY6
OmVheCk7CisgICAgICAgIG1faml0Lm1vdmxfaTMycihjYWNoZWRPZmZzZXQsIFg4Njo6ZWF4KTsK
KyAgICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVheCk7CisgICAgICAgIG1faml0Lm1vdmxfaTMy
cihyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmVJRCksIFg4Njo6ZWF4KTsK
KyAgICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVheCk7CisgICAgICAgIGNhbGxUYXJnZXQgPSBt
X2ppdC5lbWl0Q2FsbCgpOworICAgICAgICBtX2ppdC5hZGRsX2kzMnIoNCAqIHNpemVvZih2b2lk
KiksIFg4Njo6ZXNwKTsKKyAgICB9CisgICAgbV9qaXQucmV0KCk7CisgICAgdm9pZCogY29kZSA9
IG1faml0LmNvcHkoKTsKKyAgICBBU1NFUlQoY29kZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCisgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKKworICAgIGlmICh0cmFuc2l0aW9u
V2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmVJRCwgbmV3U3RydWN0dXJlSUQpKQor
ICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odHJhbnNpdGlvbk9iamVjdCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5z
dHJ1Y3R1cmVJREFjY2Vzc1N0dWJzLmFwcGVuZChjb2RlKTsKKyAgICAKKyAgICByZXR1cm4gY29k
ZTsKK30KKwogdm9pZCogQ1RJOjpwcml2YXRlQXJyYXlMZW5ndGhUcmFtcG9saW5lKCkKIHsKICAg
ICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKSW5kZXg6IFZNL0NUSS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFZNL0NUSS5oCShyZXZpc2lvbiAzNjM2OCkKKysrIFZNL0NUSS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTksNiArMjU5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQ1RJIGN0aSht
YWNoaW5lLCBleGVjLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2YXRl
Q29tcGlsZVB1dEJ5SWRSZXBsYWNlKHN0cnVjdHVyZUlELCBjYWNoZWRPZmZzZXQpOwogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCogY29tcGlsZVB1dEJ5SWROZXcoTWFj
aGluZSogbWFjaGluZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlSUQqIG9sZFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3U3RydWN0dXJlSUQsIHNp
emVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUlEQ2hhaW4qIHNJREMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENUSSBjdGkobWFjaGluZSwgZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IHJldHVybiBjdGkucHJpdmF0ZUNvbXBpbGVQdXRCeUlkTmV3KG9sZFN0cnVjdHVyZUlELCBuZXdT
dHJ1Y3R1cmVJRCwgY2FjaGVkT2Zmc2V0LCBzSURDKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyB2b2lkKiBjb21waWxlQXJyYXlMZW5ndGhUcmFtcG9saW5lKE1hY2hpbmUqIG1hY2hpbmUs
IEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKQEAgLTI5
MSw2ICsyOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogcHJpdmF0ZUNvbXBp
bGVHZXRCeUlkUHJvdG8oRXhlY1N0YXRlKiwgU3RydWN0dXJlSUQqLCBTdHJ1Y3R1cmVJRCogcHJv
dG90eXBlU3RydWN0dXJlSUQsIHNpemVfdCBjYWNoZWRPZmZzZXQpOwogICAgICAgICB2b2lkKiBw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVJRCosIFN0cnVj
dHVyZUlEQ2hhaW4qLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQpOwogICAgICAg
ICB2b2lkKiBwcml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZUlEKiwgc2l6ZV90
IGNhY2hlZE9mZnNldCk7CisgICAgICAgIHZvaWQqIHByaXZhdGVDb21waWxlUHV0QnlJZE5ldyhT
dHJ1Y3R1cmVJRCosIFN0cnVjdHVyZUlEKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJl
SURDaGFpbiopOwogICAgICAgICB2b2lkKiBwcml2YXRlQXJyYXlMZW5ndGhUcmFtcG9saW5lKCk7
CiAgICAgICAgIHZvaWQqIHByaXZhdGVTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCk7CiAKSW5kZXg6
IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMzYzNjgpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyAr
MTcyLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRQdXRCeUlkT3AoaW50IGxvY2F0aW9uLAogICAgIGlu
dCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKICAgICBwcmludGYoIlslNGRdICVzXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIG9wLCBy
ZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXJzW2lkMF0pLmNf
c3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSk7Ci0gICAgaXQgKz0gMjsKKyAgICBpdCAr
PSA0OwogfQogCiB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVJRChjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBpbnQgb3BlcmFuZCkgY29uc3QKQEAgLTE5OCw2
ICsxOTgsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlSURzKGNvbnN0IAogICAg
ICAgICBwcmludGYoIiAgWyU0ZF0gJXM6ICVzLCAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJn
ZXRfYnlfaWRfcHJvdG8iLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzRdLnUuc3RydWN0dXJl
SUQpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzVdLnUu
c3RydWN0dXJlSUQpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbikpIHsKKyAgICAgICAgcHJpbnRmKCIgIFslNGRdICVzOiAlcywgJXMs
ICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgInB1dF9ieV9pZF9uZXciLCBwb2ludGVyVG9Tb3Vy
Y2VTdHJpbmcodlBDWzRdLnUuc3RydWN0dXJlSUQpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBwb2lu
dGVyVG9Tb3VyY2VTdHJpbmcodlBDWzVdLnUuc3RydWN0dXJlSUQpLlVURjhTdHJpbmcoKS5jX3N0
cigpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzddLnUuc3RydWN0dXJlSURDaGFpbikuVVRG
OFN0cmluZygpLmNfc3RyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICh2UENb
MF0udS5vcGNvZGUgPT0gbWFjaGluZS0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9jaGFpbikpIHsK
ICAgICAgICAgcHJpbnRmKCIgIFslNGRdICVzOiAlcywgJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0
LCAiZ2V0X2J5X2lkX2NoYWluIiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s0XS51LnN0cnVj
dHVyZUlEKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s1
XS51LnN0cnVjdHVyZUlEQ2hhaW4pLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNTkyLDYgKzU5NiwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChsb2NhdGlvbiwgaXQsIGlkZW50
aWZpZXJzLCAicHV0X2J5X2lkX3JlcGxhY2UiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246IHsKKyAgICAgICAgICAg
IHByaW50UHV0QnlJZE9wKGxvY2F0aW9uLCBpdCwgaWRlbnRpZmllcnMsICJwdXRfYnlfaWRfbmV3
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9i
eV9pZF9nZW5lcmljOiB7CiAgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChsb2NhdGlvbiwgaXQs
IGlkZW50aWZpZXJzLCAicHV0X2J5X2lkX2dlbmVyaWMiKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtODYzLDYgKzg3MSwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZGVyZWZTdHJ1Y3R1cmVJRHMoSW5z
dHJ1CiAgICAgICAgIHZQQ1s1XS51LnN0cnVjdHVyZUlEQ2hhaW4tPmRlcmVmKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBtYWNoaW5lLT5nZXRP
cGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pKSB7CisgICAgICAgIHZQQ1s0XS51LnN0cnVj
dHVyZUlELT5kZXJlZigpOworICAgICAgICB2UENbNV0udS5zdHJ1Y3R1cmVJRC0+ZGVyZWYoKTsK
KyAgICAgICAgdlBDWzddLnUuc3RydWN0dXJlSURDaGFpbi0+ZGVyZWYoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29k
ZShvcF9wdXRfYnlfaWRfcmVwbGFjZSkpIHsKICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlSUQt
PmRlcmVmKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTg5MCw2ICs5MDQsMTIgQEAgdm9pZCBDb2Rl
QmxvY2s6OnJlZlN0cnVjdHVyZUlEcyhJbnN0cnVjdAogICAgICAgICB2UENbNV0udS5zdHJ1Y3R1
cmVJRENoYWluLT5yZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAodlBDWzBd
LnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbikp
IHsKKyAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlSUQtPnJlZigpOworICAgICAgICB2UENbNV0u
dS5zdHJ1Y3R1cmVJRC0+cmVmKCk7CisgICAgICAgIHZQQ1s3XS51LnN0cnVjdHVyZUlEQ2hhaW4t
PnJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICh2UENbMF0udS5vcGNvZGUg
PT0gbWFjaGluZS0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9yZXBsYWNlKSkgewogICAgICAgICB2
UENbNF0udS5zdHJ1Y3R1cmVJRC0+cmVmKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAzNjM2OCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MzYsNiArODM2LDggQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SWQoUgog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAg
IHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Vk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM2MzY4KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMTIsNyArMTExMiw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmVJRENoYWluKiBj
YWNoZVByb3RvdHlwZUMKICAgICByZXR1cm4gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNo
YWluKCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNhY2hlUHV0QnlJRChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVl
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5l
Ojp0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgLy8gUmVjdXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2
ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9uLgogICAgIGlmICh2UENbMF0udS5vcGNvZGUg
IT0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpCkBAIC0xMTI2LDEyICsxMTI2LDYgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q2FjaGVQdXRCeQogICAgICAgICB2UENbMF0gPSBnZXRP
cGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0g
ICAgLy8gRklYTUU6IENhY2hlIG5ldyBwcm9wZXJ0eSB0cmFuc2l0aW9ucywgdG9vLgotICAgIGlm
IChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAg
IHZQQ1swXSA9IGdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAgICAgCiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KGJhc2VWYWx1ZSk7CiAgICAgU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEID0gYmFzZUNlbGwt
PnN0cnVjdHVyZUlEKCk7CkBAIC0xMTYyLDYgKzExNTYsMjYgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
TWFjaGluZTo6dHJ5Q2FjaGVQdXRCeQogICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0
X2J5X2lkX2dlbmVyaWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gU3RydWN0
dXJlSUQgdHJhbnNpdGlvbiwgY2FjaGUgdHJhbnNpdGlvbiBpbmZvCisgICAgaWYgKHNsb3QudHlw
ZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PEpTVmFsdWUqPihiYXNlQ2VsbCktPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihiYXNlQ2VsbCktPmlzQWN0aXZhdGlvbk9iamVjdCgpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIGNhbiBvbmx5IHJlYWxseSBoYXBwZW4gaWYgd2UncmUgY3JlYXRpbmcgdGhlIEFyZ3Vt
ZW50cyBvYmplY3QKKyAgICAgICAgICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9wdXRfYnlfaWRf
Z2VuZXJpYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdlBDWzBd
ID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKTsKKyAgICAgICAgdlBDWzRdID0g
c3RydWN0dXJlSUQtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgdlBDWzVdID0gc3RydWN0dXJlSUQ7
CisgICAgICAgIHZQQ1s2XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgIFN0cnVjdHVy
ZUlEQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7Cisg
ICAgICAgIGlmICghY2hhaW4pCisgICAgICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hh
aW4oZXhlYywgc3RydWN0dXJlSUQpOworICAgICAgICB2UENbN10gPSBjaGFpbjsKKyAgICAgICAg
Y29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJRHModlBDKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9wdXRfYnlfaWRfcmVwbGFjZSk7CiAgICAgdlBD
WzVdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICBjb2RlQmxvY2stPnJlZlN0cnVjdHVyZUlE
cyh2UEMpOwpAQCAtMjQwNCw3ICsyNDE4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BD
T0RFKG9wX3B1dF9ieV9pZCkgewotICAgICAgICAvKiBwdXRfYnlfaWQgYmFzZShyKSBwcm9wZXJ0
eShpZCkgdmFsdWUocikgbm9wKG4pIG5vcChuKQorICAgICAgICAvKiBwdXRfYnlfaWQgYmFzZShy
KSBwcm9wZXJ0eShpZCkgdmFsdWUocikgbm9wKG4pIG5vcChuKSBub3Aobikgbm9wKG4pCiAKICAg
ICAgICAgICAgR2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3M6IFNldHMgdGhlIHByb3BlcnR5IG5hbWVk
IGJ5IGlkZW50aWZpZXIKICAgICAgICAgICAgcHJvcGVydHksIGJlbG9uZ2luZyB0byByZWdpc3Rl
ciBiYXNlLCB0byByZWdpc3RlciB2YWx1ZS4KQEAgLTI0MjQsMTMgKzI0MzgsNjYgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBiYXNlVmFsdWUtPnB1
dChleGVjLCBpZGVudCwgclt2YWx1ZV0uanNWYWx1ZShleGVjKSwgc2xvdCk7CiAgICAgICAgIFZN
X0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHRyeUNhY2hlUHV0QnlJRChjb2RlQmxvY2ss
IHZQQywgYmFzZVZhbHVlLCBzbG90KTsKKyAgICAgICAgdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGNv
ZGVCbG9jaywgdlBDLCBiYXNlVmFsdWUsIHNsb3QpOworCisgICAgICAgIHZQQyArPSA4OworICAg
ICAgICBORVhUX09QQ09ERTsKKyAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX3B1dF9ieV9pZF90
cmFuc2l0aW9uKSB7CisgICAgICAgIC8qIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uIGJhc2Uocikg
cHJvcGVydHkoaWQpIHZhbHVlKHIpIHN0cnVjdHVyZUlEQ2hhaW4oc0lEYykgb2xkU3RydWN0dXJl
SUQoc0lEKSBuZXdTdHJ1Y3R1cmVJRChzSUQpIG9mZnNldChuKQorICAgICAgICAgCisgICAgICAg
ICBDYWNoZWQgcHJvcGVydHkgYWNjZXNzOiBBdHRlbXB0cyB0byBzZXQgYSBwcmUtZXhpc3Rpbmcs
IGNhY2hlZAorICAgICAgICAgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSwg
YmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2UsCisgICAgICAgICB0byByZWdpc3RlciB2YWx1ZS4g
SWYgdGhlIGNhY2hlIG1pc3Nlcywgb3BfcHV0X2J5X2lkX3JlcGxhY2UKKyAgICAgICAgIHJldmVy
dHMgdG8gb3BfcHV0X2J5X2lkLgorICAgICAgICAgCisgICAgICAgICBVbmxpa2UgbWFueSBvcGNv
ZGVzLCB0aGlzIG9uZSBkb2VzIG5vdCB3cml0ZSBhbnkgb3V0cHV0IHRvCisgICAgICAgICB0aGUg
cmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgICovCisgICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUu
b3BlcmFuZDsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4
ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRp
YXRlKGJhc2VWYWx1ZSkpKSB7CisgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEKiBvbGRT
dHJ1Y3R1cmVJRCA9IHZQQ1s0XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAgU3RydWN0dXJl
SUQqIG5ld1N0cnVjdHVyZUlEID0gdlBDWzVdLnUuc3RydWN0dXJlSUQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZUlEKCkgPT0gb2xkU3Ry
dWN0dXJlSUQpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VDZWxsLT5pc09iamVjdCgp
KTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4oYmFzZUNlbGwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4qIGl0ID0gdlBDWzddLnUuc3RydWN0
dXJlSURDaGFpbi0+aGVhZCgpOworCisgICAgICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihiYXNlT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5
cGVGb3JMb29rdXAoZXhlYykpOworICAgICAgICAgICAgICAgIHdoaWxlICghcHJvdG8tPmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShwcm90by0+c3RydWN0dXJl
SUQoKSAhPSAoKml0KS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuY2FjaGVQ
dXRCeUlEKGNvZGVCbG9jaywgdlBDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsraXQ7Cisg
ICAgICAgICAgICAgICAgICAgIHByb3RvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihwcm90by0+
c3RydWN0dXJlSUQoKS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT50cmFuc2l0aW9uVG8obmV3U3RydWN0
dXJlSUQpOworICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAo
KS5zdG9yYWdlU2l6ZSgpID09IEpTT2JqZWN0OjppbmxpbmVTdG9yYWdlQ2FwYWNpdHkpCisgICAg
ICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9sZFN0
cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0b3JhZ2VTaXplKCksIG9sZFN0cnVjdHVyZUlELT5w
cm9wZXJ0eU1hcCgpLnNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSB2UENb
M10udS5vcGVyYW5kOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZQQ1s2XS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxv
Y2F0aW9uKGJhc2VPYmplY3QtPmdldERpcmVjdExvY2F0aW9uKGNvZGVCbG9jay0+aWRlbnRpZmll
cnNbdlBDWzJdLnUub3BlcmFuZF0pKSA9PSBvZmZzZXQpOworICAgICAgICAgICAgICAgIGJhc2VP
YmplY3QtPnB1dERpcmVjdE9mZnNldChvZmZzZXQsIHJbdmFsdWVdLmpzVmFsdWUoZXhlYykpOwog
Ci0gICAgICAgIHZQQyArPSA2OworICAgICAgICAgICAgICAgIHZQQyArPSA4OworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQyk7CiAgICAgICAgIE5FWFRfT1BD
T0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0X2J5X2lkX3JlcGxhY2UpIHsKLSAg
ICAgICAgLyogb3BfcHV0X2J5X2lkX3JlcGxhY2UgYmFzZShyKSBwcm9wZXJ0eShpZCkgdmFsdWUo
cikgc3RydWN0dXJlSUQoc0lEKSBvZmZzZXQobikKKyAgICAgICAgLyogb3BfcHV0X2J5X2lkX3Jl
cGxhY2UgYmFzZShyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikgc3RydWN0dXJlSUQoc0lEKSBvZmZz
ZXQobikgbm9wKG4pIG5vcChuKQogCiAgICAgICAgICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6
IEF0dGVtcHRzIHRvIHNldCBhIHByZS1leGlzdGluZywgY2FjaGVkCiAgICAgICAgICAgIHByb3Bl
cnR5IG5hbWVkIGJ5IGlkZW50aWZpZXIgcHJvcGVydHksIGJlbG9uZ2luZyB0byByZWdpc3RlciBi
YXNlLApAQCAtMjQ1Niw3ICsyNTIzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JM
b2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihjb2RlQmxvY2stPmlkZW50aWZp
ZXJzW3ZQQ1syXS51Lm9wZXJhbmRdKSkgPT0gb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBiYXNl
T2JqZWN0LT5wdXREaXJlY3RPZmZzZXQob2Zmc2V0LCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsK
IAotICAgICAgICAgICAgICAgIHZQQyArPSA2OworICAgICAgICAgICAgICAgIHZQQyArPSA4Owog
ICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNDY1LDcgKzI1MzIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0
X2J5X2lkX2dlbmVyaWMpIHsKLSAgICAgICAgLyogb3BfcHV0X2J5X2lkX2dlbmVyaWMgYmFzZShy
KSBwcm9wZXJ0eShpZCkgdmFsdWUocikgbm9wKG4pIG5vcChuKQorICAgICAgICAvKiBvcF9wdXRf
YnlfaWRfZ2VuZXJpYyBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1ZShyKSBub3Aobikgbm9wKG4p
IG5vcChuKSBub3AobikKIAogICAgICAgICAgICBHZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0
cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgogICAgICAgICAgICBwcm9wZXJ0eSwg
YmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2UsIHRvIHJlZ2lzdGVyIHZhbHVlLgpAQCAtMjQ4NCw3
ICsyNTUxLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0uanNWYWx1ZShleGVjKSwg
c2xvdCk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHZQQyArPSA2
OworICAgICAgICB2UEMgKz0gODsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIEJF
R0lOX09QQ09ERShvcF9kZWxfYnlfaWQpIHsKQEAgLTM1NTYsMTIgKzM2MjMsNiBAQCBORVZFUl9J
TkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1CiAgICAgICAgIGN0aVJlcGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsICh2b2lkKiljdGlfb3BfcHV0X2J5X2lkX2dl
bmVyaWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgLy8gRklYTUU6IENhY2hlIG5l
dyBwcm9wZXJ0eSB0cmFuc2l0aW9ucywgdG9vLgotICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsICh2b2lkKiljdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIAogICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBz
dGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsdWUpOwogICAgIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1
cmVJRCA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpOwpAQCAtMzU4NCw2ICszNjQ1LDI3IEBAIE5F
VkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlUHUKICAgICAgICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgKHZvaWQqKWN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmVJ
RCB0cmFuc2l0aW9uLCBjYWNoZSB0cmFuc2l0aW9uIGluZm8KKyAgICBpZiAoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8SlNWYWx1ZSo+KGJhc2VDZWxsKS0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KGJhc2VDZWxsKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgY2FuIG9ubHkgcmVhbGx5IGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgQXJndW1lbnRz
IG9iamVjdAorICAgICAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJu
QWRkcmVzcywgKHZvaWQqKWN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uKTsKKyAgICAgICAgdlBDWzRdID0gc3RydWN0dXJlSUQtPnByZXZpb3VzSUQo
KTsKKyAgICAgICAgdlBDWzVdID0gc3RydWN0dXJlSUQ7CisgICAgICAgIHZQQ1s2XSA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWluID0gc3RydWN0
dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CisgICAgICAgIGlmICghY2hhaW4pCisgICAg
ICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlSUQpOwor
ICAgICAgICB2UENbN10gPSBjaGFpbjsKKyAgICAgICAgY29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJ
RHModlBDKTsKKyAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRk
cmVzcywgQ1RJOjpjb21waWxlUHV0QnlJZE5ldyh0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZUlELT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCBj
aGFpbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIHZQQ1swXSA9IGdldE9w
Y29kZShvcF9wdXRfYnlfaWRfcmVwbGFjZSk7CiAgICAgdlBDWzRdID0gc3RydWN0dXJlSUQ7CiAg
ICAgdlBDWzVdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKSW5kZXg6IFZNL01hY2hpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJKHJldmlzaW9uIDM2MzY4KQorKysgVk0vTWFjaGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZvaWQgdW5jYWNo
ZUdldEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7Ci0gICAgICAgIHZvaWQgdHJ5
Q2FjaGVQdXRCeUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VW
YWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1
ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNh
Y2hlUHV0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKIAogI2lmIEVOQUJMRShD
VEkpCkluZGV4OiBWTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNp
b24gMzYzNjgpCisrKyBWTS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3BfZ2V0X2FycmF5X2xlbmd0aCkgXAog
ICAgICAgICBtYWNybyhvcF9nZXRfc3RyaW5nX2xlbmd0aCkgXAogICAgICAgICBtYWNybyhvcF9w
dXRfYnlfaWQpIFwKKyAgICAgICAgbWFjcm8ob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pIFwKICAg
ICAgICAgbWFjcm8ob3BfcHV0X2J5X2lkX3JlcGxhY2UpIFwKICAgICAgICAgbWFjcm8ob3BfcHV0
X2J5X2lkX2dlbmVyaWMpIFwKICAgICAgICAgbWFjcm8ob3BfZGVsX2J5X2lkKSBcCkluZGV4OiBr
anMvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNPYmplY3QuaAkocmV2aXNpb24gMzYz
NjgpCisrKyBranMvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnR5U3RvcmFnZVtv
ZmZzZXRdOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCB0cmFuc2l0aW9uVG8oU3RydWN0dXJl
SUQqKTsKKwogICAgICAgICB2b2lkIHJlbW92ZURpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICBib29sIGhhc0N1c3RvbVByb3BlcnRpZXMoKSB7IHJldHVybiAh
bV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5pc0VtcHR5KCk7IH0KICAgICAgICAgYm9vbCBo
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRC0+cHJvcGVy
dHlNYXAoKS5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0KQEAgLTE3OCw2ICsxODAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShz
aXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICBib29sIHVzaW5nSW5saW5l
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlTdG9yYWdlID09IG1faW5saW5lU3Rv
cmFnZTsgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5saW5lU3RvcmFnZUNhcGFj
aXR5ID0gMjsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RGb3JXcml0ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jiwg
Ym9vbCYgc2xvdElzV3JpdGVhYmxlKTsKIApAQCAtMTg1LDggKzE4OSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBT
dHJ1Y3R1cmVJRCogY3JlYXRlSW5oZXJpdG9ySUQoKTsKIAotICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGlubGluZVN0b3JhZ2VDYXBhY2l0eSA9IDI7Ci0KICAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZUlEPiBtX2luaGVyaXRvcklEOwogCiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBtX3Byb3Bl
cnR5U3RvcmFnZTsgICAgICAgIApAQCAtMzg5LDIzICszOTEsMzAgQEAgaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdChjb25zdCBJZAogICAgICAgICAgcmV0dXJuOwogICAgICB9CiAKLSAg
ICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0
cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLmdldE9mZnNldChwcm9wZXJ0eU5hbWUsIGN1cnJlbnRB
dHRyaWJ1dGVzKTsKLSAgICAgaWYgKG9mZnNldCAhPSBXVEY6Om5vdEZvdW5kKSB7Ci0gICAgICAg
ICBpZiAoY2hlY2tSZWFkT25seSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF0gPSB2
YWx1ZTsKLSAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwot
ICAgICAgICAgcmV0dXJuOwotICAgICB9CisgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
CisgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuZ2V0T2Zm
c2V0KHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgIGlmIChvZmZzZXQgIT0g
V1RGOjpub3RGb3VuZCkgeworICAgICAgICBpZiAoY2hlY2tSZWFkT25seSAmJiBjdXJyZW50QXR0
cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Byb3Bl
cnR5U3RvcmFnZVtvZmZzZXRdID0gdmFsdWU7CisgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9w
ZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgIGlmICht
X3N0cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0b3JhZ2VTaXplKCkgPT0gaW5saW5lU3RvcmFn
ZUNhcGFjaXR5KQogICAgICAgICAgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UobV9zdHJ1Y3R1cmVJ
RC0+cHJvcGVydHlNYXAoKS5zdG9yYWdlU2l6ZSgpLCBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eU1h
cCgpLnNpemUoKSk7CiAKICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCA9IFN0
cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24obV9zdHJ1Y3R1cmVJRCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgdGhpcywgc2xvdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpOwor
ICAgICBzbG90LnNldFdhc1RyYW5zaXRpb24odHJ1ZSk7CiAgICAgIHNldFN0cnVjdHVyZUlEKHN0
cnVjdHVyZUlELnJlbGVhc2UoKSk7CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojp0cmFuc2l0
aW9uVG8oU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlEKQoreworICAgIFN0cnVjdHVyZUlEOjp0
cmFuc2l0aW9uVG8obV9zdHJ1Y3R1cmVJRCwgbmV3U3RydWN0dXJlSUQsIHRoaXMpOworICAgIHNl
dFN0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZUlEKTsKK30KKwogaW5saW5lIEpTVmFsdWUqIEpTT2Jq
ZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUg
cHJlZmVycmVkVHlwZSkgY29uc3QKIHsKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlKGV4ZWMsIHBy
ZWZlcnJlZFR5cGUpOwpJbmRleDoga2pzL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMzYzNjgpCisrKyBranMvUHV0UHJvcGVy
dHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCgpCiAgICAgICAgICAgICA6IG1fdHlwZShJbnZhbGlk
KQogICAgICAgICAgICAgLCBtX2Jhc2UoMCkKKyAgICAgICAgICAgICwgbV93YXNUcmFuc2l0aW9u
KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjUsMTAgKzY2LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGlzQ2FjaGVhYmxlKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgICAgICB9Ci0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
d2FzVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzVHJhbnNpdGlvbjsgfQorICAgICAg
ICB2b2lkIHNldFdhc1RyYW5zaXRpb24oYm9vbCB3YXNUcmFuc2l0aW9uKSB7IG1fd2FzVHJhbnNp
dGlvbiA9IHdhc1RyYW5zaXRpb247IH0KICAgICBwcml2YXRlOgogICAgICAgICBUeXBlIG1fdHlw
ZTsKICAgICAgICAgSlNPYmplY3QqIG1fYmFzZTsKKyAgICAgICAgYm9vbCBtX3dhc1RyYW5zaXRp
b247CiAgICAgICAgIHNpemVfdCBtX29mZnNldDsKICAgICB9OwogCkluZGV4OiBranMvU3RydWN0
dXJlSUQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9TdHJ1Y3R1cmVJRC5jcHAJKHJldmlzaW9uIDM2
MzY4KQorKysga2pzL1N0cnVjdHVyZUlELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQVNTRVJUKG1fcHJvdG90eXBlLT5pc09iamVjdCgp
IHx8IG1fcHJvdG90eXBlLT5pc051bGwoKSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlSUQ6OnRyYW5z
aXRpb25UbyhTdHJ1Y3R1cmVJRCogb2xkU3RydWN0dXJlSUQsIFN0cnVjdHVyZUlEKiBuZXdTdHJ1
Y3R1cmVJRCwgSlNPYmplY3QqIHNsb3RCYXNlKQoreworICAgIGlmICghc2xvdEJhc2UtPnVzaW5n
SW5saW5lU3RvcmFnZSgpICYmIG9sZFN0cnVjdHVyZUlELT5tX3Byb3BlcnR5TWFwLnNpemUoKSAh
PSBuZXdTdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eU1hcC5zaXplKCkpCisgICAgICAgIHNsb3RCYXNl
LT5hbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvbGRTdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eU1hcC5z
aXplKCksIG5ld1N0cnVjdHVyZUlELT5tX3Byb3BlcnR5TWFwLnNpemUoKSk7Cit9CisKIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oU3Ry
dWN0dXJlSUQqIHN0cnVjdHVyZUlELCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU09iamVjdCogc2xvdEJhc2UsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlTdG9yYWdlJiBwcm9wZXJ0eVN0b3JhZ2UpCiB7
CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkpOwpAQCAtMTM5LDcgKzE0
NSw3IEBAIFN0cnVjdHVyZUlEQ2hhaW46OlN0cnVjdHVyZUlEQ2hhaW4oU3RydWMKICAgICAgICAg
dG1wID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odG1wLT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVj
dHVyZUlEKCk7CiAgICAgfQogICAgIAotICAgIG1fdmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVj
dHVyZUlEPltzaXplXSk7CisgICAgbV92ZWN0b3Iuc2V0KG5ldyBSZWZQdHI8U3RydWN0dXJlSUQ+
W3NpemUgKyAxXSk7CiAKICAgICBzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAt
IDE7ICsraSkgewpAQCAtMTQ3LDYgKzE1Myw3IEBAIFN0cnVjdHVyZUlEQ2hhaW46OlN0cnVjdHVy
ZUlEQ2hhaW4oU3RydWMKICAgICAgICAgc3RydWN0dXJlSUQgPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KHN0cnVjdHVyZUlELT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVyZUlEKCk7CiAgICAg
fQogICAgIG1fdmVjdG9yW2ldID0gc3RydWN0dXJlSUQ7CisgICAgbV92ZWN0b3JbaSsxXSA9IDA7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDoga2pzL1N0cnVjdHVyZUlELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmgJKHJldmlzaW9uIDM2MzY4KQorKysga2pzL1N0cnVj
dHVyZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBTdHJ1Y3R1cmVJRCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cnVjdHVyZUlE
PiB7CiAgICAgcHVibGljOgorICAgICAgICBmcmllbmQgY2xhc3MgQ1RJOwogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlKEpTVmFsdWUqIHByb3RvdHlwZSwgSlNU
eXBlIHR5cGUgPSBPYmplY3RUeXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0cnVjdHVyZUlEKHByb3RvdHlwZSwgdHlwZSkpOwpAQCAtOTcsMTMgKzk4LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTVmFsdWUqIHN0b3JlZFByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CiAgICAgICAgIEpTVmFsdWUqIHByb3RvdHlw
ZUZvckxvb2t1cChFeGVjU3RhdGUqKTsgCi0gICAgICAgIAorCisgICAgICAgIFN0cnVjdHVyZUlE
KiBwcmV2aW91c0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsgfQorCiAgICAg
ICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRENo
YWluPiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFByb3RvdHlwZUNoYWluID0gY2Fj
aGVkUHJvdG90eXBlQ2hhaW47IH0KICAgICAgICAgU3RydWN0dXJlSURDaGFpbiogY2FjaGVkUHJv
dG90eXBlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgp
OyB9CiAKICAgICAgICAgY29uc3QgUHJvcGVydHlNYXAmIHByb3BlcnR5TWFwKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eU1hcDsgfQogICAgICAgICBQcm9wZXJ0eU1hcCYgcHJvcGVydHlNYXAo
KSB7IHJldHVybiBtX3Byb3BlcnR5TWFwOyB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNp
dGlvblRvKFN0cnVjdHVyZUlEKiBvbGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVj
dHVyZUlELCBKU09iamVjdCogc2xvdEJhc2UpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIHVuc2lnbmVkPiBUcmFuc2l0aW9u
VGFibGVLZXk7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUcmFuc2l0aW9uVGFibGVLZXksIFN0
cnVjdHVyZUlEKiwgVHJhbnNpdGlvblRhYmxlSGFzaCwgVHJhbnNpdGlvblRhYmxlSGFzaFRyYWl0
cz4gVHJhbnNpdGlvblRhYmxlOwpJbmRleDogbWFzbS9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBtYXNtL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAzNjM2OCkKKysrIG1hc20vWDg2QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw2ICsyOTEsMTMgQEAgcHVibGljOgogICAg
ICAgICBtX2J1ZmZlci0+cHV0Qnl0ZShpbW0pOwogICAgIH0KIAorICAgIHZvaWQgYWRkbF9pOG0o
aW50IGltbSwgdm9pZCogYWRkcikKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLT5wdXRCeXRlKE9Q
X0dST1VQMV9FdkliKTsKKyAgICAgICAgZW1pdE1vZFJtX29wbShHUk9VUDFfT1BfQURELCBhZGRy
KTsKKyAgICAgICAgbV9idWZmZXItPnB1dEJ5dGUoaW1tKTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZGxfaTMycihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fYnVmZmVy
LT5wdXRCeXRlKE9QX0dST1VQMV9Fdkl6KTsKQEAgLTM5Niw2ICs0MDMsMTMgQEAgcHVibGljOgog
ICAgICAgICBlbWl0TW9kUm1fb3ByKEdST1VQMV9PUF9TVUIsIGRzdCk7CiAgICAgICAgIG1fYnVm
ZmVyLT5wdXRCeXRlKGltbSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgc3VibF9pOG0oaW50IGlt
bSwgdm9pZCogYWRkcikKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLT5wdXRCeXRlKE9QX0dST1VQ
MV9FdkliKTsKKyAgICAgICAgZW1pdE1vZFJtX29wbShHUk9VUDFfT1BfU1VCLCBhZGRyKTsKKyAg
ICAgICAgbV9idWZmZXItPnB1dEJ5dGUoaW1tKTsKKyAgICB9CiAKICAgICB2b2lkIHN1YmxfaTMy
cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23406</attachid>
            <date>2008-09-13 23:51:11 -0700</date>
            <delta_ts>2008-09-14 01:08:11 -0700</delta_ts>
            <desc>Fully implemented transition cache, now with a bonus feature: correctness</desc>
            <filename>transition-cache.patch</filename>
            <type>text/plain</type>
            <size>32297</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjYjgyNDIyLi5mYWZkZjhkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMDgtMDktMTMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjA4MjE6IENhY2hl
IHByb3BlcnR5IHRyYW5zaXRpb25zIHRvIHNwZWVkIHVwIG9iamVjdCBpbml0aWFsaXphdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MjEKKwor
ICAgICAgICBJbXBsZW1lbnQgYSB0cmFuc2l0aW9uIGNhY2hlIHRvIGltcHJvdmUgdGhlIHBlcmZv
cm1hbmNlIG9mIG5ldyBwcm9wZXJ0aWVzCisgICAgICAgIGJlaW5nIGFkZGVkIHRvIG9iamVjdHMu
ICBUaGlzIGlzIGV4dHJlbWVseSBiZW5lZmljaWFsIGluIGNvbnN0cnVjdG9ycyBhbmQKKyAgICAg
ICAgc2hvd3MgdXAgYXMgYSAzNCUgaW1wcm92ZW1lbnQgb24gYWNjZXNzLWJpbmFyeS10cmVlcyBp
biBTdW5TcGlkZXIgKDAuOCUKKyAgICAgICAgb3ZlcmFsbCkKKworICAgICAgICAqIFZNL0NUSS5j
cHA6CisgICAgICAgIChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAg
IChKU0M6Oik6CisgICAgICAgIChKU0M6OnRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9j
KToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToK
KyAgICAgICAgKiBWTS9DVEkuaDoKKyAgICAgICAgKEpTQzo6Q1RJOjpjb21waWxlUHV0QnlJZFRy
YW5zaXRpb24pOgorICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OnBy
aW50UHV0QnlJZE9wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFN0cnVjdHVyZUlE
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZGVyZWZTdHJ1Y3R1cmVJRHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlZlN0
cnVjdHVyZUlEcyk6CisgICAgICAgICogVk0vQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeUlkKToKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2FjaGVQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6dHJ5Q1RJQ2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBWTS9NYWNoaW5lLmg6CisgICAg
ICAgICogVk0vT3Bjb2RlLmg6CisgICAgICAgICoga2pzL0pTT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dHJhbnNp
dGlvblRvKToKKyAgICAgICAgKiBranMvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6
OlB1dFByb3BlcnR5U2xvdDo6UHV0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UHV0UHJv
cGVydHlTbG90Ojp3YXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90
OjpzZXRXYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKiBranMvU3RydWN0dXJlSUQuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6dHJhbnNpdGlvblRvKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlSURDaGFpbjo6U3RydWN0dXJlSURDaGFpbik6CisgICAgICAgICoga2pzL1N0cnVjdHVy
ZUlELmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpwcmV2aW91c0lEKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlSUQ6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlSUQ6OmNhY2hlZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlSUQ6OnByb3BlcnR5TWFwKToKKyAgICAgICAgKiBtYXNtL1g4NkFzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmFkZGxfaThtKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjpzdWJsX2k4bSk6CisKIDIwMDgtMDktMTIgIENhbWVyb24gWndhcmljaCAgPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNo
b3dpYWsuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwIGIvSmF2YVNjcmlw
dENvcmUvVk0vQ1RJLmNwcAppbmRleCAwYTZkNjI5Li4zODA0YzlhIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9WTS9DVEkuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAKQEAg
LTU4NCw3ICs1ODQsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWF4LCAwKTsgLy8gbGVhdmUgdGhlIGJhc2UgaW4gZWF4
CiAgICAgICAgICAgICBlbWl0UHV0QXJnKFg4Njo6ZWR4LCA4KTsgLy8gbGVhdmUgdGhlIGJhc2Ug
aW4gZWR4CiAgICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lk
KTsKLSAgICAgICAgICAgIGkgKz0gNjsKKyAgICAgICAgICAgIGkgKz0gODsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CkBAIC0xMzA0
LDYgKzEzMDQsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dl
bmVyaWM6CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxhY2U6CisgICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MzQsNiArMTgzNSwxMTMgQEAgdm9pZCogQ1RJOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgc2l6
ZV90IGNhY2hlZE8KICAgICByZXR1cm4gY29kZTsKIH0KIAorZXh0ZXJuICJDIiB7CisKK3N0YXRp
YyBKU1ZhbHVlKiBTRlhfQ0FMTCB0cmFuc2l0aW9uT2JqZWN0KFN0cnVjdHVyZUlEKiBuZXdTdHJ1
Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFs
dWUqIHZhbHVlKQoreworICAgIFN0cnVjdHVyZUlEKiBvbGRTdHJ1Y3R1cmVJRCA9IG5ld1N0cnVj
dHVyZUlELT5wcmV2aW91c0lEKCk7CisKKyAgICBiYXNlT2JqZWN0LT50cmFuc2l0aW9uVG8obmV3
U3RydWN0dXJlSUQpOworCisgICAgaWYgKG9sZFN0cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0
b3JhZ2VTaXplKCkgPT0gSlNPYmplY3Q6OmlubGluZVN0b3JhZ2VDYXBhY2l0eSkKKyAgICAgICAg
YmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2xkU3RydWN0dXJlSUQtPnByb3Bl
cnR5TWFwKCkuc3RvcmFnZVNpemUoKSwgb2xkU3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuc2l6
ZSgpKTsKKworICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdE9mZnNldChjYWNoZWRPZmZzZXQsIHZh
bHVlKTsKKyAgICByZXR1cm4gYmFzZU9iamVjdDsKK30KKworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgdHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2MoU3RydWN0dXJlSUQqIG9sZFN0cnVj
dHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3U3RydWN0dXJlSUQpCit7CisgICAgaWYgKG9sZFN0cnVj
dHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0b3JhZ2VTaXplKCkgPT0gSlNPYmplY3Q6OmlubGluZVN0
b3JhZ2VDYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAob2xkU3RydWN0
dXJlSUQtPnByb3BlcnR5TWFwKCkuc3RvcmFnZVNpemUoKSA8IEpTT2JqZWN0OjppbmxpbmVTdG9y
YWdlQ2FwYWNpdHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChvbGRTdHJ1Y3R1
cmVJRC0+cHJvcGVydHlNYXAoKS5zaXplKCkgIT0gbmV3U3RydWN0dXJlSUQtPnByb3BlcnR5TWFw
KCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCogQ1RJOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZUlE
KiBvbGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBTdHJ1Y3R1cmVJRENoYWluKiBjaGFpbikKK3sKKyAgICBWZWN0b3I8WDg2QXNz
ZW1ibGVyOjpKbXBTcmMsIDE2PiBmYWlsdXJlc0Nhc2VzOworICAgIC8vIGNoZWNrIGVheCBpcyBh
biBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZUlELgorICAgIG1faml0LnRlc3RsX2kzMnIo
SlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBmYWlsdXJlc0Nhc2VzLmFwcGVu
ZChtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSk7CisgICAgbV9qaXQuY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KG9sZFN0cnVjdHVyZUlEKSwgT0JKRUNUX09GRlNFVChKU0NlbGws
IG1fc3RydWN0dXJlSUQpLCBYODY6OmVheCk7CisgICAgZmFpbHVyZXNDYXNlcy5hcHBlbmQobV9q
aXQuZW1pdFVubGlua2VkSm5lKCkpOworICAgIFZlY3RvcjxYODZBc3NlbWJsZXI6OkptcFNyYz4g
c3VjY2Vzc0Nhc2VzOworCisgICAgLy8gIGVjeCA9IGJhc2VPYmplY3QKKyAgICBtX2ppdC5tb3Zs
X21yKE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlEKSwgWDg2OjplYXgsIFg4Njo6
ZWN4KTsKKyAgICAvLyBwcm90byhlY3gpID0gYmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKS0+cHJv
dG90eXBlKCkKKyAgICBtX2ppdC5jbXBsX2kzMm0oT2JqZWN0VHlwZSwgT0JKRUNUX09GRlNFVChT
dHJ1Y3R1cmVJRCwgbV90eXBlKSwgWDg2OjplY3gpOworICAgIGZhaWx1cmVzQ2FzZXMuYXBwZW5k
KG1faml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKKyAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZT
RVQoU3RydWN0dXJlSUQsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAK
KyAgICAvLyBlY3ggPSBiYXNlT2JqZWN0LT5tX3N0cnVjdHVyZUlECisgICAgZm9yIChSZWZQdHI8
U3RydWN0dXJlSUQ+KiBpdCA9IGNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgeworICAgICAgICAv
LyBudWxsIGNoZWNrIHRoZSBwcm90b3R5cGUKKyAgICAgICAgbV9qaXQuY21wbF9pMzJyKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+IChqc051bGwoKSksIFg4Njo6ZWN4KTsKKyAgICAgICAgc3Vj
Y2Vzc0Nhc2VzLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKZSgpKTsKKworICAgICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlIGlkCisgICAgICAgIG1faml0LmNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihpdC0+Z2V0KCkpLCBPQkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmVJRCksIFg4Njo6ZWN4KTsKKyAgICAgICAgZmFpbHVyZXNDYXNlcy5hcHBlbmQobV9qaXQu
ZW1pdFVubGlua2VkSm5lKCkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92bF9tcihPQkpF
Q1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Cisg
ICAgICAgIG1faml0LmNtcGxfaTMybShPYmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVy
ZUlELCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVzQ2FzZXMuYXBwZW5kKG1f
aml0LmVtaXRVbmxpbmtlZEpuZSgpKTsKKyAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZG
U0VUKFN0cnVjdHVyZUlELCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAg
ICAgIAorICAgIH0KKyAgICBmYWlsdXJlc0Nhc2VzLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRK
bmUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1Y2Nlc3NDYXNlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9qaXQubGluayhzdWNjZXNzQ2FzZXNbaV0sIG1faml0LmxhYmVsKCkp
OworCisgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbFRhcmdldDsKKyAgICAvLyBGYXN0IGNh
c2UsIGRvbid0IG5lZWQgdG8gZG8gYW55IGhlYXZ5IGxpZnRpbmcsIHNvIGRvbid0IGJvdGhlciBt
YWtpbmcgYSBjYWxsLgorICAgIGlmICghdHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mo
b2xkU3RydWN0dXJlSUQsIG5ld1N0cnVjdHVyZUlEKSkgeworICAgICAgICAvLyBBc3N1bWVzIG1f
cmVmQ291bnQgY2FuIGJlIGRlY3JlbWVudGVkIGVhc2lseSwgcmVmY291bnQgZGVjcmVtZW50IGlz
IHNhZmUgYXMgCisgICAgICAgIC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVy
ZUlELT5tX3JlZkNvdW50ID4gMAorICAgICAgICBtX2ppdC5zdWJsX2k4bSgxLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihvbGRTdHJ1Y3R1cmVJRCkpOworICAgICAgICBtX2ppdC5hZGRsX2k4bSgx
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihuZXdTdHJ1Y3R1cmVJRCkpOworICAgICAgICBtX2pp
dC5tb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlSUQpLCBP
QkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWF4KTsKKworICAgICAg
ICAvLyB3cml0ZSB0aGUgdmFsdWUKKyAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VU
KEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAg
ICAgIG1faml0Lm1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
KiksIFg4Njo6ZWF4KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTbG93IGNhc2UgdHJhbnNp
dGlvbiAtLSB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIHF1aXRlIGEgYml0IG9mIHdvcmssCisgICAg
ICAgIC8vIHNvIGp1c3QgbWFrZSBhIGNhbGwKKyAgICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVk
eCk7CisgICAgICAgIG1faml0LnB1c2hsX3IoWDg2OjplYXgpOworICAgICAgICBtX2ppdC5tb3Zs
X2kzMnIoY2FjaGVkT2Zmc2V0LCBYODY6OmVheCk7CisgICAgICAgIG1faml0LnB1c2hsX3IoWDg2
OjplYXgpOworICAgICAgICBtX2ppdC5tb3ZsX2kzMnIocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4obmV3U3RydWN0dXJlSUQpLCBYODY6OmVheCk7CisgICAgICAgIG1faml0LnB1c2hsX3IoWDg2
OjplYXgpOworICAgICAgICBjYWxsVGFyZ2V0ID0gbV9qaXQuZW1pdENhbGwoKTsKKyAgICAgICAg
bV9qaXQuYWRkbF9pMzJyKDQgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7CisgICAgfQorICAg
IG1faml0LnJldCgpOworICAgIHZvaWQqIGNvZGUgPSBtX2ppdC5jb3B5KCk7CisgICAgQVNTRVJU
KGNvZGUpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWlsdXJlc0Nhc2Vz
LnNpemUoKTsgKytpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZXND
YXNlc1tpXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7CisKKyAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mob2xk
U3RydWN0dXJlSUQsIG5ld1N0cnVjdHVyZUlEKSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIGNhbGxUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRyYW5zaXRpb25PYmpl
Y3QpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+c3RydWN0dXJlSURBY2Nlc3NTdHVicy5hcHBl
bmQoY29kZSk7CisgICAgCisgICAgcmV0dXJuIGNvZGU7Cit9CisKIHZvaWQqIENUSTo6cHJpdmF0
ZUFycmF5TGVuZ3RoVHJhbXBvbGluZSgpCiB7CiAgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9WTS9DVEkuaCBiL0phdmFTY3JpcHRDb3JlL1ZN
L0NUSS5oCmluZGV4IDJmOGY5OTUuLmM0MjY5NDEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L1ZNL0NUSS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL1ZNL0NUSS5oCkBAIC0yNTksNiArMjU5LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBleGVjLCBj
b2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2YXRlQ29tcGlsZVB1dEJ5SWRS
ZXBsYWNlKHN0cnVjdHVyZUlELCBjYWNoZWRPZmZzZXQpOwogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgdm9pZCogY29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKE1hY2hpbmUqIG1h
Y2hpbmUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZUlE
KiBvbGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBTdHJ1Y3R1cmVJRENoYWluKiBzSURDKQorICAgICAgICB7CisgICAgICAgICAg
ICBDVEkgY3RpKG1hY2hpbmUsIGV4ZWMsIGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1cm4g
Y3RpLnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24ob2xkU3RydWN0dXJlSUQsIG5ld1N0
cnVjdHVyZUlELCBjYWNoZWRPZmZzZXQsIHNJREMpOworICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIHZvaWQqIGNvbXBpbGVBcnJheUxlbmd0aFRyYW1wb2xpbmUoTWFjaGluZSogbWFjaGluZSwg
RXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgewpAQCAtMjkx
LDYgKzI5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBwcml2YXRlQ29tcGls
ZUdldEJ5SWRQcm90byhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVJRCosIFN0cnVjdHVyZUlEKiBwcm90
b3R5cGVTdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCk7CiAgICAgICAgIHZvaWQqIHBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUlEKiwgU3RydWN0
dXJlSURDaGFpbiosIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCk7CiAgICAgICAg
IHZvaWQqIHByaXZhdGVDb21waWxlUHV0QnlJZFJlcGxhY2UoU3RydWN0dXJlSUQqLCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0KTsKKyAgICAgICAgdm9pZCogcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihTdHJ1Y3R1cmVJRCosIFN0cnVjdHVyZUlEKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3Ry
dWN0dXJlSURDaGFpbiopOwogICAgICAgICB2b2lkKiBwcml2YXRlQXJyYXlMZW5ndGhUcmFtcG9s
aW5lKCk7CiAgICAgICAgIHZvaWQqIHByaXZhdGVTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCk7CiAK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9WTS9Db2RlQmxvY2suY3BwCmluZGV4IGE4YTJiNmQuLjM4MDNmMjUgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0v
Q29kZUJsb2NrLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHN0YXRpYyB2b2lkIHByaW50UHV0QnlJ
ZE9wKGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0
CiAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgIHByaW50ZigiWyU0ZF0gJXNcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlv
biwgb3AsIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcnNb
aWQwXSkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpKTsKLSAgICBpdCArPSAyOwor
ICAgIGl0ICs9IDQ7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZUlEKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIGludCBvcGVyYW5kKSBjb25zdApA
QCAtMTk4LDYgKzE5OCwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVJRHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHZQQykgY29uc3QKICAgICAgICAgcHJpbnRmKCIgIFslNGRdICVzOiAl
cywgJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX3Byb3RvIiwgcG9pbnRlclRv
U291cmNlU3RyaW5nKHZQQ1s0XS51LnN0cnVjdHVyZUlEKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwg
cG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s1XS51LnN0cnVjdHVyZUlEKS5VVEY4U3RyaW5nKCku
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKHZQQ1swXS51Lm9wY29k
ZSA9PSBtYWNoaW5lLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pKSB7CisgICAg
ICAgIHByaW50ZigiICBbJTRkXSAlczogJXMsICVzLCAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQs
ICJwdXRfYnlfaWRfbmV3IiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s0XS51LnN0cnVjdHVy
ZUlEKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s1XS51
LnN0cnVjdHVyZUlEKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgcG9pbnRlclRvU291cmNlU3RyaW5n
KHZQQ1s2XS51LnN0cnVjdHVyZUlEQ2hhaW4pLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdl
dE9wY29kZShvcF9nZXRfYnlfaWRfY2hhaW4pKSB7CiAgICAgICAgIHByaW50ZigiICBbJTRkXSAl
czogJXMsICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgImdldF9ieV9pZF9jaGFpbiIsIHBvaW50
ZXJUb1NvdXJjZVN0cmluZyh2UENbNF0udS5zdHJ1Y3R1cmVJRCkuVVRGOFN0cmluZygpLmNfc3Ry
KCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNV0udS5zdHJ1Y3R1cmVJRENoYWluKS5VVEY4
U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU5Miw2ICs1OTYsMTAgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIHByaW50UHV0QnlJZE9wKGxvY2F0
aW9uLCBpdCwgaWRlbnRpZmllcnMsICJwdXRfYnlfaWRfcmVwbGFjZSIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjog
eworICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywg
InB1dF9ieV9pZF90cmFuc2l0aW9uIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5lcmljOiB7CiAgICAgICAgICAgICBwcmludFB1
dEJ5SWRPcChsb2NhdGlvbiwgaXQsIGlkZW50aWZpZXJzLCAicHV0X2J5X2lkX2dlbmVyaWMiKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtODYzLDYgKzg3MSwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZGVyZWZTdHJ1Y3R1cmVJRHMoSW5zdHJ1Y3Rpb24qIHZQQykgY29uc3QKICAgICAgICAgdlBDWzVd
LnUuc3RydWN0dXJlSURDaGFpbi0+ZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAodlBDWzBdLnUub3Bjb2RlID09IG1hY2hpbmUtPmdldE9wY29kZShvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbikpIHsKKyAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlSUQtPmRlcmVmKCk7Cisg
ICAgICAgIHZQQ1s1XS51LnN0cnVjdHVyZUlELT5kZXJlZigpOworICAgICAgICB2UENbNl0udS5z
dHJ1Y3R1cmVJRENoYWluLT5kZXJlZigpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlm
ICh2UENbMF0udS5vcGNvZGUgPT0gbWFjaGluZS0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9yZXBs
YWNlKSkgewogICAgICAgICB2UENbNF0udS5zdHJ1Y3R1cmVJRC0+ZGVyZWYoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtODkwLDYgKzkwNCwxMiBAQCB2b2lkIENvZGVCbG9jazo6cmVmU3RydWN0dXJl
SURzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiAgICAgICAgIHZQQ1s1XS51LnN0cnVjdHVyZUlE
Q2hhaW4tPnJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICh2UENbMF0udS5v
cGNvZGUgPT0gbWFjaGluZS0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKSkgewor
ICAgICAgICB2UENbNF0udS5zdHJ1Y3R1cmVJRC0+cmVmKCk7CisgICAgICAgIHZQQ1s1XS51LnN0
cnVjdHVyZUlELT5yZWYoKTsKKyAgICAgICAgdlBDWzZdLnUuc3RydWN0dXJlSURDaGFpbi0+cmVm
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBt
YWNoaW5lLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX3JlcGxhY2UpKSB7CiAgICAgICAgIHZQQ1s0
XS51LnN0cnVjdHVyZUlELT5yZWYoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2Rl
R2VuZXJhdG9yLmNwcAppbmRleCBmNjZiZDhmLi4wODY1NGFkIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2Rl
R2VuZXJhdG9yLmNwcApAQCAtODM2LDYgKzgzNiw4IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9WTS9NYWNo
aW5lLmNwcCBiL0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCmluZGV4IDE3NTU3MzEuLjlk
Mjc3MTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCkBAIC0xMTA3LDEyICsxMTA3LDE1IEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3BlKEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsCiAKIHN0YXRpYyBTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZVByb3Rv
dHlwZUNoYWluKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEKQogewot
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjaGFpbiA9IFN0cnVjdHVyZUlEQ2hhaW46OmNy
ZWF0ZShzdGF0aWNfY2FzdDxKU09iamVjdCo+KHN0cnVjdHVyZUlELT5wcm90b3R5cGVGb3JMb29r
dXAoZXhlYykpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpOworICAgIGlmIChKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUocHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPFN0
cnVjdHVyZUlEQ2hhaW4+IGNoYWluID0gU3RydWN0dXJlSURDaGFpbjo6Y3JlYXRlKHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKS0+c3RydWN0dXJlSUQoKSk7CiAgICAgc3RydWN0dXJl
SUQtPnNldENhY2hlZFByb3RvdHlwZUNoYWluKGNoYWluLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJu
IHN0cnVjdHVyZUlELT5jYWNoZWRQcm90b3R5cGVDaGFpbigpOwogfQogCi1ORVZFUl9JTkxJTkUg
dm9pZCBNYWNoaW5lOjp0cnlDYWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3Ry
dWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90KQorTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUq
IGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFJlY3Vy
c2l2ZSBpbnZvY2F0aW9uIG1heSBhbHJlYWR5IGhhdmUgc3BlY2lhbGl6ZWQgdGhpcyBpbnN0cnVj
dGlvbi4KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlICE9IGdldE9wY29kZShvcF9wdXRfYnlfaWQp
KQpAQCAtMTEyNiwxMiArMTEyOSw2IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNh
Y2hlUHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQCiAgICAgICAg
IHZQQ1swXSA9IGdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2FjaGUgbmV3IHByb3BlcnR5IHRyYW5zaXRpb25z
LCB0b28uCi0gICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpIHsKLSAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICAKICAgICBKU0NlbGwqIGJhc2VDZWxsID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oYmFzZVZhbHVlKTsKICAgICBTdHJ1Y3R1cmVJRCogc3RydWN0dXJl
SUQgPSBiYXNlQ2VsbC0+c3RydWN0dXJlSUQoKTsKQEAgLTExNjIsNiArMTE1OSwyNyBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDYWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEluc3RydWN0aW9uKiB2UAogICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5
X2lkX2dlbmVyaWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gU3RydWN0dXJl
SUQgdHJhbnNpdGlvbiwgY2FjaGUgdHJhbnNpdGlvbiBpbmZvCisgICAgaWYgKHNsb3QudHlwZSgp
ID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgdlBDWzBdID0gZ2V0
T3Bjb2RlKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKTsKKyAgICAgICAgdlBDWzRdID0gc3RydWN0
dXJlSUQtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgdlBDWzVdID0gc3RydWN0dXJlSUQ7CisgICAg
ICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlw
ZUNoYWluKCk7CisgICAgICAgIGlmICghY2hhaW4pIHsKKyAgICAgICAgICAgIGNoYWluID0gY2Fj
aGVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBpZiAoIWNo
YWluKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHNvbWVvbmUgaGFzIG1h
bnVhbGx5IGluc2VydGVkIG51bGwgaW50byB0aGUgcHJvdG90eXBlIGNoYWluCisgICAgICAgICAg
ICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdlBDWzZd
ID0gY2hhaW47CisgICAgICAgIHZQQ1s3XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
IGNvZGVCbG9jay0+cmVmU3RydWN0dXJlSURzKHZQQyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3JlcGxhY2UpOwogICAgIHZQ
Q1s1XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgY29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJ
RHModlBDKTsKQEAgLTEyODIsNiArMTMwMCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6
OnRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrCiAg
ICAgU3RydWN0dXJlSURDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmVJRC0+Y2FjaGVkUHJvdG90eXBl
Q2hhaW4oKTsKICAgICBpZiAoIWNoYWluKQogICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBl
Q2hhaW4oZXhlYywgc3RydWN0dXJlSUQpOworICAgIEFTU0VSVChjaGFpbik7CiAKICAgICB2UENb
MF0gPSBnZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2NoYWluKTsKICAgICB2UENbNF0gPSBzdHJ1Y3R1
cmVJRDsKQEAgLTI0MDQsNyArMjQyMyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpCiAgICAg
ICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0X2J5X2lkKSB7
Ci0gICAgICAgIC8qIHB1dF9ieV9pZCBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1ZShyKSBub3Ao
bikgbm9wKG4pCisgICAgICAgIC8qIHB1dF9ieV9pZCBiYXNlKHIpIHByb3BlcnR5KGlkKSB2YWx1
ZShyKSBub3Aobikgbm9wKG4pIG5vcChuKSBub3AobikKIAogICAgICAgICAgICBHZW5lcmljIHBy
b3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllcgogICAg
ICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2UsIHRvIHJlZ2lzdGVy
IHZhbHVlLgpAQCAtMjQyNCwxMyArMjQ0Myw2NiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXJGaQog
ICAgICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0uanNWYWx1ZShleGVj
KSwgc2xvdCk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHRyeUNh
Y2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQywgYmFzZVZhbHVlLCBzbG90KTsKKyAgICAgICAgdHJ5
Q2FjaGVQdXRCeUlEKGV4ZWMsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFsdWUsIHNsb3QpOworCisg
ICAgICAgIHZQQyArPSA4OworICAgICAgICBORVhUX09QQ09ERTsKKyAgICB9CisgICAgQkVHSU5f
T1BDT0RFKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKSB7CisgICAgICAgIC8qIG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uIGJhc2UocikgcHJvcGVydHkoaWQpIHZhbHVlKHIpIG9sZFN0cnVjdHVyZUlE
KHNJRCkgbmV3U3RydWN0dXJlSUQoc0lEKSBzdHJ1Y3R1cmVJRENoYWluKHNJRGMpIG9mZnNldChu
KQorICAgICAgICAgCisgICAgICAgICAgIENhY2hlZCBwcm9wZXJ0eSBhY2Nlc3M6IEF0dGVtcHRz
IHRvIHNldCBhIG5ldyBwcm9wZXJ0eSB3aXRoIGEgY2FjaGVkIHRyYW5zaXRpb24KKyAgICAgICAg
ICAgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRpZmllciBwcm9wZXJ0eSwgYmVsb25naW5nIHRvIHJl
Z2lzdGVyIGJhc2UsCisgICAgICAgICAgIHRvIHJlZ2lzdGVyIHZhbHVlLiBJZiB0aGUgY2FjaGUg
bWlzc2VzLCBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbgorICAgICAgICAgICByZXZlcnRzIHRvIG9w
X3B1dF9ieV9pZF9nZW5lcmljLgorICAgICAgICAgCisgICAgICAgICAgIFVubGlrZSBtYW55IG9w
Y29kZXMsIHRoaXMgb25lIGRvZXMgbm90IHdyaXRlIGFueSBvdXRwdXQgdG8KKyAgICAgICAgICAg
dGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgICAqLworICAgICAgICBpbnQgYmFzZSA9IHZQQ1sx
XS51Lm9wZXJhbmQ7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFzZV0uanNWYWx1
ZShleGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZShiYXNlVmFsdWUpKSkgeworICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0
YXRpY19jYXN0PEpTQ2VsbCo+KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVJRCog
b2xkU3RydWN0dXJlSUQgPSB2UENbNF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgIFN0cnVj
dHVyZUlEKiBuZXdTdHJ1Y3R1cmVJRCA9IHZQQ1s1XS51LnN0cnVjdHVyZUlEOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpID09IG9s
ZFN0cnVjdHVyZUlEKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlQ2VsbC0+aXNPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KGJhc2VDZWxsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+KiBpdCA9IHZQQ1s2XS51LnN0
cnVjdHVyZUlEQ2hhaW4tPmhlYWQoKTsKKworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKS0+cHJv
dG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIXByb3RvLT5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkocHJvdG8tPnN0cnVj
dHVyZUlEKCkgIT0gKCppdCkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmNh
Y2hlUHV0QnlJRChjb2RlQmxvY2ssIHZQQyk7CisgICAgICAgICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK2l0
OworICAgICAgICAgICAgICAgICAgICBwcm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJv
dG8tPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+dHJhbnNpdGlvblRvKG5ld1N0
cnVjdHVyZUlEKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQtPnByb3BlcnR5
TWFwKCkuc3RvcmFnZVNpemUoKSA9PSBKU09iamVjdDo6aW5saW5lU3RvcmFnZUNhcGFjaXR5KQor
ICAgICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5hbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShv
bGRTdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5zdG9yYWdlU2l6ZSgpLCBvbGRTdHJ1Y3R1cmVJ
RC0+cHJvcGVydHlNYXAoKS5zaXplKCkpOworCisgICAgICAgICAgICAgICAgaW50IHZhbHVlID0g
dlBDWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2UENb
N10udS5vcGVyYW5kOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRG
b3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihjb2RlQmxvY2stPmlkZW50
aWZpZXJzW3ZQQ1syXS51Lm9wZXJhbmRdKSkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBi
YXNlT2JqZWN0LT5wdXREaXJlY3RPZmZzZXQob2Zmc2V0LCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMp
KTsKIAotICAgICAgICB2UEMgKz0gNjsKKyAgICAgICAgICAgICAgICB2UEMgKz0gODsKKyAgICAg
ICAgICAgICAgICBORVhUX09QQ09ERTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY29kZUJsb2NrLCB2UEMpOwogICAgICAgICBORVhU
X09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX3B1dF9ieV9pZF9yZXBsYWNlKSB7
Ci0gICAgICAgIC8qIG9wX3B1dF9ieV9pZF9yZXBsYWNlIGJhc2UocikgcHJvcGVydHkoaWQpIHZh
bHVlKHIpIHN0cnVjdHVyZUlEKHNJRCkgb2Zmc2V0KG4pCisgICAgICAgIC8qIG9wX3B1dF9ieV9p
ZF9yZXBsYWNlIGJhc2UocikgcHJvcGVydHkoaWQpIHZhbHVlKHIpIHN0cnVjdHVyZUlEKHNJRCkg
b2Zmc2V0KG4pIG5vcChuKSBub3AobikKIAogICAgICAgICAgICBDYWNoZWQgcHJvcGVydHkgYWNj
ZXNzOiBBdHRlbXB0cyB0byBzZXQgYSBwcmUtZXhpc3RpbmcsIGNhY2hlZAogICAgICAgICAgICBw
cm9wZXJ0eSBuYW1lZCBieSBpZGVudGlmaWVyIHByb3BlcnR5LCBiZWxvbmdpbmcgdG8gcmVnaXN0
ZXIgYmFzZSwKQEAgLTI0NTYsNyArMjUyOCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpCiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxvY2F0aW9uKGJhc2VP
YmplY3QtPmdldERpcmVjdExvY2F0aW9uKGNvZGVCbG9jay0+aWRlbnRpZmllcnNbdlBDWzJdLnUu
b3BlcmFuZF0pKSA9PSBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERp
cmVjdE9mZnNldChvZmZzZXQsIHJbdmFsdWVdLmpzVmFsdWUoZXhlYykpOwogCi0gICAgICAgICAg
ICAgICAgdlBDICs9IDY7CisgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0NjUsNyArMjUz
Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxh
ZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpCiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAg
IH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0X2J5X2lkX2dlbmVyaWMpIHsKLSAgICAgICAgLyog
b3BfcHV0X2J5X2lkX2dlbmVyaWMgYmFzZShyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikgbm9wKG4p
IG5vcChuKQorICAgICAgICAvKiBvcF9wdXRfYnlfaWRfZ2VuZXJpYyBiYXNlKHIpIHByb3BlcnR5
KGlkKSB2YWx1ZShyKSBub3Aobikgbm9wKG4pIG5vcChuKSBub3AobikKIAogICAgICAgICAgICBH
ZW5lcmljIHByb3BlcnR5IGFjY2VzczogU2V0cyB0aGUgcHJvcGVydHkgbmFtZWQgYnkgaWRlbnRp
ZmllcgogICAgICAgICAgICBwcm9wZXJ0eSwgYmVsb25naW5nIHRvIHJlZ2lzdGVyIGJhc2UsIHRv
IHJlZ2lzdGVyIHZhbHVlLgpAQCAtMjQ4NCw3ICsyNTU2LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lz
dGVyRmkKICAgICAgICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgaWRlbnQsIHJbdmFsdWVdLmpzVmFs
dWUoZXhlYyksIHNsb3QpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAg
ICB2UEMgKz0gNjsKKyAgICAgICAgdlBDICs9IDg7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAg
IH0KICAgICBCRUdJTl9PUENPREUob3BfZGVsX2J5X2lkKSB7CkBAIC0zNTU2LDEyICszNjI4LDYg
QEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVQdXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmwKICAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgKHZvaWQqKWN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2FjaGUgbmV3IHByb3Bl
cnR5IHRyYW5zaXRpb25zLCB0b28uCi0gICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJl
c3MocmV0dXJuQWRkcmVzcywgKHZvaWQqKWN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAgICAgCiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGJhc2VWYWx1ZSk7CiAgICAgU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEID0g
YmFzZUNlbGwtPnN0cnVjdHVyZUlEKCk7CkBAIC0zNTg0LDYgKzM2NTAsMjggQEAgTkVWRVJfSU5M
SU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmwKICAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgKHZvaWQqKWN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmVJRCB0cmFuc2l0aW9uLCBjYWNoZSB0cmFu
c2l0aW9uIGluZm8KKyAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQ
cm9wZXJ0eSkgeworICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5z
aXRpb24pOworICAgICAgICB2UENbNF0gPSBzdHJ1Y3R1cmVJRC0+cHJldmlvdXNJRCgpOworICAg
ICAgICB2UENbNV0gPSBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgU3RydWN0dXJlSURDaGFpbiogY2hh
aW4gPSBzdHJ1Y3R1cmVJRC0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKKyAgICAgICAgaWYgKCFj
aGFpbikgeworICAgICAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0
cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIGlmICghY2hhaW4pIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGhhcHBlbnMgaWYgc29tZW9uZSBoYXMgbWFudWFsbHkgaW5zZXJ0ZWQgbnVsbCBpbnRv
IHRoZSBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAgICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUo
b3BfcHV0X2J5X2lkX2dlbmVyaWMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2UENbNl0gPSBjaGFpbjsKKyAgICAgICAgdlBDWzdd
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgY29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJ
RHModlBDKTsKKyAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRk
cmVzcywgQ1RJOjpjb21waWxlUHV0QnlJZFRyYW5zaXRpb24odGhpcywgZXhlYywgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmVJRC0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmVJRCwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgY2hhaW4pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICB2UENbMF0g
PSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX3JlcGxhY2UpOwogICAgIHZQQ1s0XSA9IHN0cnVjdHVy
ZUlEOwogICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CkBAIC0zNzEzLDYgKzM4MDEs
NyBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbAogICAgIGlmICghY2hhaW4pCiAgICAgICAgIGNo
YWluID0gY2FjaGVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmVJRCk7CiAKKyAgICBBU1NF
UlQoY2hhaW4pOwogICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRfY2hhaW4pOwog
ICAgIHZQQ1s0XSA9IHN0cnVjdHVyZUlEOwogICAgIHZQQ1s1XSA9IGNoYWluOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oIGIvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5oCmluZGV4IDA3NWE5ODguLjRhM2RhN2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZN
L01hY2hpbmUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKQEAgLTI1NCw3ICsy
NTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUq
IGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNhY2hlR2V0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVj
dGlvbiogdlBDKTsKLSAgICAgICAgdm9pZCB0cnlDYWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiwgSW5z
dHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgdm9pZCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxv
Y2sqLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICB2b2lkIHVuY2FjaGVQdXRCeUlEKENvZGVCbG9jayosIEluc3Ry
dWN0aW9uKiB2UEMpOwogCiAjaWYgRU5BQkxFKENUSSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL1ZNL09wY29kZS5oIGIvSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKaW5kZXggNzcyNzMz
Yy4uZDhjNmVkZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKQEAgLTk3LDYgKzk3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIG1hY3JvKG9wX2dldF9hcnJheV9sZW5ndGgpIFwKICAgICAgICAgbWFjcm8o
b3BfZ2V0X3N0cmluZ19sZW5ndGgpIFwKICAgICAgICAgbWFjcm8ob3BfcHV0X2J5X2lkKSBcCisg
ICAgICAgIG1hY3JvKG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uKSBcCiAgICAgICAgIG1hY3JvKG9w
X3B1dF9ieV9pZF9yZXBsYWNlKSBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF9ieV9pZF9nZW5lcmlj
KSBcCiAgICAgICAgIG1hY3JvKG9wX2RlbF9ieV9pZCkgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUva2pzL0pTT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuaAppbmRl
eCAwMDNmZGRjLi5kYjQ5ODQxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvSlNPYmpl
Y3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuaApAQCAtMTUwLDYgKzE1MCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnR5U3RvcmFn
ZVtvZmZzZXRdOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCB0cmFuc2l0aW9uVG8oU3RydWN0
dXJlSUQqKTsKKwogICAgICAgICB2b2lkIHJlbW92ZURpcmVjdChjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBib29sIGhhc0N1c3RvbVByb3BlcnRpZXMoKSB7IHJldHVy
biAhbV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAoKS5pc0VtcHR5KCk7IH0KICAgICAgICAgYm9v
bCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRC0+cHJv
cGVydHlNYXAoKS5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0KQEAgLTE3OCw2ICsxODAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICBib29sIHVzaW5nSW5s
aW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlTdG9yYWdlID09IG1faW5saW5l
U3RvcmFnZTsgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5saW5lU3RvcmFnZUNh
cGFjaXR5ID0gMjsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RGb3JXcml0ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKIApAQCAtMTg1LDggKzE4OSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAg
ICBTdHJ1Y3R1cmVJRCogY3JlYXRlSW5oZXJpdG9ySUQoKTsKIAotICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGlubGluZVN0b3JhZ2VDYXBhY2l0eSA9IDI7Ci0KICAgICAgICAgUmVmUHRyPFN0
cnVjdHVyZUlEPiBtX2luaGVyaXRvcklEOwogCiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBtX3By
b3BlcnR5U3RvcmFnZTsgICAgICAgIApAQCAtMzg5LDIzICszOTEsMzAgQEAgaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqIHZhbHVlLAogICAgICAgICAgcmV0dXJuOwogICAgICB9CiAKLSAgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7Ci0gICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVjdHVyZUlELT5wcm9w
ZXJ0eU1hcCgpLmdldE9mZnNldChwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKLSAg
ICAgaWYgKG9mZnNldCAhPSBXVEY6Om5vdEZvdW5kKSB7Ci0gICAgICAgICBpZiAoY2hlY2tSZWFk
T25seSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF0gPSB2YWx1ZTsKLSAgICAgICAg
IHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICAgcmV0dXJu
OwotICAgICB9CisgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgc2l6ZV90IG9m
ZnNldCA9IG1fc3RydWN0dXJlSUQtPnByb3BlcnR5TWFwKCkuZ2V0T2Zmc2V0KHByb3BlcnR5TmFt
ZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgIGlmIChvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCkg
eworICAgICAgICBpZiAoY2hlY2tSZWFkT25seSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRP
bmx5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Byb3BlcnR5U3RvcmFnZVtvZmZz
ZXRdID0gdmFsdWU7CisgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgIGlmIChtX3N0cnVjdHVyZUlELT5w
cm9wZXJ0eU1hcCgpLnN0b3JhZ2VTaXplKCkgPT0gaW5saW5lU3RvcmFnZUNhcGFjaXR5KQogICAg
ICAgICAgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UobV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlNYXAo
KS5zdG9yYWdlU2l6ZSgpLCBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnNpemUoKSk7CiAK
ICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb24obV9zdHJ1Y3R1cmVJRCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0
cmlidXRlcywgdGhpcywgc2xvdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpOworICAgICBzbG90LnNldFdh
c1RyYW5zaXRpb24odHJ1ZSk7CiAgICAgIHNldFN0cnVjdHVyZUlEKHN0cnVjdHVyZUlELnJlbGVh
c2UoKSk7CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojp0cmFuc2l0aW9uVG8oU3RydWN0dXJl
SUQqIG5ld1N0cnVjdHVyZUlEKQoreworICAgIFN0cnVjdHVyZUlEOjp0cmFuc2l0aW9uVG8obV9z
dHJ1Y3R1cmVJRCwgbmV3U3RydWN0dXJlSUQsIHRoaXMpOworICAgIHNldFN0cnVjdHVyZUlEKG5l
d1N0cnVjdHVyZUlEKTsKK30KKwogaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0Ojp0b1ByaW1pdGl2
ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlwZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlKGV4ZWMsIHByZWZlcnJlZFR5cGUpOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL1B1dFByb3BlcnR5U2xvdC5oIGIvSmF2YVNj
cmlwdENvcmUva2pzL1B1dFByb3BlcnR5U2xvdC5oCmluZGV4IGZlYTZkOTkuLjFlMmRmZTkgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9QdXRQcm9wZXJ0eVNsb3QuaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ranMvUHV0UHJvcGVydHlTbG90LmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCgpCiAgICAgICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQogICAgICAgICAgICAgLCBtX2Jhc2UoMCkKKyAgICAgICAgICAgICwgbV93YXNU
cmFuc2l0aW9uKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjUsMTAgKzY2LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGlzQ2FjaGVhYmxlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgICAgICB9Ci0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgd2FzVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzVHJhbnNpdGlvbjsg
fQorICAgICAgICB2b2lkIHNldFdhc1RyYW5zaXRpb24oYm9vbCB3YXNUcmFuc2l0aW9uKSB7IG1f
d2FzVHJhbnNpdGlvbiA9IHdhc1RyYW5zaXRpb247IH0KICAgICBwcml2YXRlOgogICAgICAgICBU
eXBlIG1fdHlwZTsKICAgICAgICAgSlNPYmplY3QqIG1fYmFzZTsKKyAgICAgICAgYm9vbCBtX3dh
c1RyYW5zaXRpb247CiAgICAgICAgIHNpemVfdCBtX29mZnNldDsKICAgICB9OwogCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvU3RydWN0dXJlSUQuY3BwIGIvSmF2YVNjcmlwdENvcmUv
a2pzL1N0cnVjdHVyZUlELmNwcAppbmRleCBmYmY3ZGFhLi4wZjM1Mzc5IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ranMvU3RydWN0dXJlSUQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tq
cy9TdHJ1Y3R1cmVJRC5jcHAKQEAgLTQ3LDYgKzQ3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IEFTU0VSVChtX3Byb3RvdHlwZS0+aXNPYmplY3QoKSB8fCBtX3Byb3RvdHlwZS0+aXNOdWxsKCkp
OwogfQogCit2b2lkIFN0cnVjdHVyZUlEOjp0cmFuc2l0aW9uVG8oU3RydWN0dXJlSUQqIG9sZFN0
cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3U3RydWN0dXJlSUQsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKK3sKKyAgICBpZiAoIXNsb3RCYXNlLT51c2luZ0lubGluZVN0b3JhZ2UoKSAmJiBvbGRTdHJ1
Y3R1cmVJRC0+bV9wcm9wZXJ0eU1hcC5zaXplKCkgIT0gbmV3U3RydWN0dXJlSUQtPm1fcHJvcGVy
dHlNYXAuc2l6ZSgpKQorICAgICAgICBzbG90QmFzZS0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
b2xkU3RydWN0dXJlSUQtPm1fcHJvcGVydHlNYXAuc2l6ZSgpLCBuZXdTdHJ1Y3R1cmVJRC0+bV9w
cm9wZXJ0eU1hcC5zaXplKCkpOworfQorCiBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1
cmVJRDo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgSlNPYmplY3QqIHNsb3RCYXNlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3Bl
cnR5U3RvcmFnZSYgcHJvcGVydHlTdG9yYWdlKQogewogICAgIEFTU0VSVCghc3RydWN0dXJlSUQt
Pm1faXNEaWN0aW9uYXJ5KTsKQEAgLTEzOSw3ICsxNDUsNyBAQCBTdHJ1Y3R1cmVJRENoYWluOjpT
dHJ1Y3R1cmVJRENoYWluKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCkKICAgICAgICAgdG1wID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4odG1wLT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVyZUlE
KCk7CiAgICAgfQogICAgIAotICAgIG1fdmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZUlE
PltzaXplXSk7CisgICAgbV92ZWN0b3Iuc2V0KG5ldyBSZWZQdHI8U3RydWN0dXJlSUQ+W3NpemUg
KyAxXSk7CiAKICAgICBzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAtIDE7ICsr
aSkgewpAQCAtMTQ3LDYgKzE1Myw3IEBAIFN0cnVjdHVyZUlEQ2hhaW46OlN0cnVjdHVyZUlEQ2hh
aW4oU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEKQogICAgICAgICBzdHJ1Y3R1cmVJRCA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4oc3RydWN0dXJlSUQtPnN0b3JlZFByb3RvdHlwZSgpKS0+c3RydWN0
dXJlSUQoKTsKICAgICB9CiAgICAgbV92ZWN0b3JbaV0gPSBzdHJ1Y3R1cmVJRDsKKyAgICBtX3Zl
Y3RvcltpICsgMV0gPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2tqcy9TdHJ1Y3R1cmVJRC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL1N0cnVj
dHVyZUlELmgKaW5kZXggNzYzN2ZhOS4uMzQ2YWE3ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUva2pzL1N0cnVjdHVyZUlELmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL1N0cnVjdHVyZUlE
LmgKQEAgLTcyLDYgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTdHJ1Y3R1
cmVJRCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cnVjdHVyZUlEPiB7CiAgICAgcHVibGljOgorICAg
ICAgICBmcmllbmQgY2xhc3MgQ1RJOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmVJRD4gY3JlYXRlKEpTVmFsdWUqIHByb3RvdHlwZSwgSlNUeXBlIHR5cGUgPSBPYmplY3RUeXBl
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cnVjdHVyZUlE
KHByb3RvdHlwZSwgdHlwZSkpOwpAQCAtOTcsMTMgKzk4LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIEpTVmFsdWUqIHN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dG90eXBlOyB9CiAgICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUq
KTsgCi0gICAgICAgIAorCisgICAgICAgIFN0cnVjdHVyZUlEKiBwcmV2aW91c0lEKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsgfQorCiAgICAgICAgIHZvaWQgc2V0Q2FjaGVkUHJv
dG90eXBlQ2hhaW4oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjYWNoZWRQcm90b3R5cGVD
aGFpbikgeyBtX2NhY2hlZFByb3RvdHlwZUNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW47IH0K
ICAgICAgICAgU3RydWN0dXJlSURDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOyB9CiAKICAgICAgICAgY29uc3Qg
UHJvcGVydHlNYXAmIHByb3BlcnR5TWFwKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU1hcDsg
fQogICAgICAgICBQcm9wZXJ0eU1hcCYgcHJvcGVydHlNYXAoKSB7IHJldHVybiBtX3Byb3BlcnR5
TWFwOyB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNpdGlvblRvKFN0cnVjdHVyZUlEKiBv
bGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBKU09iamVjdCogc2xv
dEJhc2UpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRy
PFVTdHJpbmc6OlJlcD4sIHVuc2lnbmVkPiBUcmFuc2l0aW9uVGFibGVLZXk7CiAgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxUcmFuc2l0aW9uVGFibGVLZXksIFN0cnVjdHVyZUlEKiwgVHJhbnNpdGlv
blRhYmxlSGFzaCwgVHJhbnNpdGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvbWFzbS9YODZBc3NlbWJsZXIuaCBiL0phdmFTY3Jp
cHRDb3JlL21hc20vWDg2QXNzZW1ibGVyLmgKaW5kZXggYmRhMDU1Yy4uYTBmODBlMCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvbWFzbS9YODZBc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9tYXNtL1g4NkFzc2VtYmxlci5oCkBAIC0yOTEsNiArMjkxLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9idWZmZXItPnB1dEJ5dGUoaW1tKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZGxfaTht
KGludCBpbW0sIHZvaWQqIGFkZHIpCisgICAgeworICAgICAgICBtX2J1ZmZlci0+cHV0Qnl0ZShP
UF9HUk9VUDFfRXZJYik7CisgICAgICAgIGVtaXRNb2RSbV9vcG0oR1JPVVAxX09QX0FERCwgYWRk
cik7CisgICAgICAgIG1fYnVmZmVyLT5wdXRCeXRlKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBh
ZGRsX2kzMnIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2J1ZmZl
ci0+cHV0Qnl0ZShPUF9HUk9VUDFfRXZJeik7CkBAIC0zOTYsNiArNDAzLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgZW1pdE1vZFJtX29wcihHUk9VUDFfT1BfU1VCLCBkc3QpOwogICAgICAgICBtX2J1
ZmZlci0+cHV0Qnl0ZShpbW0pOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YmxfaThtKGludCBp
bW0sIHZvaWQqIGFkZHIpCisgICAgeworICAgICAgICBtX2J1ZmZlci0+cHV0Qnl0ZShPUF9HUk9V
UDFfRXZJYik7CisgICAgICAgIGVtaXRNb2RSbV9vcG0oR1JPVVAxX09QX1NVQiwgYWRkcik7Cisg
ICAgICAgIG1fYnVmZmVyLT5wdXRCeXRlKGltbSk7CisgICAgfQogCiAgICAgdm9pZCBzdWJsX2kz
MnIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewo=
</data>
<flag name="review"
          id="10440"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>