<?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>201762</bug_id>
          
          <creation_ts>2019-09-13 08:26:57 -0700</creation_ts>
          <short_desc>We should assert $vm is enabled on entry and exit in its functions.</short_desc>
          <delta_ts>2019-09-13 10:54:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1570584</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-13 08:26:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/55338742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570586</commentid>
    <comment_count>1</comment_count>
      <attachid>378730</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-13 08:33:03 -0700</bug_when>
    <thetext>Created attachment 378730
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570590</commentid>
    <comment_count>2</comment_count>
      <attachid>378730</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-09-13 08:45:30 -0700</bug_when>
    <thetext>Comment on attachment 378730
proposed patch.

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570631</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-13 10:54:45 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r249841: &lt;http://trac.webkit.org/r249841&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378730</attachid>
            <date>2019-09-13 08:33:03 -0700</date>
            <delta_ts>2019-09-13 08:45:30 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-201762.patch</filename>
            <type>text/plain</type>
            <size>80634</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5ODMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBA
QAorMjAxOS0wOS0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
V2Ugc2hvdWxkIGFzc2VydCAkdm0gaXMgZW5hYmxlZCBvbiBlbnRyeSBhbmQgZXhpdCBpbiBpdHMg
ZnVuY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAxNzYyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTMzODc0Mj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBBbHNvIGRvIHRoZSBzYW1l
IGZvciBGdW5jdGlvbk92ZXJyaWRlcy4KKyAgICAgICAgMi4gQWRkZWQgdGhlIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYW5kIEZ1bmN0aW9uT3ZlcnJpZGVzQXNzZXJ0U2NvcGUgdG8gYWNoaWV2ZSB0aGlz
LgorICAgICAgICAzLiBBbHNvIGFkZGVkIGFzc2VydGlvbnMgdG8gbGFtYmRhIGZ1bmN0aW9ucyBp
biAkdm0uCisKKyAgICAgICAgKiB0b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHA6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uT3ZlcnJpZGVzQXNzZXJ0U2NvcGU6OkZ1bmN0aW9uT3ZlcnJpZGVzQXNz
ZXJ0U2NvcGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk92ZXJyaWRlc0Fzc2VydFNjb3BlOjp+
RnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29wZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uT3Zl
cnJpZGVzOjpvdmVycmlkZXMpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk92ZXJyaWRlczo6RnVu
Y3Rpb25PdmVycmlkZXMpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk92ZXJyaWRlczo6cmVpbnN0
YWxsT3ZlcnJpZGVzKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZU92ZXJyaWRlSW5mbyk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uT3ZlcnJpZGVzOjppbml0aWFsaXplT3ZlcnJpZGVGb3IpOgor
ICAgICAgICAoSlNDOjpwYXJzZUNsYXVzZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uT3ZlcnJp
ZGVzOjpwYXJzZU92ZXJyaWRlc0luRmlsZSk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5j
cHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1DYWxsRnJhbWU6OkpTRG9sbGFyVk1DYWxsRnJh
bWUpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNQ2FsbEZyYW1lOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNQ2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU0RvbGxhclZNQ2FsbEZyYW1lOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTRG9sbGFyVk1DYWxsRnJhbWU6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RWxlbWVu
dDo6RWxlbWVudCk6CisgICAgICAgIChKU0M6OkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkVsZW1lbnQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpFbGVtZW50OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpSb290OjpSb290KToKKyAgICAgICAgKEpTQzo6
Um9vdDo6c2V0RWxlbWVudCk6CisgICAgICAgIChKU0M6OlJvb3Q6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlJvb3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlJvb3Q6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTaW1wbGVPYmplY3Q6OlNpbXBsZU9iamVjdCk6Cisg
ICAgICAgIChKU0M6OlNpbXBsZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U2ltcGxl
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2ltcGxlT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbXB1cmVHZXR0ZXI6OkltcHVyZUdldHRlcik6
CisgICAgICAgIChKU0M6OkltcHVyZUdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6SW1wdXJlR2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbXB1cmVHZXR0ZXI6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW1wdXJlR2V0dGVyOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpJbXB1cmVHZXR0ZXI6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OkN1c3RvbUdldHRlcik6CisgICAgICAgIChKU0M6
OkN1c3RvbUdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0
dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlcjo6Y3VzdG9tR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXJBY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6UnVudGltZUFycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmRl
c3Ryb3kpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAg
KEpTQzo6UnVudGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpSdW50
aW1lQXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpS
dW50aW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6
CisgICAgICAgIChKU0M6OkRPTUpJVE5vZGU6OkRPTUpJVE5vZGUpOgorICAgICAgICAoSlNDOjpE
T01KSVROb2RlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpET01KSVROb2RlOjpj
aGVja1N1YkNsYXNzU25pcHBldCk6CisgICAgICAgIChKU0M6OkRPTUpJVE5vZGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6RE9NSklUR2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6RE9NSklUR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpET01KSVRH
ZXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6RE9NSklUQXR0cmli
dXRlOjpzbG93Q2FsbCk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6RE9NSklUQXR0cmli
dXRlOjpjYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyOjpjdXN0b21H
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQ29tcGxleDo6RE9NSklUR2V0dGVyQ29tcGxleCk6Cisg
ICAgICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBsZXg6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBsZXg6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkRP
TUpJVEdldHRlckNvbXBsZXg6OkRPTUpJVEF0dHJpYnV0ZTo6c2xvd0NhbGwpOgorICAgICAgICAo
SlNDOjpET01KSVRHZXR0ZXJDb21wbGV4OjpET01KSVRBdHRyaWJ1dGU6OmNhbGxET01HZXR0ZXIp
OgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJDb21wbGV4OjpmdW5jdGlvbkVuYWJsZUV4Y2Vw
dGlvbik6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBsZXg6OmN1c3RvbUdldHRlcik6
CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBsZXg6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OkRPTUpJVEZ1bmN0aW9uT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkRPTUpJVEZ1bmN0aW9uT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpET01KSVRGdW5jdGlvbk9iamVjdDo6ZnVuY3Rpb25XaXRoVHlwZUNoZWNrKToKKyAgICAgICAg
KEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRPTUpJVEZ1bmN0aW9uT2JqZWN0OjpjaGVja1N1YkNsYXNzU25pcHBldCk6
CisgICAgICAgIChKU0M6OkRPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OkRPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QpOgorICAgICAgICAoSlNDOjpET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0Ojpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpmdW5jdGlv
bldpdGhUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0
OjpmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpET01KSVRDaGVja1N1
YkNsYXNzT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRl
ckJhc2VKU09iamVjdDo6RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkRPTUpJ
VEdldHRlckJhc2VKU09iamVjdDo6RE9NSklUQXR0cmlidXRlOjpzbG93Q2FsbCk6CisgICAgICAg
IChKU0M6OkRPTUpJVEdldHRlckJhc2VKU09iamVjdDo6RE9NSklUQXR0cmlidXRlOjpjYWxsRE9N
R2V0dGVyKToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpjdXN0b21H
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpKU1Rlc3RD
dXN0b21HZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y3VzdG9tU2V0QWNjZXNzb3IpOgorICAgICAg
ICAoSlNDOjpjdXN0b21TZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTVGVzdEN1c3RvbUdldHRl
clNldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFbGVtZW50OjpoYW5kbGVP
d25lcik6CisgICAgICAgIChKU0M6OkVsZW1lbnQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChKU0M6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25XYXNt
U3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbldhc21TdHJl
YW1pbmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3Jhc2gpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkRG
R1RydWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkZUTFRydWUpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvbkNwdU1mZW5jZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3B1UmR0c2MpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkNwdUNwdWlkKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcHVQ
YXVzZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3B1Q2xmbHVzaCk6CisgICAgICAgIChKU0M6
OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3I6OkNhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IpOgor
ICAgICAgICAoSlNDOjpnZXRFeGVjdXRhYmxlRm9yRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpm
dW5jdGlvbkxMaW50VHJ1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uSklUVHJ1ZSk6CisgICAg
ICAgIChKU0M6OmZ1bmN0aW9uTm9JbmxpbmUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdDKToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25FZGVuR0MpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkR1
bXBTdWJzcGFjZUhhc2hlcyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ2FsbEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OmNv
ZGVCbG9ja0Zyb21BcmcpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0Zvcik6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uRHVtcFNvdXJjZUZvcik6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uRHVtcEJ5dGVjb2RlRm9yKToKKyAgICAgICAgKEpTQzo6ZG9QcmludCk6CisgICAgICAgIChK
U0M6OmZ1bmN0aW9uRGF0YUxvZyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnQpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkR1bXBDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlv
bkR1bXBTdGFjayk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uRHVtcFJlZ2lzdGVycyk6CisgICAg
ICAgIChKU0M6OmZ1bmN0aW9uRHVtcENlbGwpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uSW5saW5lQ2FwYWNpdHkpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvblZhbHVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HZXRQSUQpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvbkhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uSXNIYXZpbmdBQmFkVGltZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlR2xvYmFs
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAgIChK
U0M6OmZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25D
cmVhdGVOdWxsUm9wZVN0cmluZyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlSW1wdXJl
R2V0dGVyKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVDdXN0b21HZXR0ZXJPYmplY3Qp
OgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlck9iamVjdCk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQ29tcGxleE9iamVjdCk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdCk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNyZWF0ZUJ1aWx0
aW4pOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uQ3JlYXRlUm9vdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRl
RWxlbWVudCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0RWxlbWVudCk6CisgICAgICAgIChK
U0M6OmZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25H
ZXRIaWRkZW5WYWx1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblNoYWRvd0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RU
aHJvdyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25SZXR1cm5UeXBlRm9yKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rp
b25GbGF0dGVuRGljdGlvbmFyeU9iamVjdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uRHVtcEJh
c2ljQmxvY2tFeGVjdXRpb25SYW5nZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkhhc0Jhc2lj
QmxvY2tFeGVjdXRlZCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlv
bkNvdW50KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KToKKyAg
ICAgICAgKEpTQzo6Y2hhbmdlRGVidWdnZXJNb2RlV2hlbklkbGUpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvbkVuYWJsZURlYnVnZ2VyTW9kZVdoZW5JZGxlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rp
b25EaXNhYmxlRGVidWdnZXJNb2RlV2hlbklkbGUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkRl
bGV0ZUFsbENvZGVXaGVuSWRsZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2xvYmFsT2JqZWN0
Q291bnQpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdsb2JhbE9iamVjdEZvck9iamVjdCk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25Mb2FkR2V0dGVyRnJvbUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
Q3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uRGVs
dGFCZXR3ZWVuQnV0dGVyZmxpZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblRvdGFsR0NUaW1l
KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25QYXJzZUNvdW50KToKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25Jc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZEZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiB0b29scy9KU0RvbGxhclZNLmg6CisgICAgICAgIChKU0M6OkRvbGxhclZNQXNzZXJ0U2NvcGU6
OkRvbGxhclZNQXNzZXJ0U2NvcGUpOgorICAgICAgICAoSlNDOjpEb2xsYXJWTUFzc2VydFNjb3Bl
Ojp+RG9sbGFyVk1Bc3NlcnRTY29wZSk6CisKIDIwMTktMDktMTMgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGb3JtYXR0ZXI6
IFByZXR0eSBQcmludCBIVE1MIHJlc291cmNlcyAoaW5jbHVkaW5nIGlubGluZSA8c2NyaXB0Pi88
c3R5bGU+KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Z1bmN0aW9uT3ZlcnJp
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rp
b25PdmVycmlkZXMuY3BwCShyZXZpc2lvbiAyNDk4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMSAr
ODksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgIGl0IHVzZXMgdGhlICd3aXRoJyBrZXl3b3Jk
IGluc3RlYWQgb2YgdGhlICdvdmVycmlkZScga2V5d29yZC4KICAqLwogCitzdHJ1Y3QgRnVuY3Rp
b25PdmVycmlkZXNBc3NlcnRTY29wZSB7CisgICAgRnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29w
ZSgpIHsgUkVMRUFTRV9BU1NFUlQoZ19qc2NDb25maWcucmVzdHJpY3RlZE9wdGlvbnNFbmFibGVk
KTsgfQorICAgIH5GdW5jdGlvbk92ZXJyaWRlc0Fzc2VydFNjb3BlKCkgeyBSRUxFQVNFX0FTU0VS
VChnX2pzY0NvbmZpZy5yZXN0cmljdGVkT3B0aW9uc0VuYWJsZWQpOyB9Cit9OworCiBGdW5jdGlv
bk92ZXJyaWRlcyYgRnVuY3Rpb25PdmVycmlkZXM6Om92ZXJyaWRlcygpCiB7CisgICAgRnVuY3Rp
b25PdmVycmlkZXNBc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPEZ1bmN0aW9uT3ZlcnJpZGVzPiBvdmVycmlkZXM7CiAgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVMaXN0RmxhZzsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFs
aXplTGlzdEZsYWcsIFtdIHsKKyAgICAgICAgRnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKICAgICAgICAgY29uc3QgY2hhciogb3ZlcnJpZGVzRmlsZU5hbWUgPSBPcHRp
b25zOjpmdW5jdGlvbk92ZXJyaWRlcygpOwogICAgICAgICBvdmVycmlkZXMuY29uc3RydWN0KG92
ZXJyaWRlc0ZpbGVOYW1lKTsKICAgICB9KTsKQEAgLTEwMiwxMyArMTA5LDEzIEBAIEZ1bmN0aW9u
T3ZlcnJpZGVzJiBGdW5jdGlvbk92ZXJyaWRlczo6b3YKICAgICAKIEZ1bmN0aW9uT3ZlcnJpZGVz
OjpGdW5jdGlvbk92ZXJyaWRlcyhjb25zdCBjaGFyKiBvdmVycmlkZXNGaWxlTmFtZSkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChnX2pzY0NvbmZpZy5yZXN0cmljdGVkT3B0aW9uc0VuYWJsZWQpOwor
ICAgIEZ1bmN0aW9uT3ZlcnJpZGVzQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgcGFyc2VP
dmVycmlkZXNJbkZpbGUoaG9sZExvY2sobV9sb2NrKSwgb3ZlcnJpZGVzRmlsZU5hbWUpOwogfQog
CiB2b2lkIEZ1bmN0aW9uT3ZlcnJpZGVzOjpyZWluc3RhbGxPdmVycmlkZXMoKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKGdfanNjQ29uZmlnLnJlc3RyaWN0ZWRPcHRpb25zRW5hYmxlZCk7CisgICAg
RnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBGdW5jdGlvbk92
ZXJyaWRlcyYgb3ZlcnJpZGVzID0gRnVuY3Rpb25PdmVycmlkZXM6Om92ZXJyaWRlcygpOwogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sob3ZlcnJpZGVzLm1fbG9jayk7CiAgICAgY29uc3QgY2hh
ciogb3ZlcnJpZGVzRmlsZU5hbWUgPSBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpOwpAQCAt
MTE4LDYgKzEyNSw3IEBAIHZvaWQgRnVuY3Rpb25PdmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWQK
IAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU92ZXJyaWRlSW5mbyhjb25zdCBTb3VyY2VDb2RlJiBv
cmlnQ29kZSwgY29uc3QgU3RyaW5nJiBuZXdCb2R5LCBGdW5jdGlvbk92ZXJyaWRlczo6T3ZlcnJp
ZGVJbmZvJiBpbmZvKQogeworICAgIEZ1bmN0aW9uT3ZlcnJpZGVzQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CiAgICAgU3RyaW5nIG9yaWdQcm92aWRlclN0ciA9IG9yaWdDb2RlLnByb3ZpZGVyKCkt
PnNvdXJjZSgpLnRvU3RyaW5nKCk7CiAgICAgdW5zaWduZWQgb3JpZ1N0YXJ0ID0gb3JpZ0NvZGUu
c3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBvcmlnRnVuY3Rpb25TdGFydCA9IG9yaWdQcm92
aWRlclN0ci5yZXZlcnNlRmluZCgiZnVuY3Rpb24iLCBvcmlnU3RhcnQpOwpAQCAtMTQ1LDcgKzE1
Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPdmVycmlkZUluZm8oY29uc3QKICAgICAKIGJv
b2wgRnVuY3Rpb25PdmVycmlkZXM6OmluaXRpYWxpemVPdmVycmlkZUZvcihjb25zdCBTb3VyY2VD
b2RlJiBvcmlnQ29kZSwgRnVuY3Rpb25PdmVycmlkZXM6Ok92ZXJyaWRlSW5mbyYgcmVzdWx0KQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGdfanNjQ29uZmlnLnJlc3RyaWN0ZWRPcHRpb25zRW5hYmxl
ZCk7CisgICAgRnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBS
RUxFQVNFX0FTU0VSVChPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpKTsKICAgICBGdW5jdGlv
bk92ZXJyaWRlcyYgb3ZlcnJpZGVzID0gRnVuY3Rpb25PdmVycmlkZXM6Om92ZXJyaWRlcygpOwog
CkBAIC0xNjUsNiArMTczLDcgQEAgYm9vbCBGdW5jdGlvbk92ZXJyaWRlczo6aW5pdGlhbGl6ZU92
ZXJyaQogICAgIH0KIAogICAgIGluaXRpYWxpemVPdmVycmlkZUluZm8ob3JpZ0NvZGUsIG5ld0Jv
ZHksIHJlc3VsdCk7CisgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlk
ZXMoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5Miw2ICsyMDEsNyBAQCBzdGF0aWMg
Ym9vbCBoYXNEaXNhbGxvd2VkQ2hhcmFjdGVycyhjb25zCiAKIHN0YXRpYyBTdHJpbmcgcGFyc2VD
bGF1c2UoY29uc3QgY2hhcioga2V5d29yZCwgc2l6ZV90IGtleXdvcmRMZW5ndGgsIEZJTEUqIGZp
bGUsIGNvbnN0IGNoYXIqIGxpbmUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiB7
CisgICAgRnVuY3Rpb25PdmVycmlkZXNBc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBjb25z
dCBjaGFyKiBrZXl3b3JkUG9zID0gc3Ryc3RyKGxpbmUsIGtleXdvcmQpOwogICAgIGlmICgha2V5
d29yZFBvcykKICAgICAgICAgRkFJTF9XSVRIX0VSUk9SKFNZTlRBWF9FUlJPUiwgKCJFeHBlY3Rp
bmcgJyIsIGtleXdvcmQsICInIGNsYXVzZTpcbiIsIGxpbmUsICJcbiIpKTsKQEAgLTIzOCw3ICsy
NDgsNyBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ2xhdXNlKGNvbnN0IGNoYXIqIGtlCiAKIHZvaWQg
RnVuY3Rpb25PdmVycmlkZXM6OnBhcnNlT3ZlcnJpZGVzSW5GaWxlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgY29uc3QgY2hhciogZmlsZU5hbWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ19qc2ND
b25maWcucmVzdHJpY3RlZE9wdGlvbnNFbmFibGVkKTsKKyAgICBGdW5jdGlvbk92ZXJyaWRlc0Fz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIGlmICghZmlsZU5hbWUpCiAgICAgICAgIHJldHVy
bjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHJldmlzaW9uIDI0OTgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2Ugewog
Ly8gICAgICBmaW5pc2hDcmVhdGlvbigpCiAvLyAgICAgIEhPU1RfQ0FMTCBvciBvcGVyYXRpb24g
ZnVuY3Rpb25zCiAvLyAgICAgIENvbnN0cnVjdG9ycyBhbmQgbWV0aG9kcyBvZiB1dGlsaXR5IGFu
ZCB0ZXN0IGNsYXNzZXMKKy8vICAgICAgbGFtYmRhIGZ1bmN0aW9ucworLy8KKy8vIFRoZSB3YXkg
dG8gZG8gdGhpcyBSRUxFQVNFX0FTU0VSVCBpcyB3aXRoIHRoZSBEb2xsYXJWTUFzc2VydFNjb3Bl
IGJlbG93LgogLy8KIC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiBhcmUgc29tZSBjb25zdGV4cHIgY29u
c3RydWN0b3JzIHVzZWQgZm9yIGluc3RhbnRpYXRpbmcKIC8vIGdsb2JhbHMgKHNpbmNlIHRoZXNl
IG11c3QgaGF2ZSB0cml2aWFsIGNvbnN0cnVjdG9ycykgZS5nLiBET01KSVRBdHRyaWJ1dGUuCkBA
IC04MywxOCArODYsMTggQEAgcHVibGljOgogICAgIEpTRG9sbGFyVk1DYWxsRnJhbWUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAg
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICB9CiAKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTRG9sbGFyVk1DYWxsRnJhbWUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHJlcXVlc3RlZEZyYW1lSW5kZXgpCiAgICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpOwpAQCAtMTA1LDE2ICsxMDgsMTgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENhbGxGcmFtZSog
ZnJhbWUsIHVuc2lnbmVkIHJlcXVlc3RlZEZyYW1lSW5kZXgpCiAgICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
CiAgICAgICAgIGF1dG8gYWRkUHJvcGVydHkgPSBbJl0gKFZNJiB2bSwgY29uc3QgY2hhciogbmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkgeworICAgICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKICAgICAgICAgICAgIEpTRG9sbGFyVk1DYWxsRnJhbWU6OmFkZFByb3BlcnR5KHZt
LCBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIH07CiAKICAgICAgICAgdW5zaWduZWQgZnJhbWVJbmRl
eCA9IDA7CiAgICAgICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBmcmFtZS0+aXRl
cmF0ZShbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lSW5kZXgrKyAh
PSByZXF1ZXN0ZWRGcmFtZUluZGV4KQogICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOwpAQCAtMTQzLDcgKzE0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWUgdmFsdWUp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsK
KyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAgICAg
ICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgdmFsdWUpOwogICAgIH0KQEAgLTE1OSw3ICsx
NjQsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgIH0KIAogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOwpAQCAtMTY5LDcgKzE3NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBFbGVtZW50KiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSb290KiByb290KQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgp
KTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEVsZW1lbnQ+KHZtLmhlYXApKSBFbGVtZW50KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBlbGVt
ZW50LT5maW5pc2hDcmVhdGlvbih2bSwgcm9vdCk7CkBAIC0xODAsNiArMTg1LDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICAgICAgRWxlbWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxFbGVtZW50Kj4oY2Vs
bCk7CiAgICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKQEAg
LTE5MCw3ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxh
clZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCkBA
IC0yMDUsNiArMjExLDcgQEAgY2xhc3MgRWxlbWVudEhhbmRsZU93bmVyIDogcHVibGljIFdlYWtI
YQogcHVibGljOgogICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQogICAgICAg
ICAgICAgKnJlYXNvbiA9ICJKU0M6OkVsZW1lbnQgaXMgb3BhcXVlIHJvb3QiOwogICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0ganNDYXN0PEVsZW1lbnQqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwo
KSk7CkBAIC0yMTcsNyArMjI0LDcgQEAgcHVibGljOgogICAgIFJvb3QoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICB9CiAKICAgICBFbGVtZW50KiBlbGVt
ZW50KCkKQEAgLTIyNywxMyArMjM0LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQogICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKICAgICAgICAgV2VhazxFbGVtZW50PiBuZXdFbGVtZW50KGVsZW1lbnQsIEVs
ZW1lbnQ6OmhhbmRsZU93bmVyKCkpOwogICAgICAgICBtX2VsZW1lbnQuc3dhcChuZXdFbGVtZW50
KTsKICAgICB9CiAKICAgICBzdGF0aWMgUm9vdCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBqc051bGwoKSk7CiAgICAgICAgIFJvb3QqIHJvb3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxSb290Pih2bS5oZWFwKSkgUm9vdCh2bSwgc3RydWN0dXJlKTsKICAgICAg
ICAgcm9vdC0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMjQ2LDEyICsyNTQsMTMgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHRoaXNPYmplY3QpOwpAQCAtMjY2LDcgKzI3NSw3IEBAIHB1YmxpYzoKICAgICBTaW1w
bGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VE
b2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAg
ICB9CiAKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTI3NCw3ICsyODMs
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU2ltcGxlT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKICAgICAgICAgU2ltcGxlT2JqZWN0KiBz
aW1wbGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTaW1wbGVPYmplY3Q+KHZt
LmhlYXApKSBTaW1wbGVPYmplY3Qodm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIHNpbXBsZU9iamVj
dC0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMjgzLDYgKzI5Miw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihj
ZWxsKTsKICAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwpA
QCAtMjkxLDcgKzMwMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9s
bGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
QEAgLTMxNyw3ICszMjcsNyBAQCBwdWJsaWM6CiAgICAgSW1wdXJlR2V0dGVyKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgfQogCiAgICAgREVDTEFSRV9J
TkZPOwpAQCAtMzI2LDEzICszMzYsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25z
Ojp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBJbXB1cmVHZXR0ZXIqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU09iamVjdCogZGVsZWdhdGUpCiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgSW1wdXJlR2V0dGVyKiBnZXR0ZXIgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbXB1cmVHZXR0ZXI+KHZtLmhlYXApKSBJbXB1cmVHZXR0ZXIo
dm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGdldHRlci0+ZmluaXNoQ3JlYXRpb24odm0sIGRlbGVn
YXRlKTsKICAgICAgICAgcmV0dXJuIGdldHRlcjsKQEAgLTM0MCw3ICszNTAsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIGRlbGVnYXRlKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgaWYgKGRlbGVnYXRlKQogICAgICAgICAgICAgbV9k
ZWxlZ2F0ZS5zZXQodm0sIHRoaXMsIGRlbGVnYXRlKTsKQEAgLTM0OCw3ICszNTgsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAgICAgSW1wdXJlR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdl
dHRlcio+KG9iamVjdCk7CkBAIC0zNjQsNiArMzc0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjZWxsLCBpbmZvKCkpOwogICAgICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4oY2VsbCk7CkBAIC0zODQsNyArMzk1LDcgQEAg
cHVibGljOgogICAgIEN1c3RvbUdldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTM5MywxMyArNDA0
LDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
Q3VzdG9tR2V0dGVyKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBDdXN0b21HZXR0ZXIq
IGdldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEN1c3RvbUdldHRlcj4odm0uaGVh
cCkpIEN1c3RvbUdldHRlcih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgZ2V0dGVyLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBnZXR0ZXI7CkBAIC00MDcsNyArNDE4LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNl
RG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIEN1c3RvbUdldHRlciogdGhpc09i
amVjdCA9IGpzQ2FzdDxDdXN0b21HZXR0ZXIqPihvYmplY3QpOwogICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9t
R2V0dGVyIikpKSB7CkBAIC00MjYsNyArNDM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC00NDIsNyArNDUzLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVy
QWNlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFy
Vk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAgICAgCkBAIC00NjQsNyArNDc1LDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFJ1bnRpbWVBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkp
OwpAQCAtNDc4LDcgKzQ4OSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNl
RG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgICAgIHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpLT5SdW50aW1lQXJyYXk6On5S
dW50aW1lQXJyYXkoKTsKICAgICB9CiAKQEAgLTQ4Niw3ICs0OTcsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsK
KyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CkBAIC01MDUsNyArNTE2LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAg
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgUnVudGltZUFy
cmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAgICAgICAg
IGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLCBqc051bWJlcih0aGlzT2JqZWN0LT5tX3ZlY3Rvcltp
bmRleF0pKTsKQEAgLTUzMSwyMCArNTQyLDIwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBcnJh
eVByb3RvdHlwZSogY3JlYXRlUHJvdG90eXBlKFZNJiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZN
KCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpOwogICAgIH0KIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERlcml2ZWRBcnJheVR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpLCBBcnJheUNsYXNzKTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CkBAIC01NTcsMTIgKzU2OCwxMiBAQCBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEpTQXJyYXko
ZXhlYy0+dm0oKSwgc3RydWN0dXJlLCAwKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
T3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CiAgICAgfQogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGxlbmd0aEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIApAQCAtNTgwLDcgKzU5MSw3IEBAIHB1YmxpYzoKICAgICBET01KSVROb2RlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgfQogCiAgICAgREVD
TEFSRV9JTkZPOwpAQCAtNTg5LDE2ICs2MDAsMTcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDOjpKU1R5cGUoTGFzdEpTQ09iamVjdFR5cGUgKyAx
KSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgc3RhdGljIFJlZjxTbmlwcGV0PiBjaGVja1N1YkNsYXNzU25pcHBldCgpCiAgICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgUmVmPFNuaXBwZXQ+IHNuaXBw
ZXQgPSBTbmlwcGV0OjpjcmVhdGUoKTsKLSAgICAgICAgc25pcHBldC0+c2V0R2VuZXJhdG9yKFs9
XShDQ2FsbEhlbHBlcnMmIGppdCwgU25pcHBldFBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIHNu
aXBwZXQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBTbmlwcGV0UGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShwYXJhbXNbMF0u
Z3ByKCksIEpTQzo6SlNUeXBlKExhc3RKU0NPYmplY3RUeXBlICsgMSkpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWlsdXJlQ2FzZXM7CkBAIC02MDksNyArNjIxLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIERPTUpJVE5vZGUqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIERPTUpJVE5v
ZGUqIGdldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERPTUpJVE5vZGU+KHZtLmhl
YXApKSBET01KSVROb2RlKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBnZXR0ZXItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGdldHRlcjsKQEAgLTYzMSw3ICs2NDMsNyBAQCBw
dWJsaWM6CiAgICAgRE9NSklUR2V0dGVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CiAgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNjQwLDEzICs2NTIs
MTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlND
OjpKU1R5cGUoTGFzdEpTQ09iamVjdFR5cGUgKyAxKSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAogICAgIHN0YXRpYyBET01KSVRHZXR0ZXIqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6
dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CiAgICAgICAgIERPTUpJVEdldHRlciogZ2V0dGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RE9NSklUR2V0dGVyPih2bS5oZWFwKSkgRE9NSklUR2V0dGVyKHZtLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICBnZXR0ZXItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGdldHRl
cjsKQEAgLTY2OSw3ICs2ODEsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gc2xvd0NhbGwoRXhlY1N0YXRlKiBl
eGVjLCB2b2lkKiBwb2ludGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PERPTUpJVEdldHRl
cio+KHBvaW50ZXIpLT52YWx1ZSgpKSk7CkBAIC02NzcsMTAgKzY4OSwxMSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgc3RhdGljIFJlZjxET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0PiBjYWxsRE9N
R2V0dGVyKCkKICAgICAgICAgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6
dXNlRG9sbGFyVk0oKSk7CisgICAgICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwogICAgICAgICAgICAgUmVmPERPTUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQ+IHNuaXBw
ZXQgPSBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0OjpjcmVhdGUoKTsKICAgICAgICAgICAg
IHNuaXBwZXQtPnJlcXVpcmVHbG9iYWxPYmplY3QgPSBmYWxzZTsKLSAgICAgICAgICAgIHNuaXBw
ZXQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgc25pcHBldC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0cyA9IHBhcmFtc1swXS5qc1ZhbHVlUmVncygpOwogICAgICAgICAgICAgICAgIEdQUlJl
ZyBkb20gPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZFNsb3dQ
YXRoQ2FsbChqaXQuanVtcCgpLCBqaXQsIHNsb3dDYWxsLCByZXN1bHRzLCBkb20pOwpAQCAtNjk3
LDcgKzcxMCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9t
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJW
TSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgRE9NSklUTm9kZSogdGhpc09iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8RE9NSklUTm9kZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKQEAgLTcwOSw3ICs3MjIsNyBAQCBzdGF0aWMg
Y29uc3QgRE9NSklUR2V0dGVyOjpET01KSVRBdHRyaWJ1CiAKIHZvaWQgRE9NSklUR2V0dGVyOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNl
RG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIq
IGRvbUpJVCA9ICZET01KSVRHZXR0ZXJET01KSVQ7CiAgICAgYXV0byogY3VzdG9tR2V0dGVyU2V0
dGVyID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGRvbUpJVC0+Z2V0dGVy
KCksIG51bGxwdHIsIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBET01KSVROb2RlOjppbmZvKCks
IGRvbUpJVCB9KTsKQEAgLTcyMSw3ICs3MzQsNyBAQCBwdWJsaWM6CiAgICAgRE9NSklUR2V0dGVy
Q29tcGxleChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURv
bGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAg
IH0KIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTczMCwxMyArNzQzLDEzIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQzo6SlNUeXBlKExhc3RKU0NP
YmplY3RUeXBlICsgMSksIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgRE9NSklUR2V0dGVyQ29tcGxleCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgRE9NSklUR2V0dGVyQ29tcGxleCogZ2V0dGVy
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RE9NSklUR2V0dGVyQ29tcGxleD4odm0uaGVh
cCkpIERPTUpJVEdldHRlckNvbXBsZXgodm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGdldHRlci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybiBnZXR0ZXI7
CkBAIC03NTksNyArNzcyLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4ZWNTdGF0ZSogZXhl
Yywgdm9pZCogcG9pbnRlcikKICAgICAgICAgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
T3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzc0LDEzICs3ODcsMTQg
QEAgcHVibGljOgogCiAgICAgICAgIHN0YXRpYyBSZWY8RE9NSklUOjpDYWxsRE9NR2V0dGVyU25p
cHBldD4gY2FsbERPTUdldHRlcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgICAgIFJlZjxET01KSVQ6OkNhbGxET01HZXR0ZXJT
bmlwcGV0PiBzbmlwcGV0ID0gRE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldDo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49
IDQsICJOdW1iZXIgb2YgcmVnaXN0ZXJzIHNob3VsZCBiZSBsYXJnZXIgb3IgZXF1YWwgdG8gNC4i
KTsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzIC0gNDsKICAgICAgICAgICAgIHNuaXBwZXQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IG51bUdQU2NyYXRjaFJlZ2lzdGVyczsKICAgICAgICAgICAgIHNuaXBwZXQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDM7Ci0gICAgICAgICAgICBzbmlwcGV0LT5zZXRHZW5l
cmF0b3IoWz1dKENDYWxsSGVscGVycyYgaml0LCBTbmlwcGV0UGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgIHNuaXBwZXQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBT
bmlwcGV0UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdHMgPSBw
YXJhbXNbMF0uanNWYWx1ZVJlZ3MoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgZG9tR1BSID0g
cGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1HUFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkKQEAgLTc5OSw3ICs4MTMsNyBAQCBwcml2YXRl
OgogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFi
bGVFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8q
IG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUR2V0dGVyQ29tcGxleCo+KHZtLCBleGVjLT50
aGlzVmFsdWUoKSk7CiAgICAgICAgIGlmIChvYmplY3QpCkBAIC04MDksNyArODIzLDcgQEAgcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKICAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTgyNyw3ICs4NDEsNyBAQCBzdGF0aWMgY29uc3QgRE9NSklUR2V0dGVyQ29tcGxleDo6RE9NSklU
CiAKIHZvaWQgRE9NSklUR2V0dGVyQ29tcGxleDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0
dGVyKiBkb21KSVQgPSAmRE9NSklUR2V0dGVyQ29tcGxleERPTUpJVDsKICAgICBhdXRvKiBjdXN0
b21HZXR0ZXJTZXR0ZXIgPSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9t
SklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IERPTUpJVEdl
dHRlckNvbXBsZXg6OmluZm8oKSwgZG9tSklUIH0pOwpAQCAtODQwLDcgKzg1NCw3IEBAIHB1Ymxp
YzoKICAgICBET01KSVRGdW5jdGlvbk9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTg0OSwxMyAr
ODYzLDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KEpTQzo6SlNUeXBlKExhc3RKU0NPYmplY3RUeXBlICsgMSksIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgRE9NSklURnVuY3Rpb25PYmplY3QqIGNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIERPTUpJ
VEZ1bmN0aW9uT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxET01K
SVRGdW5jdGlvbk9iamVjdD4odm0uaGVhcCkpIERPTUpJVEZ1bmN0aW9uT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpOwogICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwogICAgICAgICByZXR1cm4gb2JqZWN0OwpAQCAtODYzLDcgKzg3Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2l0aFR5cGVD
aGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg3Niw3ICs4OTAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2so
RXhlY1N0YXRlKiBleGVjLCBET01KSVROb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPnZhbHVlKCkpKTsKQEAgLTg4NSwxMCArODk5
LDExIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0YXRpYyBSZWY8U25pcHBldD4g
Y2hlY2tTdWJDbGFzc1NuaXBwZXQoKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0
aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CiAgICAgICAgIFJlZjxTbmlwcGV0PiBzbmlwcGV0ID0gU25pcHBldDo6Y3JlYXRlKCk7
CiAgICAgICAgIHNuaXBwZXQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Ci0gICAgICAgIHNu
aXBwZXQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBzbmlwcGV0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgU25pcHBldFBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB2
YWx1ZSA9IDQyLjA7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKICAgICAgICAgICAgIC8vIE1heSB1c2Ugc2NyYXRjaCByZWdpc3RlcnMuCkBAIC05MDgs
NyArOTIzLDcgQEAgc3RhdGljIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlIERPTUpJVEZ1bgogCiB2
b2lkIERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNl
RG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0s
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZ1bmMiKSwgMCwgZnVu
Y3Rpb25XaXRoVHlwZUNoZWNrLCBOb0ludHJpbnNpYywgJkRPTUpJVEZ1bmN0aW9uT2JqZWN0U2ln
bmF0dXJlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KSk7CiB9CkBAIC05MTgsNyArOTMzLDcgQEAgcHVibGljOgogICAgIERPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VE
b2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAg
ICB9CiAKICAgICBERUNMQVJFX0lORk87CkBAIC05MjcsMTMgKzk0MiwxMyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0M6OkpTVHlwZShMYXN0SlND
T2JqZWN0VHlwZSArIDEpLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIERPTUpJVENoZWNrU3ViQ2xhc3NP
YmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERPTUpJVENoZWNrU3Vi
Q2xhc3NPYmplY3Q+KHZtLmhlYXApKSBET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpOwogICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwogICAgICAgICByZXR1cm4gb2JqZWN0OwpAQCAtOTQxLDcgKzk1Niw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2l0aFR5cGVD
aGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC05NTMsNyArOTY4LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT52YWx1ZSgpKSk7CkBAIC05
NjcsNyArOTgyLDcgQEAgc3RhdGljIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlIERPTUpJVENoZQog
CiB2b2lkIERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnVuYyIp
LCAwLCBmdW5jdGlvbldpdGhUeXBlQ2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklUQ2hlY2tTdWJD
bGFzc09iamVjdFNpZ25hdHVyZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkpOwogfQpAQCAtOTc3LDcgKzk5Miw3IEBAIHB1YmxpYzoKICAgICBET01K
SVRHZXR0ZXJCYXNlSlNPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKICAgICB9CiAKICAgICBERUNMQVJFX0lORk87CkBAIC05ODYsMTMgKzEwMDEsMTMg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDOjpK
U1R5cGUoTGFzdEpTQ09iamVjdFR5cGUgKyAxKSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QqIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
T3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CiAgICAgICAgIERPTUpJVEdldHRlckJhc2VKU09iamVjdCogZ2V0dGVyID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0Pih2bS5oZWFw
KSkgRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBnZXR0
ZXItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGdldHRlcjsKQEAgLTEwMTUs
NyArMTAzMCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQq
IHBvaW50ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OnVzZURvbGxhclZNKCkpOworICAgICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHBvaW50ZXIpOwpAQCAtMTAyNCwxMCAr
MTAzOSwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgc3RhdGljIFJlZjxET01KSVQ6OkNhbGxET01H
ZXR0ZXJTbmlwcGV0PiBjYWxsRE9NR2V0dGVyKCkKICAgICAgICAgewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgICAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICAgICAgUmVmPERPTUpJVDo6Q2FsbERP
TUdldHRlclNuaXBwZXQ+IHNuaXBwZXQgPSBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgIHNuaXBwZXQtPnJlcXVpcmVHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHNuaXBwZXQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBq
aXQsIFNuaXBwZXRQYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgc25pcHBldC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0cyA9IHBhcmFtc1swXS5qc1ZhbHVlUmVncygpOwog
ICAgICAgICAgICAgICAgIEdQUlJlZyBkb20gPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLmFkZFNsb3dQYXRoQ2FsbChqaXQuanVtcCgpLCBqaXQsIHNsb3dDYWxsLCBy
ZXN1bHRzLCBkb20pOwpAQCAtMTA0NCw3ICsxMDYwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsK
QEAgLTEwNTYsNyArMTA3Miw3IEBAIHN0YXRpYyBjb25zdCBET01KSVRHZXR0ZXJCYXNlSlNPYmpl
Y3Q6OkQKIAogdm9pZCBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUID0gJkRPTUpJ
VEdldHRlckJhc2VKU09iamVjdERPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIg
PSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwg
bnVsbHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IEpTT2JqZWN0OjppbmZvKCksIGRvbUpJ
VCB9KTsKQEAgLTEwODQsMTIgKzExMDAsMTIgQEAgcHVibGljOgogICAgIEpTVGVzdEN1c3RvbUdl
dHRlclNldHRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVz
ZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwog
ICAgIH0KIAogICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIqIGNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0
dGVyKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21HZXR0
ZXJTZXR0ZXI+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIodm0sIHN0cnVjdHVy
ZSk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMTA5OSw3ICsxMTE1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIApAQCAtMTEyMiw3ICsxMTM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IGN1c3RvbUdldFZhbHVlKEV4ZQogCiBzdGF0aWMgYm9vbCBjdXN0b21TZXRBY2Nlc3NvcihFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgp
KTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CkBAIC0xMTM2LDcgKzExNTIsNyBAQCBzdGF0aWMgYm9vbCBjdXN0b21TZXRBY2Nlc3Nv
cihFeGVjU3RhdGUqCiAKIHN0YXRpYyBib29sIGN1c3RvbVNldFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgc2xvdFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
CiAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSkuaW5oZXJpdHM8
SlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyPihleGVjLT52bSgpKSk7CkBAIC0xMTUyLDcgKzExNjgs
NyBAQCBzdGF0aWMgYm9vbCBjdXN0b21TZXRWYWx1ZShFeGVjU3RhdGUqIGV4CiAKIHZvaWQgSlNU
ZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBw
dXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1
c3RvbVZhbHVlIiksCkBAIC0xMTg1LDcgKzEyMDEsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNUZXN0
Q3VzdG9tR2V0dGVyU2V0dGVyCiAKIEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxl
T3duZXIoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOwor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgc3RhdGljIEVsZW1lbnRI
YW5kbGVPd25lciogb3duZXIgPSAwOwogICAgIGlmICghb3duZXIpCiAgICAgICAgIG93bmVyID0g
bmV3IEVsZW1lbnRIYW5kbGVPd25lcigpOwpAQCAtMTE5NCw3ICsxMjEwLDcgQEAgRWxlbWVudEhh
bmRsZU93bmVyKiBFbGVtZW50OjpoYW5kbGVPd25lcgogCiB2b2lkIEVsZW1lbnQ6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgUm9vdCogcm9vdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25z
Ojp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBzZXRSb290KHZtLCByb290KTsKICAg
ICBtX3Jvb3QtPnNldEVsZW1lbnQodGhpcyk7CkBAIC0xMjI3LDE0ICsxMjQzLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2NsaWVudCh0aGlzKQogICAgICAgICAsIG1fc3RyZWFtaW5nUGFyc2Vy
KG1faW5mby5nZXQoKSwgbV9jbGllbnQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKICAgICB9CiAKICAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7
CiAKICAgICBzdGF0aWMgV2FzbVN0cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9w
dGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CiAgICAgICAgIFdhc21TdHJlYW1pbmdQYXJzZXIq
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdhc21TdHJlYW1pbmdQYXJzZXI+
KHZtLmhlYXApKSBXYXNtU3RyZWFtaW5nUGFyc2VyKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTEyNDMsNyArMTI1OSw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKQEAgLTEyNTEsNyArMTI2Nyw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
IAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2Jq
ZWN0KHZtKTsKQEAgLTEyNzAsNyArMTI4Niw3IEBAIGNvbnN0IENsYXNzSW5mbyBXYXNtU3RyZWFt
aW5nUGFyc2VyOjpzX2kKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldh
c21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogCkBAIC0xMjg1LDcgKzEzMDEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmluYWxpemUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZN
KCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxXYXNtU3Ry
ZWFtaW5nUGFyc2VyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXRoaXNPYmpl
Y3QpCkBAIC0xMzA1LDcgKzEzMjEsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNEb2xsYXJWTTo6c19p
bmZvID0geyAiCiAvLyBVc2FnZTogJHZtLmNyYXNoKCkKIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmFzaChFeGVjU3Rh
dGUqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgQ1JBU0goKTsKIH0KIApAQCAt
MTMxMyw3ICsxMzI5LDcgQEAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggRW5jb2RlZEpT
VgogLy8gVXNhZ2U6ICR2bS5icmVha3BvaW50KDxjb25kaXRpb24+KQogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25CcmVha3BvaW50KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIC8vIE5vdGhpbmcgc2hvdWxkIHRocm93
IGhlcmUgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgZG91YmxlIGNoZWNrLi4uCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CkBA
IC0xMzI4LDcgKzEzNDQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jCiAvLyBVc2FnZTogaXNERkcgPSAkdm0uZGZnVHJ1ZSgpCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRGR1RydWUoRXhlY1N0YXRlKikKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiB9CiAKQEAgLTEzMzYsMTMgKzEzNTIsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuYwogLy8gVXNhZ2U6IGlzRlRMID0gJHZtLmZ0bFRydWUoKQogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GVExUcnVlKEV4ZWNTdGF0
ZSopCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNwdU1mZW5jZShFeGVjU3RhdGUqKQogewotICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CiAjaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpCiAgICAgYXNtIHZvbGF0
aWxlKCJtZmVuY2UiIDo6OiAibWVtb3J5Iik7CiAjZW5kaWYKQEAgLTEzNTEsNyArMTM2Nyw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcHVSZHRzYyhFeGVjU3RhdGUqKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAjaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1Mp
CiAgICAgdW5zaWduZWQgaGlnaDsKICAgICB1bnNpZ25lZCBsb3c7CkBAIC0xMzY0LDcgKzEzODAs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3B1Q3B1aWQoRXhlY1N0YXRlKikK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogI2lmIENQVShYODZfNjQpICYmICFPUyhXSU5E
T1dTKQogICAgIFdURjo6eDg2X2NwdWlkKCk7CiAjZW5kaWYKQEAgLTEzNzMsNyArMTM4OSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcHVQYXVzZShFeGVjU3RhdGUqKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAjaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1Mp
CiAgICAgYXNtIHZvbGF0aWxlICgicGF1c2UiIDo6OiAibWVtb3J5Iik7CiAjZW5kaWYKQEAgLTEz
OTEsNyArMTQwNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
IC8vIGFuZCBjbGZsdXNoIGF0IHRoZSBhZGRyZXNzIG9mIHRoZSBidXR0ZXJmbHkuCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNwdUNsZmx1c2goRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOwor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAjaWYgQ1BVKFg4Nl82NCkgJiYg
IU9TKFdJTkRPV1MpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIApAQCAtMTM5OSw2ICsxNDE1
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCiAgICAgYXV0byBjbGZs
dXNoID0gW10gKHZvaWQqIHB0cikgeworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwogICAgICAgICBjaGFyKiBwdHJUb0ZsdXNoID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHB0
cik7CiAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZmx1c2ggJTAiIDo6ICJtIigqcHRyVG9GbHVz
aCkgOiAibWVtb3J5Iik7CiAgICAgfTsKQEAgLTE0MzcsNyArMTQ1NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgOiBtX2N1cnJlbnRGcmFtZSgwKQogICAgICAgICAsIG1faml0VHlwZShKSVRUeXBlOjpO
b25lKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0o
KSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgfQogCiAg
ICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CkBAIC0xNDU4LDcgKzE0NzUsNyBAQCBwcml2YXRlOgogCiBzdGF0aWMgRnVuY3Rpb25F
eGVjdXRhYmxlKiBnZXRFeGVjdXRhYmxlRm9yRnVuY3Rpb24oSlNWYWx1ZSB0aGVGdW5jdGlvblZh
bHVlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgaWYgKCF0aGVGdW5jdGlvblZh
bHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTE0NzcsNyAr
MTQ5NCw3IEBAIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEV4ZWN1dGFibGUKIC8vIFVz
YWdlOiBpc0xMSW50ID0gJHZtLmxsaW50VHJ1ZSgpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkxMaW50VHJ1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQ2FsbGVyRnJhbWVKSVRUeXBlRnVuY3RvciBm
dW5jdG9yOwpAQCAtMTQ4OSw3ICsxNTA2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogLy8gVXNhZ2U6IGlzQmFzZWxpbmVKSVQgPSAkdm0uaml0VHJ1ZSgpCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpJVFRydWUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgaWYgKCFleGVjKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIENhbGxl
ckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKQEAgLTE1MDMsNyArMTUyMCw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIC8vICR2bS5ub0lubGluZShmKTsK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9JbmxpbmUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZN
KCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgCkBAIC0xNTE5LDcgKzE1MzYsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2FnZTogJHZtLmdjKCkKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk1JbnNwZWN0b3I6OmdjKGV4ZWMpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNTI4LDcgKzE1
NDUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2Fn
ZTogJHZtLmVkZW5HQygpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9u
czo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
ICAgICBWTUluc3BlY3Rvcjo6ZWRlbkdDKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNTM3LDcgKzE1NTQsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2FnZTogJHZtLmR1bXBTdWJzcGFjZUhh
c2hlcygpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBT
dWJzcGFjZUhhc2hlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0
aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFZNSW5zcGVjdG9yOjpkdW1wU3Vic3Bh
Y2VIYXNoZXMoJnZtKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtMTU1OSw3ICsxNTc2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuYwogLy8gY29uY2F0ZW5hdGlvbiB3aXRoIHRoZW0uCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICB1bnNpZ25lZCBmcmFtZU51bWJlciA9IDE7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTE1ODAsNyArMTU5Nyw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIC8vIFVzYWdlOiBjb2RlQmxv
Y2tUb2tlbiA9ICR2bS5jb2RlQmxvY2tGb3JGcmFtZSgpIC8vIGltcGxpZXMgZnJhbWUgMCBpLmUu
IGN1cnJlbnQgZnJhbWUuCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNvZGVCbG9ja0ZvckZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwogICAgIHVuc2lnbmVkIGZyYW1lTnVtYmVyID0gMTsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID49IDEpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMTYwMSw3ICsxNjE4LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2tG
cm9tQXJnKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1
c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTYzNSw3ICsxNjUyLDcgQEAgc3RhdGljIENv
ZGVCbG9jayogY29kZUJsb2NrRnJvbUFyZyhFeGVjUwogLy8gYSBKUyBvYmplY3QuIEhlbmNlLCB5
b3UgY2Fubm90IGRvIHN0cmluZyBjb25jYXRlbmF0aW9uIHdpdGggaXQuCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBz
dHJlYW07CiAgICAgaWYgKGNvZGVCbG9jaykgewpAQCAtMTY0OSw3ICsxNjY2LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogLy8gVXNhZ2U6ICR2bS5kdW1wU291
cmNlRm9yKGNvZGVCbG9ja1Rva2VuKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25EdW1wU291cmNlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFy
ZyhleGVjKTsKICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICBjb2RlQmxvY2stPmR1bXBTb3Vy
Y2UoKTsKQEAgLTE2NjAsNyArMTY3Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmMKIC8vIFVzYWdlOiAkdm0uZHVtcEJ5dGVjb2RlRm9yKGNvZGVCbG9jaykKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJ5dGVjb2RlRm9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xs
YXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsKICAgICBpZiAoY29kZUJs
b2NrKQogICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29kZSgpOwpAQCAtMTY2OSw3ICsxNjg2
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgZG9QcmludChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgYWRkTGluZUZlZWQp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhl
Yy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBhcmcgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChpKTsKQEAgLTE2OTMsNyArMTcxMCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBkb1ByaW50KEV4ZWNTdGF0ZSoKIC8vIFVzYWdlOiAkdm0uZGF0YUxvZyhzdHIxLCBz
dHIyLCBzdHIzKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
YXRhTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1
c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAg
IGNvbnN0IGJvb2wgYWRkTGluZUZlZWQgPSBmYWxzZTsKICAgICByZXR1cm4gZG9QcmludChleGVj
LCBhZGRMaW5lRmVlZCk7CiB9CkBAIC0xNzAyLDcgKzE3MTksNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2FnZTogJHZtLnByaW50KHN0cjEsIHN0cjIs
IHN0cjMpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xs
YXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIGNvbnN0
IGJvb2wgYWRkTGluZUZlZWQgPSB0cnVlOwogICAgIHJldHVybiBkb1ByaW50KGV4ZWMsIGFkZExp
bmVGZWVkKTsKIH0KQEAgLTE3MTEsNyArMTcyOCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmMKIC8vIFVzYWdlOiAkdm0uZHVtcENhbGxGcmFtZSgpCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgLy8gV2hlbiB0aGUg
Y2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGluZyB0byBkdW1wIHRo
ZWlyCiAgICAgLy8gb3duIGZyYW1lLiBTbyBza2lwIDEgZm9yIHRoaXMgZnJhbWUuCiAgICAgVk1J
bnNwZWN0b3I6OmR1bXBDYWxsRnJhbWUoZXhlYywgMSk7CkBAIC0xNzIyLDcgKzE3MzksNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2FnZTogJHZtLnBy
aW50U3RhY2soKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
dW1wU3RhY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVj
dGluZyB0byBkdW1wIHRoZQogICAgIC8vIHN0YWNrIHN0YXJ0aW5nIHRoZWlyIG93biBmcmFtZS4g
U28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgogICAgIFZNSW5zcGVjdG9yOjpkdW1wU3RhY2soZXhl
YywgMSk7CkBAIC0xNzM2LDcgKzE3NTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAvLyBpdCBkdW1wIHRoZSBsb2dpY2FsIGZyYW1lIChpLmUuIGJlIGFibGUg
dG8gZHVtcCBpbmxpbmVkIGZyYW1lcyBhcyB3ZWxsKS4KIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFJlZ2lzdGVycyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICB1bnNpZ25lZCByZXF1ZXN0ZWRGcmFtZUluZGV4
ID0gMTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDEpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMTc1MSw2ICsxNzY4
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiAgICAgdW5z
aWduZWQgZnJhbWVJbmRleCA9IDA7CiAgICAgZXhlYy0+aXRlcmF0ZShbJl0gKFN0YWNrVmlzaXRv
ciYgdmlzaXRvcikgeworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwog
ICAgICAgICBpZiAoZnJhbWVJbmRleCsrICE9IHJlcXVlc3RlZEZyYW1lSW5kZXgpCiAgICAgICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICAgICAgVk1JbnNwZWN0b3I6
OmR1bXBSZWdpc3RlcnModmlzaXRvci0+Y2FsbEZyYW1lKCkpOwpAQCAtMTc2NCw3ICsxNzgyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogLy8gVXNhZ2U6ICR2
bS5kdW1wQ2VsbChjZWxsKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EdW1wQ2VsbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0
aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1
ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwpAQCAtMTc3
Nyw3ICsxNzk1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
Ly8gVXNhZ2U6ICR2bS5wcmludCgiaW5kZXhpbmdNb2RlID0gIiArICR2bS5pbmRleGluZ01vZGUo
anNWYWx1ZSkpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklu
ZGV4aW5nTW9kZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9u
czo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
ICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBl
bmNvZGVkSlNVbmRlZmluZWQoKTsKIApAQCAtMTc4OCw3ICsxODA2LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbklubGluZUNhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYg
KGF1dG8qIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgZXhlYy0+YXJndW1l
bnQoMCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+aW5saW5lQ2FwYWNpdHkoKSkpOwpAQCAtMTgwMCw3ICsxODE4LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogLy8gVXNhZ2U6ICR2bS5w
cmludCgidmFsdWUgPSAiICsgJHZtLnZhbHVlKGpzVmFsdWUpKQogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVhbTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kp
IHsKICAgICAgICAgaWYgKGkpCkBAIC0xODE1LDcgKzE4MzMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAvLyBVc2FnZTogJHZtLnByaW50KCJwaWQgPSAiICsg
JHZtLmdldHBpZCgpKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25HZXRQSUQoRXhlY1N0YXRlKikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VE
b2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ2V0Q3VycmVudFByb2Nlc3NJRCgpKSk7CiB9
CiAKQEAgLTE4MjMsNyArMTg0MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKIC8vIFVzYWdlOiAkdm0uaGF2ZUFCYWRUaW1lKGdsb2JhbE9iamVjdCkKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGF2ZUFCYWRUaW1lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgp
KTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIEpTVmFsdWUgb2JqVmFs
dWUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE4NDMsNyArMTg2MSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIC8vIFVzYWdlOiAkdm0uaXNIYXZpbmdBQmFk
VGltZShvYmopCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklz
SGF2aW5nQUJhZFRpbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9w
dGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2Nv
cGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CiAgICAgSlNWYWx1ZSBvYmpWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTg2Niw3ICsx
ODg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogLy8gVXNh
Z2U6ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVHbG9iYWxPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGpzTnVsbCgpKSk7CkBAIC0xODc1LDcgKzE4OTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAg
LTE4ODksNyArMTkwNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVS
dW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUnVudGltZUFycmF5KiBhcnJheSA9
IFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXJyYXkpOwpAQCAtMTg5Nyw3ICsxOTE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZU51bGxSb3BlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNSb3BlU3RyaW5nOjpjcmVh
dGVOdWxsRm9yVGVzdGluZyh2bSkpOwpAQCAtMTkwNSw3ICsxOTIzLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUltcHVyZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwpAQCAtMTkxOSw3ICsxOTM3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEN1c3RvbUdldHRlcjo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgp
KTsKQEAgLTE5MjksNyArMTk0Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25D
cmVhdGVET01KSVROb2RlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUTm9kZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIERPTUpJVEdldHRlcjo6Y3Jl
YXRlKHZtLCBET01KSVRHZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBqc051bGwoKSkpKTsKQEAgLTE5MzksNyArMTk1Nyw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJPYmplY3QoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOwor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBET01KSVRHZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBqc051bGwoKSk7CkBAIC0xOTQ5LDcgKzE5NjcsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQ29tcGxleE9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IERPTUpJVEdldHRlckNvbXBsZXg6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7CkBAIC0xOTU5LDcgKzE5NzcsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZN
KCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBET01KSVRGdW5jdGlvbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKQEAgLTE5NjksNyArMTk4Nyw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRDaGVja1N1YkNsYXNz
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1
c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKQEAgLTE5
NzksNyArMTk5Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01K
SVRHZXR0ZXJCYXNlSlNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRHZXR0ZXJCYXNlSlNPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051
bGwoKSk7CkBAIC0xOTkwLDcgKzIwMDgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVXYXNtU3RyZWFtaW5nUGFyc2VyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgp
KTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoV2FzbVN0cmVhbWluZ1BhcnNlcjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpKTsKQEAgLTE5OTksNyArMjAxNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0yMDIxLDcgKzIwMzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
T3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjAzOSw3ICsyMDU3LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjA1Nyw3ICsyMDc1LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShSb290OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOwpAQCAtMjA2
NSw3ICsyMDgzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1l
bnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURv
bGxhclZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjA3OCw3ICsyMDk2LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8
Um9vdCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CkBAIC0yMDkwLDcgKzIxMDgsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoU2ltcGxlT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkp
OwpAQCAtMjA5OCw3ICsyMTE2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdl
dEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIxMTMsNyArMjEz
MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRIaWRkZW5WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0o
KSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMTMwLDcgKzIxNDgsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0aW9uc09uU3RhY2soRXhlY1N0
YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
aWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpIHsKQEAgLTIxNDEs
NiArMjE1OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAg
ICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChl
eGVjLCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0
YXR1cyB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAg
IGlmICh2aXNpdG9yLT5pc0lubGluZWRGcmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6Q29udGludWU7CiAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKQpA
QCAtMjE1NSw3ICsyMTc0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEds
b2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
dm0uc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coZmFsc2UpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yMTYzLDcgKzIxODIsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJW
TSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwogICAg
IHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyh2bSwgImpzYyBUZXN0aW5n
IEFQSTogZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24iX3MpOwpAQCAtMjE4Myw3ICsyMjAy
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS50eXBlUHJvZmlsZXIoKSk7CiAgICAgdm0u
dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAianNjIFRlc3RpbmcgQVBJ
OiBmdW5jdGlvblJldHVyblR5cGVGb3IiX3MpOwpAQCAtMjE5OSw3ICsyMjE4LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFJFTEVB
U0VfQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkgJiYgdmFsdWUuZ2V0T2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSk7CkBAIC0yMjA5LDcgKzIyMjgsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOwor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwogICAg
IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtcERhdGEoKTsKQEAgLTIyMTgsNyArMjIzNyw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxh
clZNKCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCkpOwogCkBAIC0yMjM4LDcgKzIyNTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY29udHJvbEZsb3dQcm9maWxlcigpKTsKIApAQCAtMjI1OCw3ICsyMjc3LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0
YXRlKikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIE9wdGlvbnM6OnVzZUV4Y2Vw
dGlvbkZ1enooKSA9IHRydWU7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KQEAgLTIyNzAsMjAgKzIyODksMjAgQEAgcHVibGljOgogICAgIERvTm90aGluZ0Rl
YnVnZ2VyKFZNJiB2bSkKICAgICAgICAgOiBEZWJ1Z2dlcih2bSkKICAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBzZXRTdXBwcmVzc0FsbFBhdXNlcyh0cnVl
KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwg
U291cmNlUHJvdmlkZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGUKICAgICB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIH0KIH07CiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBjaGFuZ2VEZWJ1Z2dlck1vZGVXaGVuSWRsZShFeGVjU3RhdGUqIGV4ZWMs
IE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICBib29sIGRlYnVnZ2VyUmVxdWVz
dGVkID0gY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6RGVi
dWdnZXIpOwpAQCAtMjI5Miw2ICsyMzExLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNoYW5n
ZURlYnVnZ2VyTW9kZQogCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgdm0tPndoZW5J
ZGxlKFs9XSAoKSB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgICAgIGlmIChkZWJ1Z2dlclJlcXVlc3RlZCkgewogICAgICAgICAgICAgRGVidWdnZXIqIGRl
YnVnZ2VyID0gbmV3IERvTm90aGluZ0RlYnVnZ2VyKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
ICAgICAgICBnbG9iYWxPYmplY3QtPnNldERlYnVnZ2VyKGRlYnVnZ2VyKTsKQEAgLTIzMDgsMjEg
KzIzMjgsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNoYW5nZURlYnVnZ2VyTW9kZQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZURlYnVnZ2Vy
TW9kZVdoZW5JZGxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OwogICAgIHJldHVybiBjaGFuZ2VEZWJ1Z2dlck1vZGVXaGVuSWRsZShleGVjLCB7IENvZGVHZW5l
cmF0aW9uTW9kZTo6RGVidWdnZXIgfSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRGlzYWJsZURlYnVnZ2VyTW9kZVdoZW5JZGxlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIHJldHVybiBjaGFuZ2VEZWJ1
Z2dlck1vZGVXaGVuSWRsZShleGVjLCB7IH0pOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlbGV0ZUFsbENvZGVXaGVuSWRsZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICB2bS0+d2hlbklkbGUoWz1dICgpIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKICAgICAgICAgdm0tPmRlbGV0ZUFsbENvZGUoUHJldmVudENvbGxlY3Rp
b25BbmREZWxldGVBbGxDb2RlKTsKICAgICB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMjMzMCwxMyArMjM1MSwxMyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uR2xvYmFsT2JqZWN0Q291bnQoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihleGVjLT52bSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSkpOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdsb2JhbE9iamVjdEZvck9iamVjdChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFy
Vk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNP
YmplY3QoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KHZhbHVlKS0+Z2xvYmFsT2JqZWN0KGV4ZWMtPnZtKCkpOwpAQCAtMjM0Niw3ICsyMzY3
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdldHRlclNldHRlcihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0o
KSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApA
QCAtMjM3Niw3ICsyMzk3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRH
ZXR0ZXJGcm9tR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0yMzkzLDcgKzI0MTQsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDdXN0b21H
ZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21HZXR0ZXJT
ZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwpAQCAtMjQwMSw3ICsy
NDIyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlbHRhQmV0d2VlbkJ1dHRl
cmZsaWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1
c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIGEgPSBqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBKU09iamVjdCogYiA9IGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAtMjQxOCwyMCAr
MjQzOSwyMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVG90YWxHQ1RpbWUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZN
KCkpOworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAu
dG90YWxHQ1RpbWUoKS5zZWNvbmRzKCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25QYXJzZUNvdW50KEV4ZWNTdGF0ZSopCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdsb2Jh
bFBhcnNlQ291bnQubG9hZCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uSXNXYXNtU3VwcG9ydGVkKEV4ZWNTdGF0ZSopCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oV2FzbTo6aXNTdXBwb3J0ZWQoKSkpOwogI2Vsc2UKQEAgLTI0
NDEsMTUgKzI0NjIsMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
YwogCiB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgpKTsKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3Qodm0pOwogCiAg
ICAgYXV0byBhZGRGdW5jdGlvbiA9IFsmXSAoVk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRp
dmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKSB7CisgICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgIEpTRG9sbGFyVk06OmFkZEZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIG5hbWUsIGZ1bmN0aW9uLCBhcmd1bWVudHMpOwogICAgIH07
CiAgICAgYXV0byBhZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24gPSBbJl0gKFZNJiB2bSwgY29uc3Qg
Y2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykg
eworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBKU0Rv
bGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgbmFtZSwg
ZnVuY3Rpb24sIGFyZ3VtZW50cyk7CiAgICAgfTsKIApAQCAtMjU2MiwxNCArMjU4NSwxNCBAQCB2
b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIAogdm9pZCBKU0RvbGxhclZN
OjphZGRGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICBwdXREaXJlY3Qodm0sIGlk
ZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMs
IGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTTo6
YWRkQ29uc3RydWN0aWJsZUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVk
IGFyZ3VtZW50cykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VEb2xsYXJWTSgp
KTsKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIElkZW50aWZpZXIg
aWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgIHB1dERp
cmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBm
dW5jdGlvbikpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5oCShyZXZpc2lvbiAyNDk4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxMSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorc3RydWN0IERvbGxhclZNQXNzZXJ0U2NvcGUgeworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUoKSB7IFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxhclZNKCkpOyB9CisgICAg
fkRvbGxhclZNQXNzZXJ0U2NvcGUoKSB7IFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZURvbGxh
clZNKCkpOyB9Cit9OworCiBjbGFzcyBKU0RvbGxhclZNIGZpbmFsIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwpA
QCAtMzgsMTMgKzQzLDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVz
ZURvbGxhclZNKCkpOworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAg
fQogCiAgICAgc3RhdGljIEpTRG9sbGFyVk0qIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFy
Vk0oKSk7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAg
IEpTRG9sbGFyVk0qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEb2xs
YXJWTT4odm0uaGVhcCkpIEpTRG9sbGFyVk0odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKQEAgLTU0
LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBKU0RvbGxhclZNKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRG9sbGFyVk0oKSk7CisgICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgfQogCiAK
</data>
<flag name="review"
          id="394367"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>