<?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>24989</bug_id>
          
          <creation_ts>2009-04-01 11:26:40 -0700</creation_ts>
          <short_desc>Refactor InspectorResource to use ScriptObject/FunctionCall</short_desc>
          <delta_ts>2009-04-01 15:49:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>24524</dependson>
          <blocked>25063</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116186</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-01 11:26:40 -0700</bug_when>
    <thetext>Following up on bug 24524, do the same for InspectorResource.

This change is somewhat more involved. In addition to straight refactoring of JS calls, I made tracking resource changes data-driven (bit vector), rather than logic-driven, and moved it into the InspectorResource itself. The advantage is that now InspectorController can now just call InspectorResource::updateScriptResource and it will figure out which bits have been changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116200</commentid>
    <comment_count>1</comment_count>
      <attachid>29172</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-01 12:18:36 -0700</bug_when>
    <thetext>Created attachment 29172
refactor InspectorResource to use ScriptObject/FunctionCall, v1.

 WebCore/ChangeLog                                  |   76 ++++
 .../bindings/js/JSInspectorControllerCustom.cpp    |   14 +-
 WebCore/bindings/js/ScriptFunctionCall.cpp         |    6 +
 WebCore/bindings/js/ScriptFunctionCall.h           |    1 +
 WebCore/bindings/js/ScriptObject.cpp               |   71 ++++
 WebCore/bindings/js/ScriptObject.h                 |   10 +
 WebCore/inspector/InspectorController.cpp          |  434 +++-----------------
 WebCore/inspector/InspectorController.h            |   16 +-
 WebCore/inspector/InspectorController.idl          |    4 +-
 WebCore/inspector/InspectorResource.cpp            |  315 +++++++++++---
 WebCore/inspector/InspectorResource.h              |  121 ++++--
 11 files changed, 571 insertions(+), 497 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116229</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-01 15:49:51 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/42155.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29172</attachid>
            <date>2009-04-01 12:18:36 -0700</date>
            <delta_ts>2009-04-01 14:34:56 -0700</delta_ts>
            <desc>refactor InspectorResource to use ScriptObject/FunctionCall, v1.</desc>
            <filename>refactor-InspectorResource-to-use-ScriptObject-FunctionCall-v1..patch</filename>
            <type>text/plain</type>
            <size>58829</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">NzE5OTFhNDI4YmUwNzhjNTdhZWI3MzgwZmQ5YjgxMmVkNjljMTA5ZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MzdiZjExLi4yMzFhZmM0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDc5IEBACisyMDA5LTA0LTAxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg5CisgICAg
ICAgIFJlZmFjdG9yIEluc3BlY3RvclJlc291cmNlIHRvIHVzZSBTY3JpcHRPYmplY3QvRnVuY3Rp
b25DYWxsLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVz
b3VyY2VTb3VyY2VUb0ZyYW1lKTogVHdlYWtlZCB0byB1c2UKKyAgICAgICAgICAgIGEgbW9yZSBh
cHByb3ByaWF0ZSB0eXBlIGNvbnZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldFJlc291cmNlRG9jdW1lbnROb2RlKTogVHdlYWtlZCB0bworICAgICAg
ICAgICAgYWNjb21tb2RhdGUgZm9yIEluc3BlY3RvclJlc291cmNlIHJlZmFjdG9yaW5nLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KTogQWRkZWQgbG9uZyBsb25n
IHR5cGUgdG8gbWF0Y2gKKyAgICAgICAgICAgIGV4aXN0aW5nIGpzTnVtYmVyIGNhbGwgc2lnbmF0
dXJlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOiBEZWNsYXJh
dGlvbiBmb3IgYWJvdmUuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5T2JqZWN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRPYmplY3Q6OnNldCk6IEFkZGVkIGEgYnVuY2ggb2YgcHJvcGVydHkgc2V0dGVycy4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDogRGVjbGFyYXRpb25zIGZvciBhYm92
ZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IE1vdmVkIGFs
bCBJbnNwZWN0b3JSZXNvdXJjZS1tYW5hZ2luZyBjb2RlCisgICAgICAgICAgICB0byBJbnNwZWN0
b3JSZXNvdXJjZS5jcHAKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cyk6IENoYW5nZWQgdG8gdXNlCisgICAgICAgICAgICByZWZhY3Rv
cmVkIEluc3BlY3RvclJlc291cmNlLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzZXRTY3JpcHRPYmplY3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpwcnVuZVJlc291cmNlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZVJlc291cmNlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVD
b250ZW50TGVuZ3RoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGluZyk6IERpdHRvLAorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBv
cnRlZCk6IERpdHRvLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
IFJlbW92ZWQgSW5zcGVjdG9yUmVzb3VyY2UtbWFuYWdpbmcgY29kZSBkZWNscworICAgICAgICAg
ICAgYW5kIHR3ZWFrZWQgc29tZSBzaWduYXR1cmVzIHRvIHVzZSBTY3JpcHRTdHJpbmcgYW5kIGxv
bmcgbG9uZyBmb3IgaWRlbnRpZmllci4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5pZGw6IENoYW5nZWQgdG8gdXNlIGxvbmcgbG9uZyBmb3IgaWRlbnRpZmllci4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwOiBSZWZhY3RvcmVkIHRvIHVz
ZSBTY3JpcHRPYmplY3QvRnVuY3Rpb25DYWxsLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVzb3VyY2U6Okluc3BlY3RvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXNvdXJjZTo6fkluc3BlY3RvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlQ2FjaGVkKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6dXBkYXRlUmVxdWVzdCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIZWFkZXJzT2JqZWN0KTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlU2NyaXB0T2JqZWN0KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6dXBkYXRlU2NyaXB0T2JqZWN0
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6cmVsZWFzZVNj
cmlwdE9iamVjdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6
OnR5cGUpOiBUd2Vha2VkIHRvIHVzZSBTY3JpcHRTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXNvdXJjZTo6c2V0WE1MSHR0cFJlc3BvbnNlVGV4dCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnNvdXJjZVN0cmluZyk6IFR3ZWFrZWQgdG8g
dXNlIFNjcmlwdFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpz
dGFydFRpbWluZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6
Om1hcmtSZXNwb25zZVJlY2VpdmVkVGltZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2U6OmVuZFRpbWluZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2U6Om1hcmtGYWlsZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlc291cmNlOjphZGRMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2UuaDogQWRkZWQgZGVjbHMgZm9yIG5ld2x5IHJlZmFjdG9yZWQtaW4g
bWV0aG9kcy4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjppc1NhbWVMb2FkZXIp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjptYXJrTWFpblJl
c291cmNlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6aWRl
bnRpZmllcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnJl
cXVlc3RVUkwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpm
cmFtZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6Om1pbWVU
eXBlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6Q2hhbmdl
czo6Q2hhbmdlcyk6IEFkZGVkIG5ldyBjbGFzcyB0byB0cmFjaworICAgICAgICAgICAgcmVzb3Vy
Y2UgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpDaGFuZ2Vz
OjpoYXNDaGFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNl
OjpDaGFuZ2VzOjpzZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291
cmNlOjpDaGFuZ2VzOjpjbGVhcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVzb3VyY2U6OkNoYW5nZXM6OnNldEFsbCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2U6OkNoYW5nZXM6OmNsZWFyQWxsKTogQWRkZWQuCisKIDIwMDktMDMtMzEg
IFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAppbmRleCA3OWM2OWM4Li5kZTY1ZWU1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3Bw
CkBAIC0xMDQsMTEgKzEwNCwxMiBAQCBKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29ucwogICAgIGlmIChh
cmdzLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgYm9v
bCBvayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBhcmdzLmF0KGV4ZWMsIDAp
LnRvVUludDMyKGV4ZWMsIG9rKTsKLSAgICBpZiAoIW9rKQorICAgIGRvdWJsZSBudW1iZXI7Cisg
ICAgaWYgKCFhcmdzLmF0KGV4ZWMsIDApLmdldE51bWJlcihudW1iZXIpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAorICAgIGxvbmcgbG9uZyBpZGVudGlmaWVyID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPiAobnVtYmVyKTsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4g
cmVzb3VyY2UgPSBpbXBsKCktPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKICAgICBBU1NF
UlQocmVzb3VyY2UpOwogICAgIGlmICghcmVzb3VyY2UpCkBAIC0xMTgsNyArMTE5LDcgQEAgSlNW
YWx1ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFkZFJlc291cmNlU291cmNlVG9GcmFtZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICBpZiAoc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNCb29sZWFuKGltcGwo
KS0+YWRkU291cmNlVG9GcmFtZShyZXNvdXJjZS0+bWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9O
b2RlKGFyZ3MuYXQoZXhlYywgMSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFk
ZFNvdXJjZVRvRnJhbWUocmVzb3VyY2UtPm1pbWVUeXBlKCksIHNvdXJjZVN0cmluZywgdG9Ob2Rl
KGFyZ3MuYXQoZXhlYywgMSkpKSk7CiB9CiAKIEpTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRTb3VyY2VUb0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKQEAgLTE1MiwxNCArMTUzLDEzIEBAIEpTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0CiAgICAgaWYg
KCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBGcmFtZSog
ZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUuZ2V0KCk7CisgICAgRnJhbWUqIGZyYW1lID0gcmVzb3Vy
Y2UtPmZyYW1lKCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7
CiAKICAgICBpZiAoZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSB8fCBkb2N1bWVudC0+aXNJ
bWFnZURvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIC8vIEZJWE1FOiBJIGFtIG5vdCBzdXJlIGlmIHRo
aXMgaXMgYWN0dWFsbHkgbmVlZGVkLiBDYW4gd2UganVzdCB1c2UgZXhlYz8KLSAgICBFeGVjU3Rh
dGUqIHJlc291cmNlRXhlYyA9IHRvSlNET01XaW5kb3dTaGVsbChyZXNvdXJjZS0+ZnJhbWUuZ2V0
KCkpLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogcmVzb3VyY2VFeGVj
ID0gdG9KU0RPTVdpbmRvd1NoZWxsKGZyYW1lKS0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKIAog
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFw
cGVyOjp3cmFwKHJlc291cmNlRXhlYywgdG9KUyhyZXNvdXJjZUV4ZWMsIGRvY3VtZW50KSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXggNWQ5MjhjMS4u
OTRhZDIzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcApA
QCAtNjgsNiArNjgsMTIgQEAgdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50
KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAordm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVu
ZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7
CisgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhlYywgYXJndW1lbnQpKTsKK30K
Kwogdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBh
cmd1bWVudCkKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaAppbmRleCAwYjAxNzE3Li41MGRjNzYxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmlu
ZyYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVlJik7CiAg
ICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZvaWQg
YXBwZW5kQXJndW1lbnQobG9uZyBsb25nKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1
bnNpZ25lZCBpbnQpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGJvb2wpOwogICAgICAg
ICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdE9iamVjdC5jcHAKaW5kZXggMTQ4ZGFjNS4uNjAxOThlZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0LmNwcApAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNCArNDQsNzEgQEAgU2NyaXB0T2JqZWN0OjpTY3Jp
cHRPYmplY3QoSlNPYmplY3QqIG9iamVjdCkKIHsKIH0KIAorc3RhdGljIEpTVmFsdWVQdHIgY3Jl
YXRlRW1wdHlPYmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQoreworICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qoc2NyaXB0U3RhdGUp
OworfQorCitTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUpCisgICAgOiBTY3JpcHRWYWx1ZShjcmVhdGVFbXB0eU9iamVjdChzY3JpcHRTdGF0ZSkpCit7
Cit9CisKK2Jvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgSlNMb2NrIGxv
Y2soZmFsc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OworICAgIGpzT2JqZWN0KCktPnB1
dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzU3RyaW5nKHNj
cmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOworICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpOworfQorCitib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK3sK
KyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CisgICAg
anNPYmplY3QoKS0+cHV0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1l
KSwgdmFsdWUuanNPYmplY3QoKSwgc2xvdCk7CisgICAgcmV0dXJuICFzY3JpcHRTdGF0ZS0+aGFk
RXhjZXB0aW9uKCk7Cit9CisKK2Jvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBqc09i
amVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCBq
c1N0cmluZyhzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsKKyAgICByZXR1cm4gIXNjcmlwdFN0
YXRlLT5oYWRFeGNlcHRpb24oKTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CisgICAganNP
YmplY3QoKS0+cHV0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwg
anNOdW1iZXIoc2NyaXB0U3RhdGUsIHZhbHVlKSwgc2xvdCk7CisgICAgcmV0dXJuICFzY3JpcHRT
dGF0ZS0+aGFkRXhjZXB0aW9uKCk7Cit9CisKK2Jvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBsb25nIGxvbmcgdmFsdWUpCit7
CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OworICAg
IGpzT2JqZWN0KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFt
ZSksIGpzTnVtYmVyKHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOworICAgIHJldHVybiAhc2Ny
aXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOworfQorCitib29sIFNjcmlwdE9iamVjdDo6c2V0KFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQorewor
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBq
c09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUp
LCBqc051bWJlcihzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsKKyAgICByZXR1cm4gIXNjcmlw
dFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7Cisg
ICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OworICAgIGpz
T2JqZWN0KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSks
IGpzQm9vbGVhbih2YWx1ZSksIHNsb3QpOworICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRPYmplY3QuaAppbmRleCAwOGZhMzIzLi41ZDE1ZmYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgU2NyaXB0T2JqZWN0X2gKICNkZWZp
bmUgU2NyaXB0T2JqZWN0X2gKIAorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KQEAgLTQxLDgg
KzQyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRPYmplY3QgOiBw
dWJsaWMgU2NyaXB0VmFsdWUgewogICAgIHB1YmxpYzoKICAgICAgICAgU2NyaXB0T2JqZWN0KEpT
Qzo6SlNPYmplY3QqKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKik7CiAgICAg
ICAgIFNjcmlwdE9iamVjdCgpIHt9CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gYXNPYmplY3QoanNWYWx1ZSgpKTsgfQorCisgICAgICAgIGJvb2wgc2V0
KFNjcmlwdFN0YXRlKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsKKyAgICAg
ICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRP
YmplY3QmKTsKKyAgICAgICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBj
aGFyKiBuYW1lLCBkb3VibGUpOworICAgICAgICBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0
IGNoYXIqIG5hbWUsIGxvbmcgbG9uZyk7CisgICAgICAgIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwg
Y29uc3QgY2hhciogbmFtZSwgaW50KTsKKyAgICAgICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBj
b25zdCBjaGFyKiBuYW1lLCBib29sKTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGFlNTA3NjkuLjdhYjk1MDYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC04NzIsMzAxICs4NzMsNiBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcigpCiAgICAgICAgIGNhbGxTaW1wbGVGdW5jdGlv
bihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAicHJvZmlsZXJXYXNEaXNhYmxlZCIp
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRIZWFkZXJzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBvYmplY3QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIEFT
U0VSVF9BUkcob2JqZWN0LCBvYmplY3QpOwotCi0gICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKLSAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzU3RyaW5n
UmVmKGl0LT5zZWNvbmQpLmdldCgpKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCBvYmplY3QsIGpzU3RyaW5nUmVmKChpdC0+Zmlyc3QpLnN0cmluZygpKS5nZXQoKSwgdmFs
dWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4
Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQot
c3RhdGljIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdEZvclJlcXVlc3QoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7Ci0KLSAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgMCwgMCk7Ci0gICAgYWRkSGVh
ZGVycyhjb250ZXh0LCBvYmplY3QsIHJlc291cmNlLT5yZXF1ZXN0SGVhZGVyRmllbGRzLCBleGNl
cHRpb24pOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIEpTT2JqZWN0UmVmIHNj
cmlwdE9iamVjdEZvclJlc3BvbnNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBJbnNwZWN0
b3JSZXNvdXJjZSogcmVzb3VyY2UsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NF
UlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotCi0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNP
YmplY3RNYWtlKGNvbnRleHQsIDAsIDApOwotICAgIGFkZEhlYWRlcnMoY29udGV4dCwgb2JqZWN0
LCByZXNvdXJjZS0+cmVzcG9uc2VIZWFkZXJGaWVsZHMsIGV4Y2VwdGlvbik7Ci0KLSAgICByZXR1
cm4gb2JqZWN0OwotfQotCi1KU09iamVjdFJlZiBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3Jp
cHRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX0FS
RyhyZXNvdXJjZSwgcmVzb3VyY2UpOwotCi0gICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7Ci0g
ICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsKLSAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAh
bV9zY3JpcHRPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFyZXNvdXJjZS0+
c2NyaXB0T2JqZWN0KSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLQotICAg
ICAgICBKU1ZhbHVlUmVmIHJlc291cmNlUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KG1f
c2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJSZXNvdXJjZSIpLmdl
dCgpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9zY3JpcHRD
b250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgSlNP
YmplY3RSZWYgcmVzb3VyY2VDb25zdHJ1Y3RvciA9IEpTVmFsdWVUb09iamVjdChtX3NjcmlwdENv
bnRleHQsIHJlc291cmNlUHJvcGVydHksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoSEFORExF
X0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLQotICAgICAgICBKU1ZhbHVlUmVmIHVybFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmco
bV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+cmVxdWVzdFVSTC5zdHJpbmco
KSkuZ2V0KCkpOwotICAgICAgICBKU1ZhbHVlUmVmIGRvbWFpblZhbHVlID0gSlNWYWx1ZU1ha2VT
dHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+cmVxdWVzdFVSTC5o
b3N0KCkpLmdldCgpKTsKLSAgICAgICAgSlNWYWx1ZVJlZiBwYXRoVmFsdWUgPSBKU1ZhbHVlTWFr
ZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHJlc291cmNlLT5yZXF1ZXN0VVJM
LnBhdGgoKSkuZ2V0KCkpOwotICAgICAgICBKU1ZhbHVlUmVmIGxhc3RQYXRoQ29tcG9uZW50VmFs
dWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHJlc291
cmNlLT5yZXF1ZXN0VVJMLmxhc3RQYXRoQ29tcG9uZW50KCkpLmdldCgpKTsKLQotICAgICAgICBK
U1ZhbHVlUmVmIGlkZW50aWZpZXIgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3NjcmlwdENvbnRleHQs
IHJlc291cmNlLT5pZGVudGlmaWVyKTsKLSAgICAgICAgSlNWYWx1ZVJlZiBtYWluUmVzb3VyY2Ug
PSBKU1ZhbHVlTWFrZUJvb2xlYW4obV9zY3JpcHRDb250ZXh0LCBtX21haW5SZXNvdXJjZSA9PSBy
ZXNvdXJjZSk7Ci0gICAgICAgIEpTVmFsdWVSZWYgY2FjaGVkID0gSlNWYWx1ZU1ha2VCb29sZWFu
KG1fc2NyaXB0Q29udGV4dCwgcmVzb3VyY2UtPmNhY2hlZCk7Ci0KLSAgICAgICAgSlNPYmplY3RS
ZWYgc2NyaXB0T2JqZWN0ID0gc2NyaXB0T2JqZWN0Rm9yUmVxdWVzdChtX3NjcmlwdENvbnRleHQs
IHJlc291cmNlLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9z
Y3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgc2NyaXB0T2JqZWN0LCB1cmxWYWx1ZSwgZG9t
YWluVmFsdWUsIHBhdGhWYWx1ZSwgbGFzdFBhdGhDb21wb25lbnRWYWx1ZSwgaWRlbnRpZmllciwg
bWFpblJlc291cmNlLCBjYWNoZWQgfTsKLSAgICAgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3RvcihtX3NjcmlwdENvbnRleHQsIHJlc291cmNlQ29uc3RydWN0
b3IsIDgsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChIQU5ETEVfRVhDRVBU
SU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgICAgIHJlc291cmNlLT5zZXRTY3JpcHRP
YmplY3QobV9zY3JpcHRDb250ZXh0LCByZXN1bHQpOwotICAgIH0KLQotICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKLSAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3Njcmlw
dE9iamVjdCwgImFkZFJlc291cmNlIiwgMSwgJnJlc291cmNlLT5zY3JpcHRPYmplY3QsIGV4Y2Vw
dGlvbik7Ci0KLSAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiByZXNvdXJjZS0+c2NyaXB0T2JqZWN0OwotfQotCi1KU09iamVjdFJlZiBJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRBbmRVcGRhdGVTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSog
cmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX0FSRyhyZXNvdXJjZSwgcmVzb3VyY2UpOwotCi0gICAg
SlNPYmplY3RSZWYgc2NyaXB0UmVzb3VyY2UgPSBhZGRTY3JpcHRSZXNvdXJjZShyZXNvdXJjZSk7
Ci0gICAgaWYgKCFzY3JpcHRSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1cGRh
dGVTY3JpcHRSZXNvdXJjZVJlc3BvbnNlKHJlc291cmNlKTsKLSAgICB1cGRhdGVTY3JpcHRSZXNv
dXJjZShyZXNvdXJjZSwgcmVzb3VyY2UtPmxlbmd0aCk7Ci0gICAgdXBkYXRlU2NyaXB0UmVzb3Vy
Y2UocmVzb3VyY2UsIHJlc291cmNlLT5zdGFydFRpbWUsIHJlc291cmNlLT5yZXNwb25zZVJlY2Vp
dmVkVGltZSwgcmVzb3VyY2UtPmVuZFRpbWUpOwotICAgIHVwZGF0ZVNjcmlwdFJlc291cmNlKHJl
c291cmNlLCByZXNvdXJjZS0+ZmluaXNoZWQsIHJlc291cmNlLT5mYWlsZWQpOwotICAgIHJldHVy
biBzY3JpcHRSZXNvdXJjZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVT
Y3JpcHRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJU
KG1fc2NyaXB0Q29udGV4dCk7Ci0gICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsKLSAgICBpZiAo
IW1fc2NyaXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmplY3QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgQVNTRVJUKHJlc291cmNlLT5zY3JpcHRPYmplY3Qp
OwotICAgIGlmICghcmVzb3VyY2UgfHwgIXJlc291cmNlLT5zY3JpcHRPYmplY3QpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdCA9IHJlc291cmNlLT5zY3Jp
cHRPYmplY3Q7Ci0gICAgcmVzb3VyY2UtPnNldFNjcmlwdE9iamVjdCgwLCAwKTsKLQotICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0
LCBtX3NjcmlwdE9iamVjdCwgInJlbW92ZVJlc291cmNlIiwgMSwgJnNjcmlwdE9iamVjdCwgZXhj
ZXB0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KEluc3BlY3Rv
clJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewot
ICAgIHJlc291cmNlLT5yZXF1ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCk7Ci0gICAgcmVzb3VyY2UtPnJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOwotfQotCi1z
dGF0aWMgdm9pZCB1cGRhdGVSZXNvdXJjZVJlc3BvbnNlKEluc3BlY3RvclJlc291cmNlKiByZXNv
dXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgcmVzb3VyY2Ut
PmV4cGVjdGVkQ29udGVudExlbmd0aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgp
OwotICAgIHJlc291cmNlLT5taW1lVHlwZSA9IHJlc3BvbnNlLm1pbWVUeXBlKCk7Ci0gICAgcmVz
b3VyY2UtPnJlc3BvbnNlSGVhZGVyRmllbGRzID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
OwotICAgIHJlc291cmNlLT5yZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpOwotICAgIHJlc291cmNlLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHJlc3BvbnNlLnN1Z2dl
c3RlZEZpbGVuYW1lKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dXBkYXRlU2Ny
aXB0UmVzb3VyY2VSZXF1ZXN0KEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBB
U1NFUlQocmVzb3VyY2UtPnNjcmlwdE9iamVjdCk7Ci0gICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4
dCk7Ci0gICAgaWYgKCFyZXNvdXJjZS0+c2NyaXB0T2JqZWN0IHx8ICFtX3NjcmlwdENvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEpTVmFsdWVSZWYgdXJsVmFsdWUgPSBKU1ZhbHVlTWFr
ZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHJlc291cmNlLT5yZXF1ZXN0VVJM
LnN0cmluZygpKS5nZXQoKSk7Ci0gICAgSlNWYWx1ZVJlZiBkb21haW5WYWx1ZSA9IEpTVmFsdWVN
YWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYocmVzb3VyY2UtPnJlcXVlc3RV
UkwuaG9zdCgpKS5nZXQoKSk7Ci0gICAgSlNWYWx1ZVJlZiBwYXRoVmFsdWUgPSBKU1ZhbHVlTWFr
ZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHJlc291cmNlLT5yZXF1ZXN0VVJM
LnBhdGgoKSkuZ2V0KCkpOwotICAgIEpTVmFsdWVSZWYgbGFzdFBhdGhDb21wb25lbnRWYWx1ZSA9
IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYocmVzb3VyY2Ut
PnJlcXVlc3RVUkwubGFzdFBhdGhDb21wb25lbnQoKSkuZ2V0KCkpOwotCi0gICAgSlNWYWx1ZVJl
ZiBtYWluUmVzb3VyY2VWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihtX3NjcmlwdENvbnRleHQs
IG1fbWFpblJlc291cmNlID09IHJlc291cmNlKTsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCByZXNvdXJj
ZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigidXJsIikuZ2V0KCksIHVybFZhbHVlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBU
SU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNPYmplY3RTZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT5zY3JpcHRPYmpl
Y3QsIGpzU3RyaW5nUmVmKCJkb21haW4iKS5nZXQoKSwgZG9tYWluVmFsdWUsIGtKU1Byb3BlcnR5
QXR0cmlidXRlTm9uZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9z
Y3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVj
dFNldFByb3BlcnR5KG1fc2NyaXB0Q29udGV4dCwgcmVzb3VyY2UtPnNjcmlwdE9iamVjdCwganNT
dHJpbmdSZWYoInBhdGgiKS5nZXQoKSwgcGF0aFZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5v
bmUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4
dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT5zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJs
YXN0UGF0aENvbXBvbmVudCIpLmdldCgpLCBsYXN0UGF0aENvbXBvbmVudFZhbHVlLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9O
KG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNP
YmplY3RSZWYgc2NyaXB0T2JqZWN0ID0gc2NyaXB0T2JqZWN0Rm9yUmVxdWVzdChtX3NjcmlwdENv
bnRleHQsIHJlc291cmNlLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElPTiht
X3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2Jq
ZWN0U2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBq
c1N0cmluZ1JlZigicmVxdWVzdEhlYWRlcnMiKS5nZXQoKSwgc2NyaXB0T2JqZWN0LCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9O
KG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNP
YmplY3RTZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT5zY3JpcHRPYmplY3Qs
IGpzU3RyaW5nUmVmKCJtYWluUmVzb3VyY2UiKS5nZXQoKSwgbWFpblJlc291cmNlVmFsdWUsIGtK
U1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgJmV4Y2VwdGlvbik7Ci0gICAgSEFORExFX0VYQ0VQVElP
TihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6dXBkYXRlU2NyaXB0UmVzb3VyY2VSZXNwb25zZShJbnNwZWN0b3JSZXNvdXJjZSogcmVz
b3VyY2UpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlLT5zY3JpcHRPYmplY3QpOwotICAgIEFTU0VS
VChtX3NjcmlwdENvbnRleHQpOwotICAgIGlmICghcmVzb3VyY2UtPnNjcmlwdE9iamVjdCB8fCAh
bV9zY3JpcHRDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU1ZhbHVlUmVmIG1pbWVU
eXBlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVm
KHJlc291cmNlLT5taW1lVHlwZSkuZ2V0KCkpOwotCi0gICAgSlNWYWx1ZVJlZiBzdWdnZXN0ZWRG
aWxlbmFtZVZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmlu
Z1JlZihyZXNvdXJjZS0+c3VnZ2VzdGVkRmlsZW5hbWUpLmdldCgpKTsKLQotICAgIEpTVmFsdWVS
ZWYgZXhwZWN0ZWRDb250ZW50TGVuZ3RoVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3Njcmlw
dENvbnRleHQsIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzb3VyY2UtPmV4cGVjdGVkQ29udGVudExl
bmd0aCkpOwotICAgIEpTVmFsdWVSZWYgc3RhdHVzQ29kZVZhbHVlID0gSlNWYWx1ZU1ha2VOdW1i
ZXIobV9zY3JpcHRDb250ZXh0LCByZXNvdXJjZS0+cmVzcG9uc2VTdGF0dXNDb2RlKTsKLQotICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9z
Y3JpcHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigibWltZVR5
cGUiKS5nZXQoKSwgbWltZVR5cGVWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhj
ZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2Vw
dGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3Jp
cHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigic3VnZ2VzdGVk
RmlsZW5hbWUiKS5nZXQoKSwgc3VnZ2VzdGVkRmlsZW5hbWVWYWx1ZSwga0pTUHJvcGVydHlBdHRy
aWJ1dGVOb25lLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3Njcmlw
dENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmlu
Z1JlZigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIikuZ2V0KCksIGV4cGVjdGVkQ29udGVudExlbmd0
aFZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwotICAgIGlmIChI
QU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNl
LT5zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJzdGF0dXNDb2RlIikuZ2V0KCksIHN0YXR1c0Nv
ZGVWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAo
SEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdCA9IHNjcmlwdE9iamVjdEZvclJl
c3BvbnNlKG1fc2NyaXB0Q29udGV4dCwgcmVzb3VyY2UsICZleGNlcHRpb24pOwotICAgIGlmIChI
QU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNl
LT5zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJyZXNwb25zZUhlYWRlcnMiKS5nZXQoKSwgc2Ny
aXB0T2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwotICAgIGlm
IChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdXBkYXRlU2NyaXB0UmVzb3VyY2VUeXBlKHJlc291cmNlKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1cGRhdGVTY3JpcHRSZXNvdXJjZVR5cGUoSW5zcGVj
dG9yUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIEFTU0VSVChyZXNvdXJjZS0+c2NyaXB0T2Jq
ZWN0KTsKLSAgICBBU1NFUlQobV9zY3JpcHRDb250ZXh0KTsKLSAgICBpZiAoIXJlc291cmNlLT5z
Y3JpcHRPYmplY3QgfHwgIW1fc2NyaXB0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgSlNWYWx1ZVJlZiB0eXBlVmFsdWUgPSBK
U1ZhbHVlTWFrZU51bWJlcihtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT50eXBlKCkpOwotICAg
IEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2Jq
ZWN0LCBqc1N0cmluZ1JlZigidHlwZSIpLmdldCgpLCB0eXBlVmFsdWUsIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSwgJmV4Y2VwdGlvbik7Ci0gICAgSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENv
bnRleHQsIGV4Y2VwdGlvbik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dXBkYXRl
U2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291cmNlLCBpbnQgbGVuZ3RoKQot
ewotICAgIEFTU0VSVChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KTsKLSAgICBBU1NFUlQobV9zY3Jp
cHRDb250ZXh0KTsKLSAgICBpZiAoIXJlc291cmNlLT5zY3JpcHRPYmplY3QgfHwgIW1fc2NyaXB0
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9
IEpTVmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgbGVuZ3RoKTsKLQotICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3JpcHRD
b250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigiY29udGVudExlbmd0
aCIpLmdldCgpLCBsZW5ndGhWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhjZXB0
aW9uKTsKLSAgICBIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1cGRhdGVTY3JpcHRSZXNvdXJjZShJbnNw
ZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgZmluaXNoZWQsIGJvb2wgZmFpbGVkKQotewot
ICAgIEFTU0VSVChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KTsKLSAgICBBU1NFUlQobV9zY3JpcHRD
b250ZXh0KTsKLSAgICBpZiAoIXJlc291cmNlLT5zY3JpcHRPYmplY3QgfHwgIW1fc2NyaXB0Q29u
dGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNWYWx1ZVJlZiBmYWlsZWRWYWx1ZSA9IEpT
VmFsdWVNYWtlQm9vbGVhbihtX3NjcmlwdENvbnRleHQsIGZhaWxlZCk7Ci0gICAgSlNWYWx1ZVJl
ZiBmaW5pc2hlZFZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKG1fc2NyaXB0Q29udGV4dCwgZmlu
aXNoZWQpOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT5zY3JpcHRPYmplY3QsIGpzU3Ry
aW5nUmVmKCJmYWlsZWQiKS5nZXQoKSwgZmFpbGVkVmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9zY3JpcHRDb250
ZXh0LCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVjdFNldFByb3Bl
cnR5KG1fc2NyaXB0Q29udGV4dCwgcmVzb3VyY2UtPnNjcmlwdE9iamVjdCwganNTdHJpbmdSZWYo
ImZpbmlzaGVkIikuZ2V0KCksIGZpbmlzaGVkVmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9u
ZSwgJmV4Y2VwdGlvbik7Ci0gICAgSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4
Y2VwdGlvbik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dXBkYXRlU2NyaXB0UmVz
b3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291cmNlLCBkb3VibGUgc3RhcnRUaW1lLCBkb3Vi
bGUgcmVzcG9uc2VSZWNlaXZlZFRpbWUsIGRvdWJsZSBlbmRUaW1lKQotewotICAgIEFTU0VSVChy
ZXNvdXJjZS0+c2NyaXB0T2JqZWN0KTsKLSAgICBBU1NFUlQobV9zY3JpcHRDb250ZXh0KTsKLSAg
ICBpZiAoIXJlc291cmNlLT5zY3JpcHRPYmplY3QgfHwgIW1fc2NyaXB0Q29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSlNWYWx1ZVJlZiBzdGFydFRpbWVWYWx1ZSA9IEpTVmFsdWVNYWtl
TnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgc3RhcnRUaW1lKTsKLSAgICBKU1ZhbHVlUmVmIHJlc3Bv
bnNlUmVjZWl2ZWRUaW1lVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3NjcmlwdENvbnRleHQs
IHJlc3BvbnNlUmVjZWl2ZWRUaW1lKTsKLSAgICBKU1ZhbHVlUmVmIGVuZFRpbWVWYWx1ZSA9IEpT
VmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgZW5kVGltZSk7Ci0KLSAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fc2NyaXB0Q29u
dGV4dCwgcmVzb3VyY2UtPnNjcmlwdE9iamVjdCwganNTdHJpbmdSZWYoInN0YXJ0VGltZSIpLmdl
dCgpLCBzdGFydFRpbWVWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhjZXB0aW9u
KTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3JpcHRDb250
ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigicmVzcG9uc2VSZWNlaXZl
ZFRpbWUiKS5nZXQoKSwgcmVzcG9uc2VSZWNlaXZlZFRpbWVWYWx1ZSwga0pTUHJvcGVydHlBdHRy
aWJ1dGVOb25lLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3Njcmlw
dENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCByZXNvdXJjZS0+c2NyaXB0T2JqZWN0LCBqc1N0cmlu
Z1JlZigiZW5kVGltZSIpLmdldCgpLCBlbmRUaW1lVmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSwgJmV4Y2VwdGlvbik7Ci0gICAgSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQs
IGV4Y2VwdGlvbik7Ci19CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKCkKIHsKQEAgLTExNzYsNyArODgyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogCiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCi0gICAgICAgIGFkZEFuZFVwZGF0ZVNjcmlwdFJlc291cmNlKGl0LT5zZWNvbmQuZ2V0
KCkpOworICAgICAgICBpdC0+c2Vjb25kLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3Njcmlw
dENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKIAogICAgIHVu
c2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCkBAIC0xMjEwLDEwICs5MTYs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0g
bV9yZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KSB7Ci0gICAgICAg
IEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAg
IHJlc291cmNlLT5zZXRTY3JpcHRPYmplY3QoMCwgMCk7Ci0gICAgfQorICAgIGZvciAoUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNl
c0VuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+cmVsZWFzZVNjcmlwdE9iamVjdCh0b0pT
KG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSksIGZh
bHNlKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc1NldDo6
aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKQEAgLTEy
NDAsMTAgKzk0NCwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBydW5lUmVzb3VyY2Vz
KFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAsIERvY3VtZW50TG9hZAogICAgICAgICBpZiAocmVz
b3VyY2UgPT0gbV9tYWluUmVzb3VyY2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBpZiAoIWxvYWRlclRvS2VlcCB8fCByZXNvdXJjZS0+bG9hZGVyICE9IGxvYWRlclRvS2VlcCkg
eworICAgICAgICBpZiAoIWxvYWRlclRvS2VlcCB8fCAhcmVzb3VyY2UtPmlzU2FtZUxvYWRlcihs
b2FkZXJUb0tlZXApKSB7CiAgICAgICAgICAgICByZW1vdmVSZXNvdXJjZShyZXNvdXJjZSk7Ci0g
ICAgICAgICAgICBpZiAod2luZG93VmlzaWJsZSgpICYmIHJlc291cmNlLT5zY3JpcHRPYmplY3Qp
Ci0gICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0UmVzb3VyY2UocmVzb3VyY2UpOworICAgICAg
ICAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVs
ZWFzZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pT
KG1fc2NyaXB0T2JqZWN0KSksIHRydWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI3NSwx
MSArOTc5LDExIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1
bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICAgICAgcmVzZXRTY3JpcHRPYmplY3RzKCk7CiAK
ICAgICAgICAgICAgIGlmICghbG9hZGVyLT5pc0xvYWRpbmdGcm9tQ2FjaGVkUGFnZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKG1fbWFpblJlc291cmNlICYmIG1fbWFpblJlc291cmNlLT5s
b2FkZXIgPT0gbG9hZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9tYWluUmVzb3VyY2Ug
JiYgbV9tYWluUmVzb3VyY2UtPmlzU2FtZUxvYWRlcihsb2FkZXIpKTsKICAgICAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBhZGQgdGhlIG1haW4gcmVzb3VyY2UgdW50aWwgaXRzIGxvYWQgaXMgY29t
bWl0dGVkLiBUaGlzIGlzCiAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIHRvIGtlZXAgdGhlIGxv
YWQgZm9yIGEgdXNlci1lbnRlcmVkIFVSTCBmcm9tIHNob3dpbmcgdXAgaW4gdGhlCiAgICAgICAg
ICAgICAgICAgLy8gbGlzdCBvZiByZXNvdXJjZXMgZm9yIHRoZSBwYWdlIHRoZXkgYXJlIG5hdmln
YXRpbmcgYXdheSBmcm9tLgotICAgICAgICAgICAgICAgIGFkZEFuZFVwZGF0ZVNjcmlwdFJlc291
cmNlKG1fbWFpblJlc291cmNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX21haW5SZXNvdXJj
ZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0
KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIFBhZ2VzIGxvYWRlZCBmcm9tIHRoZSBwYWdlIGNhY2hlIGFyZSBjb21taXR0ZWQg
YmVmb3JlCiAgICAgICAgICAgICAgICAgLy8gbV9tYWluUmVzb3VyY2UgaXMgdGhlIHJpZ2h0IHJl
c291cmNlIGZvciB0aGlzIGxvYWQsIHNvIHdlCkBAIC0xMzA1LDMzICsxMDA5LDMzIEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQoRnJhbWUqIGZyYW1l
KQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFJlc291cmNlKEluc3BlY3RvclJlc291
cmNlKiByZXNvdXJjZSkKIHsKLSAgICBtX3Jlc291cmNlcy5zZXQocmVzb3VyY2UtPmlkZW50aWZp
ZXIsIHJlc291cmNlKTsKLSAgICBtX2tub3duUmVzb3VyY2VzLmFkZChyZXNvdXJjZS0+cmVxdWVz
dFVSTC5zdHJpbmcoKSk7CisgICAgbV9yZXNvdXJjZXMuc2V0KHJlc291cmNlLT5pZGVudGlmaWVy
KCksIHJlc291cmNlKTsKKyAgICBtX2tub3duUmVzb3VyY2VzLmFkZChyZXNvdXJjZS0+cmVxdWVz
dFVSTCgpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5mcmFtZS5nZXQoKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUoKTsKICAgICBSZXNvdXJjZXNNYXAqIHJl
c291cmNlTWFwID0gbV9mcmFtZVJlc291cmNlcy5nZXQoZnJhbWUpOwogICAgIGlmIChyZXNvdXJj
ZU1hcCkKLSAgICAgICAgcmVzb3VyY2VNYXAtPnNldChyZXNvdXJjZS0+aWRlbnRpZmllciwgcmVz
b3VyY2UpOworICAgICAgICByZXNvdXJjZU1hcC0+c2V0KHJlc291cmNlLT5pZGVudGlmaWVyKCks
IHJlc291cmNlKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVzb3VyY2VNYXAgPSBuZXcgUmVzb3Vy
Y2VzTWFwOwotICAgICAgICByZXNvdXJjZU1hcC0+c2V0KHJlc291cmNlLT5pZGVudGlmaWVyLCBy
ZXNvdXJjZSk7CisgICAgICAgIHJlc291cmNlTWFwLT5zZXQocmVzb3VyY2UtPmlkZW50aWZpZXIo
KSwgcmVzb3VyY2UpOwogICAgICAgICBtX2ZyYW1lUmVzb3VyY2VzLnNldChmcmFtZSwgcmVzb3Vy
Y2VNYXApOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVSZXNv
dXJjZShJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgbV9yZXNvdXJjZXMucmVt
b3ZlKHJlc291cmNlLT5pZGVudGlmaWVyKTsKLSAgICBtX2tub3duUmVzb3VyY2VzLnJlbW92ZShy
ZXNvdXJjZS0+cmVxdWVzdFVSTC5zdHJpbmcoKSk7CisgICAgbV9yZXNvdXJjZXMucmVtb3ZlKHJl
c291cmNlLT5pZGVudGlmaWVyKCkpOworICAgIG1fa25vd25SZXNvdXJjZXMucmVtb3ZlKHJlc291
cmNlLT5yZXF1ZXN0VVJMKCkpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gcmVzb3VyY2UtPmZyYW1l
LmdldCgpOworICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5mcmFtZSgpOwogICAgIFJlc291
cmNlc01hcCogcmVzb3VyY2VNYXAgPSBtX2ZyYW1lUmVzb3VyY2VzLmdldChmcmFtZSk7CiAgICAg
aWYgKCFyZXNvdXJjZU1hcCkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlc291cmNlTWFwLT5yZW1vdmUocmVzb3VyY2UtPmlk
ZW50aWZpZXIpOworICAgIHJlc291cmNlTWFwLT5yZW1vdmUocmVzb3VyY2UtPmlkZW50aWZpZXIo
KSk7CiAgICAgaWYgKHJlc291cmNlTWFwLT5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9mcmFtZVJl
c291cmNlcy5yZW1vdmUoZnJhbWUpOwogICAgICAgICBkZWxldGUgcmVzb3VyY2VNYXA7CkBAIC0x
MzQ3LDI3ICsxMDUxLDE5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgaWYgKG1fa25v
d25SZXNvdXJjZXMuY29udGFpbnMoY2FjaGVkUmVzb3VyY2UtPnVybCgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3Rv
clJlc291cmNlOjpjcmVhdGUobV9uZXh0SWRlbnRpZmllci0tLCBsb2FkZXIsIGxvYWRlci0+ZnJh
bWUoKSk7Ci0gICAgcmVzb3VyY2UtPmZpbmlzaGVkID0gdHJ1ZTsKLQotICAgIHJlc291cmNlLT5y
ZXF1ZXN0VVJMID0gS1VSTChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpOwotICAgIHVwZGF0ZVJlc291
cmNlUmVzcG9uc2UocmVzb3VyY2UuZ2V0KCksIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpKTsK
LQotICAgIHJlc291cmNlLT5sZW5ndGggPSBjYWNoZWRSZXNvdXJjZS0+ZW5jb2RlZFNpemUoKTsK
LSAgICByZXNvdXJjZS0+Y2FjaGVkID0gdHJ1ZTsKLSAgICByZXNvdXJjZS0+c3RhcnRUaW1lID0g
Y3VycmVudFRpbWUoKTsKLSAgICByZXNvdXJjZS0+cmVzcG9uc2VSZWNlaXZlZFRpbWUgPSByZXNv
dXJjZS0+c3RhcnRUaW1lOwotICAgIHJlc291cmNlLT5lbmRUaW1lID0gcmVzb3VyY2UtPnN0YXJ0
VGltZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9y
UmVzb3VyY2U6OmNyZWF0ZUNhY2hlZChtX25leHRJZGVudGlmaWVyLS0sIGxvYWRlciwgY2FjaGVk
UmVzb3VyY2UpOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKLSAgICBpZiAobG9h
ZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkgJiYgY2FjaGVkUmVz
b3VyY2UtPnVybCgpID09IGxvYWRlci0+cmVxdWVzdFVSTCgpKQorICAgIGlmIChsb2FkZXItPmZy
YW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSAmJiBjYWNoZWRSZXNvdXJjZS0+
dXJsKCkgPT0gbG9hZGVyLT5yZXF1ZXN0VVJMKCkpIHsKICAgICAgICAgbV9tYWluUmVzb3VyY2Ug
PSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2UtPm1hcmtNYWluUmVzb3VyY2UoKTsKKyAgICB9
CiAKICAgICBhZGRSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7CiAKICAgICBpZiAod2luZG93Vmlz
aWJsZSgpKQotICAgICAgICBhZGRBbmRVcGRhdGVTY3JpcHRSZXNvdXJjZShyZXNvdXJjZS5nZXQo
KSk7CisgICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENv
bnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCkBAIC0xMzc1LDE5ICsxMDcxLDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNlOjpjcmVhdGUo
aWRlbnRpZmllciwgbG9hZGVyLCBsb2FkZXItPmZyYW1lKCkpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZp
ZXIsIGxvYWRlcik7CiAKLSAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QocmVzb3VyY2UuZ2V0KCks
IHJlcXVlc3QpOworICAgIHJlc291cmNlLT51cGRhdGVSZXF1ZXN0KHJlcXVlc3QpOwogCiAgICAg
QVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKLSAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkgJiYgcmVxdWVzdC51cmwoKSA9PSBsb2FkZXItPnJl
cXVlc3RVUkwoKSkKKyAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCkgJiYgcmVxdWVzdC51cmwoKSA9PSBsb2FkZXItPnJlcXVlc3RVUkwoKSkgewog
ICAgICAgICBtX21haW5SZXNvdXJjZSA9IHJlc291cmNlOworICAgICAgICByZXNvdXJjZS0+bWFy
a01haW5SZXNvdXJjZSgpOworICAgIH0KIAogICAgIGFkZFJlc291cmNlKHJlc291cmNlLmdldCgp
KTsKIAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkgJiYgbG9hZGVyLT5pc0xvYWRpbmdGcm9tQ2Fj
aGVkUGFnZSgpICYmIHJlc291cmNlID09IG1fbWFpblJlc291cmNlKQotICAgICAgICBhZGRBbmRV
cGRhdGVTY3JpcHRSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7CisgICAgICAgIHJlc291cmNlLT5j
cmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9K
UyhtX3NjcmlwdE9iamVjdCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxs
U2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKQEAgLTEzOTksMjQgKzEwOTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWYK
ICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXNvdXJjZS0+c3Rh
cnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICByZXNvdXJjZS0+c3RhcnRUaW1pbmcoKTsKIAog
ICAgIGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSkgewotICAgICAgICB1cGRhdGVSZXNv
dXJjZVJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QpOwotICAgICAgICB1cGRhdGVSZXNvdXJjZVJl
c3BvbnNlKHJlc291cmNlLCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgcmVzb3VyY2UtPnVw
ZGF0ZVJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgIHJlc291cmNlLT51cGRhdGVSZXNwb25zZShy
ZWRpcmVjdFJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBpZiAocmVzb3VyY2UgIT0gbV9tYWluUmVz
b3VyY2UgJiYgd2luZG93VmlzaWJsZSgpKSB7Ci0gICAgICAgIGlmICghcmVzb3VyY2UtPnNjcmlw
dE9iamVjdCkKLSAgICAgICAgICAgIGFkZFNjcmlwdFJlc291cmNlKHJlc291cmNlKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdXBkYXRlU2NyaXB0UmVzb3VyY2VSZXF1ZXN0KHJlc291cmNl
KTsKLQotICAgICAgICB1cGRhdGVTY3JpcHRSZXNvdXJjZShyZXNvdXJjZSwgcmVzb3VyY2UtPnN0
YXJ0VGltZSwgcmVzb3VyY2UtPnJlc3BvbnNlUmVjZWl2ZWRUaW1lLCByZXNvdXJjZS0+ZW5kVGlt
ZSk7Ci0KLSAgICAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgdXBkYXRlU2NyaXB0UmVzb3VyY2VSZXNwb25zZShyZXNvdXJjZSk7Ci0gICAgfQorICAgIGlm
IChyZXNvdXJjZSAhPSBtX21haW5SZXNvdXJjZSAmJiB3aW5kb3dWaXNpYmxlKCkpCisgICAgICAg
IHJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3Jp
cHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTQyOCwx
NCArMTExNywxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbgogICAgIGlmICghcmVzb3VyY2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVJlc291cmNlUmVzcG9uc2UocmVzb3VyY2Us
IHJlc3BvbnNlKTsKLQotICAgIHJlc291cmNlLT5yZXNwb25zZVJlY2VpdmVkVGltZSA9IGN1cnJl
bnRUaW1lKCk7CisgICAgcmVzb3VyY2UtPnVwZGF0ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBy
ZXNvdXJjZS0+bWFya1Jlc3BvbnNlUmVjZWl2ZWRUaW1lKCk7CiAKLSAgICBpZiAod2luZG93Vmlz
aWJsZSgpICYmIHJlc291cmNlLT5zY3JpcHRPYmplY3QpIHsKLSAgICAgICAgdXBkYXRlU2NyaXB0
UmVzb3VyY2VSZXNwb25zZShyZXNvdXJjZSk7Ci0gICAgICAgIHVwZGF0ZVNjcmlwdFJlc291cmNl
KHJlc291cmNlLCByZXNvdXJjZS0+c3RhcnRUaW1lLCByZXNvdXJjZS0+cmVzcG9uc2VSZWNlaXZl
ZFRpbWUsIHJlc291cmNlLT5lbmRUaW1lKTsKLSAgICB9CisgICAgaWYgKHdpbmRvd1Zpc2libGUo
KSkKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29u
dGV4dCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVu
Z3RoUmVjZWl2ZWQpCkBAIC0xNDQ3LDEwICsxMTMzLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nCiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVzb3VyY2Ut
Pmxlbmd0aCArPSBsZW5ndGhSZWNlaXZlZDsKKyAgICByZXNvdXJjZS0+YWRkTGVuZ3RoKGxlbmd0
aFJlY2VpdmVkKTsKIAotICAgIGlmICh3aW5kb3dWaXNpYmxlKCkgJiYgcmVzb3VyY2UtPnNjcmlw
dE9iamVjdCkKLSAgICAgICAgdXBkYXRlU2NyaXB0UmVzb3VyY2UocmVzb3VyY2UsIHJlc291cmNl
LT5sZW5ndGgpOworICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCisgICAgICAgIHJlc291cmNlLT51
cGRhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQpAQCAtMTQ2NCwxNSArMTE1MCwxMiBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aQogCiAgICAgcmVtb3ZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCi0gICAg
cmVzb3VyY2UtPmZpbmlzaGVkID0gdHJ1ZTsKLSAgICByZXNvdXJjZS0+ZW5kVGltZSA9IGN1cnJl
bnRUaW1lKCk7CisgICAgcmVzb3VyY2UtPmVuZFRpbWluZygpOwogCiAgICAgYWRkUmVzb3VyY2Uo
cmVzb3VyY2UuZ2V0KCkpOwogCi0gICAgaWYgKHdpbmRvd1Zpc2libGUoKSAmJiByZXNvdXJjZS0+
c2NyaXB0T2JqZWN0KSB7Ci0gICAgICAgIHVwZGF0ZVNjcmlwdFJlc291cmNlKHJlc291cmNlLmdl
dCgpLCByZXNvdXJjZS0+c3RhcnRUaW1lLCByZXNvdXJjZS0+cmVzcG9uc2VSZWNlaXZlZFRpbWUs
IHJlc291cmNlLT5lbmRUaW1lKTsKLSAgICAgICAgdXBkYXRlU2NyaXB0UmVzb3VyY2UocmVzb3Vy
Y2UuZ2V0KCksIHJlc291cmNlLT5maW5pc2hlZCk7Ci0gICAgfQorICAgIGlmICh3aW5kb3dWaXNp
YmxlKCkpCisgICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QodG9KUyhtX3Njcmlw
dENvbnRleHQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGlu
ZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgLyplcnJvciovKQpAQCAtMTQ4NiwxOSArMTE2OSwxNiBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaQogCiAgICAgcmVtb3ZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCi0gICAg
cmVzb3VyY2UtPmZpbmlzaGVkID0gdHJ1ZTsKLSAgICByZXNvdXJjZS0+ZmFpbGVkID0gdHJ1ZTsK
LSAgICByZXNvdXJjZS0+ZW5kVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmVzb3VyY2UtPm1h
cmtGYWlsZWQoKTsKKyAgICByZXNvdXJjZS0+ZW5kVGltaW5nKCk7CiAKICAgICBhZGRSZXNvdXJj
ZShyZXNvdXJjZS5nZXQoKSk7CiAKLSAgICBpZiAod2luZG93VmlzaWJsZSgpICYmIHJlc291cmNl
LT5zY3JpcHRPYmplY3QpIHsKLSAgICAgICAgdXBkYXRlU2NyaXB0UmVzb3VyY2UocmVzb3VyY2Uu
Z2V0KCksIHJlc291cmNlLT5zdGFydFRpbWUsIHJlc291cmNlLT5yZXNwb25zZVJlY2VpdmVkVGlt
ZSwgcmVzb3VyY2UtPmVuZFRpbWUpOwotICAgICAgICB1cGRhdGVTY3JpcHRSZXNvdXJjZShyZXNv
dXJjZS5nZXQoKSwgcmVzb3VyY2UtPmZpbmlzaGVkLCByZXNvdXJjZS0+ZmFpbGVkKTsKLSAgICB9
CisgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlw
dE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlU3RyaW5nKQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKICAg
ICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUwNywxMyArMTE4NywxMyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHJlc291cmNlLT5zZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMoc291cmNl
U3RyaW5nKTsKKyAgICByZXNvdXJjZS0+c2V0WE1MSHR0cFJlc3BvbnNlVGV4dChzb3VyY2VTdHJp
bmcpOwogCi0gICAgaWYgKHdpbmRvd1Zpc2libGUoKSAmJiByZXNvdXJjZS0+c2NyaXB0T2JqZWN0
KQotICAgICAgICB1cGRhdGVTY3JpcHRSZXNvdXJjZVR5cGUocmVzb3VyY2UpOworICAgIGlmICh3
aW5kb3dWaXNpYmxlKCkpCisgICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QodG9K
UyhtX3NjcmlwdENvbnRleHQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3Jp
cHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYg
c291cmNlU3RyaW5nKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewog
ICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTIyLDEwICsxMjAyLDEy
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBKU0M6OlVTCiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIHJlc291cmNlLT5zZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMo
c291cmNlU3RyaW5nKTsKKyAgICAvLyBGSVhNRTogaW1wb3J0ZWQgc2NyaXB0IGFuZCBYSFIgcmVz
cG9uc2UgYXJlIGN1cnJlbnRseSB2aWV3ZWQgYXMgdGhlIHNhbWUKKyAgICAvLyB0aGluZyBieSB0
aGUgSW5zcGVjdG9yLiBUaGV5IHNob3VsZCBiZSBtYWRlIGludG8gZGlzdGluY3QgdHlwZXMuCisg
ICAgcmVzb3VyY2UtPnNldFhNTEh0dHBSZXNwb25zZVRleHQoU2NyaXB0U3RyaW5nKHNvdXJjZVN0
cmluZykpOwogICAgIAotICAgIGlmICh3aW5kb3dWaXNpYmxlKCkgJiYgcmVzb3VyY2UtPnNjcmlw
dE9iamVjdCkKLSAgICAgICAgdXBkYXRlU2NyaXB0UmVzb3VyY2VUeXBlKHJlc291cmNlKTsKKyAg
ICBpZiAod2luZG93VmlzaWJsZSgpKQorICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCmluZGV4IDk2YjVlNmYuLmYzNThiM2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY1LDYgKzY1LDcgQEAgc3RydWN0IFJlc291cmNl
UmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwog
Y2xhc3MgU2NyaXB0Q2FsbFN0YWNrOworY2xhc3MgU2NyaXB0U3RyaW5nOwogY2xhc3MgU2hhcmVk
QnVmZmVyOwogCiBjbGFzcyBDb25zb2xlTWVzc2FnZTsKQEAgLTIxNCw4ICsyMTUsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
OwogICAgIHZvaWQgZGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpT
Qzo6VVN0cmluZyYgc291cmNlU3RyaW5nKTsKLSAgICB2b2lkIHNjcmlwdEltcG9ydGVkKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwor
ICAgIHZvaWQgcmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgU2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHZvaWQg
c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVN0cmluZyk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9pZCBkaWRPcGVuRGF0
YWJhc2UoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwpAQCAtMjcxLDE3ICsyNzIsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgYWRkUmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKICAgICB2b2lkIHJlbW92
ZVJlc291cmNlKEluc3BlY3RvclJlc291cmNlKik7CiAKLSAgICBKU09iamVjdFJlZiBhZGRTY3Jp
cHRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSopOwotICAgIHZvaWQgcmVtb3ZlU2NyaXB0UmVz
b3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKLQotICAgIEpTT2JqZWN0UmVmIGFkZEFuZFVwZGF0
ZVNjcmlwdFJlc291cmNlKEluc3BlY3RvclJlc291cmNlKik7Ci0gICAgdm9pZCB1cGRhdGVTY3Jp
cHRSZXNvdXJjZVJlcXVlc3QoSW5zcGVjdG9yUmVzb3VyY2UqKTsKLSAgICB2b2lkIHVwZGF0ZVNj
cmlwdFJlc291cmNlUmVzcG9uc2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKLSAgICB2b2lkIHVwZGF0
ZVNjcmlwdFJlc291cmNlVHlwZShJbnNwZWN0b3JSZXNvdXJjZSopOwotICAgIHZvaWQgdXBkYXRl
U2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lk
IHVwZGF0ZVNjcmlwdFJlc291cmNlKEluc3BlY3RvclJlc291cmNlKiwgYm9vbCBmaW5pc2hlZCwg
Ym9vbCBmYWlsZWQgPSBmYWxzZSk7Ci0gICAgdm9pZCB1cGRhdGVTY3JpcHRSZXNvdXJjZShJbnNw
ZWN0b3JSZXNvdXJjZSosIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSByZXNwb25zZVJlY2VpdmVk
VGltZSwgZG91YmxlIGVuZFRpbWUpOwotCiAgICAgdm9pZCBwcnVuZVJlc291cmNlcyhSZXNvdXJj
ZXNNYXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVyVG9LZWVwID0gMCk7CiAgICAgdm9pZCByZW1v
dmVBbGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBtYXApIHsgcHJ1bmVSZXNvdXJjZXMobWFwKTsg
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaWRsCmluZGV4IDBjYjgw
NDEuLmY2YWU2YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaWRs
CkBAIC02NCw5ICs2NCw5IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0ltcGxlbWVudGF0aW9u
RnVuY3Rpb249d2luZG93VmlzaWJsZV0gYm9vbGVhbiBpc1dpbmRvd1Zpc2libGUoKTsKICAgICAg
ICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249c2VhcmNoaW5nRm9yTm9kZUluUGFnZV0gYm9vbGVh
biBzZWFyY2hpbmdGb3JOb2RlKCk7CiAKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRSZXNvdXJj
ZVNvdXJjZVRvRnJhbWUoaW4gdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbiBOb2RlIGZyYW1l
KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoaW4gbG9u
ZyBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOwogICAgICAgICBbQ3VzdG9tXSB2b2lk
IGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291
cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291
cmNlRG9jdW1lbnROb2RlKGluIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIFtD
dXN0b21dIE5vZGUgZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUoaW4gbG9uZyBsb25nIGlkZW50aWZp
ZXIpOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlYXJjaChpbiBOb2RlIG5vZGUsIGluIERPTVN0
cmluZyBxdWVyeSk7CiAjaWYgRU5BQkxFX0RBVEFCQVNFCiAgICAgICAgIFtDdXN0b21dIERPTU9i
amVjdCBkYXRhYmFzZVRhYmxlTmFtZXMoaW4gRGF0YWJhc2UgZGF0YWJhc2UpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCmluZGV4IDdkYjZjZDEuLjhiY2EyYzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKQEAgLTM1LDY2ICszNSwyMzggQEAK
ICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogCi0jaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBYTUxI
dHRwUmVxdWVzdFJlc291cmNlIENsYXNzCitJbnNwZWN0b3JSZXNvdXJjZTo6SW5zcGVjdG9yUmVz
b3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCisgICAg
OiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fbG9hZGVyKGxvYWRlcikKKyAgICAs
IG1fZnJhbWUobG9hZGVyLT5mcmFtZSgpKQorICAgICwgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgo
MCkKKyAgICAsIG1fY2FjaGVkKGZhbHNlKQorICAgICwgbV9maW5pc2hlZChmYWxzZSkKKyAgICAs
IG1fZmFpbGVkKGZhbHNlKQorICAgICwgbV9sZW5ndGgoMCkKKyAgICAsIG1fcmVzcG9uc2VTdGF0
dXNDb2RlKDApCisgICAgLCBtX3N0YXJ0VGltZSgtMS4wKQorICAgICwgbV9yZXNwb25zZVJlY2Vp
dmVkVGltZSgtMS4wKQorICAgICwgbV9lbmRUaW1lKC0xLjApCisgICAgLCBtX2lzTWFpblJlc291
cmNlKGZhbHNlKQoreworfQorCitJbnNwZWN0b3JSZXNvdXJjZTo6fkluc3BlY3RvclJlc291cmNl
KCkKK3sKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gSW5zcGVjdG9yUmVzb3Vy
Y2U6OmNyZWF0ZUNhY2hlZChsb25nIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgY29uc3QgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQoreworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gY3JlYXRlKGlkZW50aWZpZXIsIGxv
YWRlcik7CisKKyAgICByZXNvdXJjZS0+bV9maW5pc2hlZCA9IHRydWU7CisKKyAgICByZXNvdXJj
ZS0+bV9yZXF1ZXN0VVJMID0gS1VSTChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpOworICAgIHJlc291
cmNlLT51cGRhdGVSZXNwb25zZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSk7CisKKyAgICBy
ZXNvdXJjZS0+bV9sZW5ndGggPSBjYWNoZWRSZXNvdXJjZS0+ZW5jb2RlZFNpemUoKTsKKyAgICBy
ZXNvdXJjZS0+bV9jYWNoZWQgPSB0cnVlOworICAgIHJlc291cmNlLT5tX3N0YXJ0VGltZSA9IGN1
cnJlbnRUaW1lKCk7CisgICAgcmVzb3VyY2UtPm1fcmVzcG9uc2VSZWNlaXZlZFRpbWUgPSByZXNv
dXJjZS0+bV9zdGFydFRpbWU7CisgICAgcmVzb3VyY2UtPm1fZW5kVGltZSA9IHJlc291cmNlLT5t
X3N0YXJ0VGltZTsKKworICAgIHJlc291cmNlLT5tX2NoYW5nZXMuc2V0QWxsKCk7CisKKyAgICBy
ZXR1cm4gcmVzb3VyY2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdEhlYWRl
ckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOworICAgIG1fcmVxdWVzdFVSTCA9
IHJlcXVlc3QudXJsKCk7CisKKyAgICBtX2NoYW5nZXMuc2V0KFJlcXVlc3RDaGFuZ2UpOworfQor
Cit2b2lkIEluc3BlY3RvclJlc291cmNlOjp1cGRhdGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IHJlc3Bv
bnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworICAgIG1fbWltZVR5cGUgPSByZXNwb25zZS5t
aW1lVHlwZSgpOworICAgIG1fcmVzcG9uc2VIZWFkZXJGaWVsZHMgPSByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCk7CisgICAgbV9yZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpOworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSByZXNwb25zZS5zdWdnZXN0ZWRG
aWxlbmFtZSgpOworCisgICAgbV9jaGFuZ2VzLnNldChSZXNwb25zZUNoYW5nZSk7CisgICAgbV9j
aGFuZ2VzLnNldChUeXBlQ2hhbmdlKTsKK30KIAotc3RydWN0IFhNTEh0dHBSZXF1ZXN0UmVzb3Vy
Y2UgewotICAgIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoY29uc3QgSlNDOjpVU3RyaW5nJiBzb3Vy
Y2VTdHJpbmcpCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAg
ICAgdGhpcy0+c291cmNlU3RyaW5nID0gc291cmNlU3RyaW5nLnJlcCgpOworc3RhdGljIFNjcmlw
dE9iamVjdCBjcmVhdGVIZWFkZXJzT2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBoYWRFeGNlcHRpb24pCit7CisgICAgU2Ny
aXB0T2JqZWN0IG9iamVjdChzY3JpcHRTdGF0ZSk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCFvYmplY3Quc2V0KHNjcmlwdFN0YXRlLCBpdC0+Zmlyc3Quc3RyaW5nKCksIGl0
LT5zZWNvbmQpKSB7CisgICAgICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAgICB+WE1MSHR0cFJlcXVlc3RSZXNvdXJj
ZSgpCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgc291
cmNlU3RyaW5nLmNsZWFyKCk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBJbnNwZWN0
b3JSZXNvdXJjZTo6Y3JlYXRlU2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNwZWN0b3IpCit7CisgICAgaWYgKG1fc2NyaXB0T2Jq
ZWN0Lmhhc05vVmFsdWUoKSkgeworICAgICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwor
CisgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCByZXNvdXJjZUNvbnN0cnVjdG9yKHNjcmlwdFN0
YXRlLCB3ZWJJbnNwZWN0b3IsICJSZXNvdXJjZSIpOworICAgICAgICBTY3JpcHRPYmplY3QgcmVx
dWVzdEhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzT2JqZWN0KHNjcmlwdFN0YXRlLCBtX3JlcXVlc3RI
ZWFkZXJGaWVsZHMsIGhhZEV4Y2VwdGlvbik7CisgICAgICAgIGlmIChoYWRFeGNlcHRpb24pCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRB
cmd1bWVudChyZXF1ZXN0SGVhZGVycyk7CisgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IuYXBw
ZW5kQXJndW1lbnQocmVxdWVzdFVSTCgpKTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5h
cHBlbmRBcmd1bWVudChtX3JlcXVlc3RVUkwuaG9zdCgpKTsKKyAgICAgICAgcmVzb3VyY2VDb25z
dHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX3JlcXVlc3RVUkwucGF0aCgpKTsKKyAgICAgICAgcmVz
b3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX3JlcXVlc3RVUkwubGFzdFBhdGhDb21w
b25lbnQoKSk7CisgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IuYXBwZW5kQXJndW1lbnQobV9p
ZGVudGlmaWVyKTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudCht
X2lzTWFpblJlc291cmNlKTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1
bWVudChtX2NhY2hlZCk7CisKKyAgICAgICAgbV9zY3JpcHRPYmplY3QgPSByZXNvdXJjZUNvbnN0
cnVjdG9yLmNvbnN0cnVjdChoYWRFeGNlcHRpb24pOworICAgICAgICBpZiAoaGFkRXhjZXB0aW9u
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBhZGRS
ZXNvdXJjZShzY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yLCAiYWRkUmVzb3VyY2UiKTsKKyAgICAg
ICAgYWRkUmVzb3VyY2UuYXBwZW5kQXJndW1lbnQobV9zY3JpcHRPYmplY3QpOworICAgICAgICBh
ZGRSZXNvdXJjZS5jYWxsKGhhZEV4Y2VwdGlvbik7CisgICAgICAgIGlmIChoYWRFeGNlcHRpb24p
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9jaGFuZ2VzLmNsZWFyKFJlcXVlc3RD
aGFuZ2UpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4gc291cmNlU3Ry
aW5nOwotfTsKLQotICAgIEluc3BlY3RvclJlc291cmNlOjpJbnNwZWN0b3JSZXNvdXJjZShsb25n
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBGcmFtZSog
ZnJhbWUpCi0gICAgOiBpZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBsb2FkZXIoZG9jdW1l
bnRMb2FkZXIpCi0gICAgLCBmcmFtZShmcmFtZSkKLSAgICAsIHNjcmlwdENvbnRleHQoMCkKLSAg
ICAsIHNjcmlwdE9iamVjdCgwKQotICAgICwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKDApCi0gICAg
LCBjYWNoZWQoZmFsc2UpCi0gICAgLCBmaW5pc2hlZChmYWxzZSkKLSAgICAsIGZhaWxlZChmYWxz
ZSkKLSAgICAsIGxlbmd0aCgwKQotICAgICwgcmVzcG9uc2VTdGF0dXNDb2RlKDApCi0gICAgLCBz
dGFydFRpbWUoLTEuMCkKLSAgICAsIHJlc3BvbnNlUmVjZWl2ZWRUaW1lKC0xLjApCi0gICAgLCBl
bmRUaW1lKC0xLjApCi0gICAgLCB4bWxIdHRwUmVxdWVzdFJlc291cmNlKDApCi0gICAgeworICAg
IHVwZGF0ZVNjcmlwdE9iamVjdChzY3JpcHRTdGF0ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVz
b3VyY2U6OnVwZGF0ZVNjcmlwdE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7Cisg
ICAgaWYgKG1fc2NyaXB0T2JqZWN0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY2hhbmdlcy5oYXNDaGFuZ2UoTm9DaGFuZ2UpKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworCisgICAgaWYgKG1fY2hhbmdlcy5oYXND
aGFuZ2UoUmVxdWVzdENoYW5nZSkpIHsKKyAgICAgICAgaWYgKCFtX3NjcmlwdE9iamVjdC5zZXQo
c2NyaXB0U3RhdGUsICJ1cmwiLCByZXF1ZXN0VVJMKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Quc2V0KHNjcmlwdFN0YXRlLCAiZG9tYWluIiwg
bV9yZXF1ZXN0VVJMLmhvc3QoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KCFtX3NjcmlwdE9iamVjdC5zZXQoc2NyaXB0U3RhdGUsICJwYXRoIiwgbV9yZXF1ZXN0VVJMLnBh
dGgoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFtX3NjcmlwdE9iamVj
dC5zZXQoc2NyaXB0U3RhdGUsICJsYXNQYXRoQ29tcG9uZW50IiwgbV9yZXF1ZXN0VVJMLmxhc3RQ
YXRoQ29tcG9uZW50KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNjcmlwdE9i
amVjdCByZXF1ZXN0SGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNPYmplY3Qoc2NyaXB0U3RhdGUsIG1f
cmVxdWVzdEhlYWRlckZpZWxkcywgaGFkRXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGhhZEV4Y2Vw
dGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fc2NyaXB0T2JqZWN0
LnNldChzY3JpcHRTdGF0ZSwgInJlcXVlc3RIZWFkZXJzIiwgcmVxdWVzdEhlYWRlcnMpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Quc2V0KHNjcmlw
dFN0YXRlLCAibWFpblJlc291cmNlIiwgbV9pc01haW5SZXNvdXJjZSkpCisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi1JbnNwZWN0b3JSZXNvdXJjZTo6fkluc3BlY3RvclJlc291cmNlKCkK
KyAgICBpZiAobV9jaGFuZ2VzLmhhc0NoYW5nZShSZXNwb25zZUNoYW5nZSkpIHsKKyAgICAgICAg
aWYgKCFtX3NjcmlwdE9iamVjdC5zZXQoc2NyaXB0U3RhdGUsICJtaW1lVHlwZSIsIG1fbWltZVR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Qu
c2V0KHNjcmlwdFN0YXRlLCAic3VnZ2VzdGVkRmlsZW5hbWUiLCBtX3N1Z2dlc3RlZEZpbGVuYW1l
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fc2NyaXB0T2JqZWN0LnNl
dChzY3JpcHRTdGF0ZSwgImV4cGVjdGVkQ29udGVudExlbmd0aCIsIG1fZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fc2NyaXB0T2Jq
ZWN0LnNldChzY3JpcHRTdGF0ZSwgInN0YXR1c0NvZGUiLCBtX3Jlc3BvbnNlU3RhdHVzQ29kZSkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFtX3NjcmlwdE9iamVjdC5zZXQo
c2NyaXB0U3RhdGUsICJzdWdnZXN0ZWRGaWxlbmFtZSIsIG1fc3VnZ2VzdGVkRmlsZW5hbWUpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFNjcmlwdE9iamVjdCByZXNwb25zZUhlYWRl
cnMgPSBjcmVhdGVIZWFkZXJzT2JqZWN0KHNjcmlwdFN0YXRlLCBtX3Jlc3BvbnNlSGVhZGVyRmll
bGRzLCBoYWRFeGNlcHRpb24pOworICAgICAgICBpZiAoaGFkRXhjZXB0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Quc2V0KHNjcmlwdFN0YXRl
LCAicmVzcG9uc2VIZWFkZXJzIiwgcmVzcG9uc2VIZWFkZXJzKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VzLmhhc0NoYW5nZShUeXBlQ2hhbmdlKSAmJiAh
bV9zY3JpcHRPYmplY3Quc2V0KHNjcmlwdFN0YXRlLCAidHlwZSIsIHN0YXRpY19jYXN0PGludD4o
dHlwZSgpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoYW5nZXMuaGFzQ2hhbmdl
KExlbmd0aENoYW5nZSkgJiYgIW1fc2NyaXB0T2JqZWN0LnNldChzY3JpcHRTdGF0ZSwgImNvbnRl
bnRMZW5ndGgiLCBtX2xlbmd0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoYW5n
ZXMuaGFzQ2hhbmdlKENvbXBsZXRpb25DaGFuZ2UpKSB7CisgICAgICAgIGlmICghbV9zY3JpcHRP
YmplY3Quc2V0KHNjcmlwdFN0YXRlLCAiZmFpbGVkIiwgbV9mYWlsZWQpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Quc2V0KHNjcmlwdFN0YXRlLCAi
ZmluaXNoZWQiLCBtX2ZpbmlzaGVkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9jaGFuZ2VzLmhhc0NoYW5nZShUaW1pbmdDaGFuZ2UpKSB7CisgICAgICAgIGlmICht
X3N0YXJ0VGltZSA+IDAgJiYgIW1fc2NyaXB0T2JqZWN0LnNldChzY3JpcHRTdGF0ZSwgInN0YXJ0
VGltZSIsIG1fc3RhcnRUaW1lKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1f
cmVzcG9uc2VSZWNlaXZlZFRpbWUgPiAwICYmICFtX3NjcmlwdE9iamVjdC5zZXQoc2NyaXB0U3Rh
dGUsICJyZXNwb25zZVJlY2VpdmVkVGltZSIsIG1fcmVzcG9uc2VSZWNlaXZlZFRpbWUpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9lbmRUaW1lID4gMCAmJiAgIW1fc2NyaXB0
T2JqZWN0LnNldChzY3JpcHRTdGF0ZSwgImVuZFRpbWUiLCBtX2VuZFRpbWUpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2hhbmdlcy5jbGVhckFsbCgpOworfQorCit2b2lk
IEluc3BlY3RvclJlc291cmNlOjpyZWxlYXNlU2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNwZWN0b3IsIGJvb2wgY2FsbFJlbW92
ZVJlc291cmNlKQogewotICAgIHNldFNjcmlwdE9iamVjdCgwLCAwKTsKKyAgICBpZiAobV9zY3Jp
cHRPYmplY3QuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JpcHRPYmpl
Y3Qgc2NyaXB0T2JqZWN0ID0gbV9zY3JpcHRPYmplY3Q7CisgICAgbV9zY3JpcHRPYmplY3QgPSBT
Y3JpcHRPYmplY3QoKTsKKyAgICBtX2NoYW5nZXMuc2V0QWxsKCk7CisKKyAgICBpZiAoIWNhbGxS
ZW1vdmVSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IHJlbW92ZVJlc291cmNlKHNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3IsICJyZW1vdmVSZXNvdXJj
ZSIpOworICAgIHJlbW92ZVJlc291cmNlLmFwcGVuZEFyZ3VtZW50KHNjcmlwdE9iamVjdCk7Cisg
ICAgYm9vbCBoYWRFeGNlcHRpb247CisgICAgcmVtb3ZlUmVzb3VyY2UuY2FsbChoYWRFeGNlcHRp
b24pOwogfQogCiBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSBJbnNwZWN0b3JSZXNvdXJjZTo6dHlw
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2UpCisgICAgaWYgKCFt
X3htbEh0dHBSZXNwb25zZVRleHQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBYSFI7CiAKLSAg
ICBpZiAocmVxdWVzdFVSTCA9PSBsb2FkZXItPnJlcXVlc3RVUkwoKSkKKyAgICBpZiAobV9yZXF1
ZXN0VVJMID09IG1fbG9hZGVyLT5yZXF1ZXN0VVJMKCkpCiAgICAgICAgIHJldHVybiBEb2M7CiAK
LSAgICBpZiAobG9hZGVyLT5mcmFtZUxvYWRlcigpICYmIHJlcXVlc3RVUkwgPT0gbG9hZGVyLT5m
cmFtZUxvYWRlcigpLT5pY29uVVJMKCkpCisgICAgaWYgKG1fbG9hZGVyLT5mcmFtZUxvYWRlcigp
ICYmIG1fcmVxdWVzdFVSTCA9PSBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+aWNvblVSTCgpKQog
ICAgICAgICByZXR1cm4gSW1hZ2U7CiAKLSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3Vy
Y2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPmNhY2hlZFJlc291cmNlKHJlcXVl
c3RVUkwuc3RyaW5nKCkpOworICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5jYWNoZWRSZXNvdXJjZShyZXF1ZXN0VVJM
KCkpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBPdGhlcjsKIApA
QCAtMTE1LDQyICsyODcsMjUgQEAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgSW5zcGVjdG9yUmVz
b3VyY2U6OnR5cGUoKSBjb25zdAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6
c2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3Jp
cHRPYmplY3QpCi17Ci0gICAgaWYgKHNjcmlwdENvbnRleHQgJiYgc2NyaXB0T2JqZWN0KQotICAg
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7Ci0KLSAg
ICBzY3JpcHRPYmplY3QgPSBuZXdTY3JpcHRPYmplY3Q7Ci0gICAgc2NyaXB0Q29udGV4dCA9IGNv
bnRleHQ7Ci0KLSAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNv
bnRleHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOwotICAgIGlmIChjb250ZXh0ICYmIG5ld1Njcmlw
dE9iamVjdCkKLSAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2NyaXB0T2JqZWN0
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6c2V0WE1MSHR0cFJlcXVlc3RQcm9wZXJ0
aWVzKGNvbnN0IEpTQzo6VVN0cmluZyYgZGF0YSkKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnNl
dFhNTEh0dHBSZXNwb25zZVRleHQoY29uc3QgU2NyaXB0U3RyaW5nJiBkYXRhKQogewotICAgIHht
bEh0dHBSZXF1ZXN0UmVzb3VyY2Uuc2V0KG5ldyBYTUxIdHRwUmVxdWVzdFJlc291cmNlKGRhdGEp
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6c2V0U2NyaXB0UHJvcGVydGllcyhjb25z
dCBKU0M6OlVTdHJpbmcmIGRhdGEpCi17Ci0gICAgeG1sSHR0cFJlcXVlc3RSZXNvdXJjZS5zZXQo
bmV3IFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoZGF0YSkpOworICAgIG1feG1sSHR0cFJlc3BvbnNl
VGV4dCA9IGRhdGE7CisgICAgbV9jaGFuZ2VzLnNldChUeXBlQ2hhbmdlKTsKIH0KIAogU3RyaW5n
IEluc3BlY3RvclJlc291cmNlOjpzb3VyY2VTdHJpbmcoKSBjb25zdAogewotICAgIGlmICh4bWxI
dHRwUmVxdWVzdFJlc291cmNlKQotICAgICAgICByZXR1cm4gSlNDOjpVU3RyaW5nKHhtbEh0dHBS
ZXF1ZXN0UmVzb3VyY2UtPnNvdXJjZVN0cmluZyk7CisgICAgaWYgKCFtX3htbEh0dHBSZXNwb25z
ZVRleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcobV94bWxIdHRwUmVzcG9uc2VU
ZXh0KTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKICAgICBTdHJpbmcgdGV4
dEVuY29kaW5nTmFtZTsKIAotICAgIGlmIChyZXF1ZXN0VVJMID09IGxvYWRlci0+cmVxdWVzdFVS
TCgpKSB7Ci0gICAgICAgIGJ1ZmZlciA9IGxvYWRlci0+bWFpblJlc291cmNlRGF0YSgpOwotICAg
ICAgICB0ZXh0RW5jb2RpbmdOYW1lID0gZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2Rpbmco
KTsKKyAgICBpZiAobV9yZXF1ZXN0VVJMID09IG1fbG9hZGVyLT5yZXF1ZXN0VVJMKCkpIHsKKyAg
ICAgICAgYnVmZmVyID0gbV9sb2FkZXItPm1haW5SZXNvdXJjZURhdGEoKTsKKyAgICAgICAgdGV4
dEVuY29kaW5nTmFtZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPmNhY2hlZFJlc291cmNlKHJlcXVlc3RVUkwuc3Ry
aW5nKCkpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UocmVxdWVzdFVSTCgpKTsK
ICAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIApAQCAtMTc4LDQgKzMzMywzNiBAQCBTdHJpbmcgSW5zcGVjdG9yUmVzb3VyY2U6OnNvdXJj
ZVN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShidWZmZXItPmRhdGEo
KSwgYnVmZmVyLT5zaXplKCkpOwogfQogCit2b2lkIEluc3BlY3RvclJlc291cmNlOjpzdGFydFRp
bWluZygpCit7CisgICAgbV9zdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fY2hhbmdl
cy5zZXQoVGltaW5nQ2hhbmdlKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6bWFya1Jl
c3BvbnNlUmVjZWl2ZWRUaW1lKCkKK3sKKyAgICBtX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICBtX2NoYW5nZXMuc2V0KFRpbWluZ0NoYW5nZSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yUmVzb3VyY2U6OmVuZFRpbWluZygpCit7CisgICAgbV9lbmRUaW1lID0gY3VycmVu
dFRpbWUoKTsKKyAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICBtX2NoYW5nZXMuc2V0KFRpbWlu
Z0NoYW5nZSk7CisgICAgbV9jaGFuZ2VzLnNldChDb21wbGV0aW9uQ2hhbmdlKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZTo6bWFya0ZhaWxlZCgpCit7CisgICAgbV9mYWlsZWQgPSB0cnVl
OworICAgIG1fY2hhbmdlcy5zZXQoQ29tcGxldGlvbkNoYW5nZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yUmVzb3VyY2U6OmFkZExlbmd0aChpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbV9sZW5n
dGggKz0gbGVuZ3RoUmVjZWl2ZWQ7CisgICAgbV9jaGFuZ2VzLnNldChMZW5ndGhDaGFuZ2UpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuaAppbmRleCA0NmQ3ZmVkLi5hNDExNWY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmgKQEAgLTMxLDI0ICszMSwyNCBAQAogI2lmbmRlZiBJbnNwZWN0b3JSZXNvdXJjZV9o
CiAjZGVmaW5lIEluc3BlY3RvclJlc291cmNlX2gKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ29udGV4dFJlZi5oPgotCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIFVTdHJpbmc7Ci19Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBEb2N1bWVudExv
YWRlcjsKICAgICBjbGFzcyBGcmFtZTsKLSAgICBzdHJ1Y3QgWE1MSHR0cFJlcXVlc3RSZXNvdXJj
ZTsKKyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKIAogICAgIGNsYXNzIEluc3BlY3RvclJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
cGVjdG9yUmVzb3VyY2U+IHsKICAgICBwdWJsaWM6CkBAIC02NSw0MyArNjUsOTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgT3RoZXIKICAgICAgICAgfTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gY3JlYXRlKGxvbmcgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsIEZyYW1lKiBmcmFtZSkKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IGNyZWF0ZShsb25nIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JSZXNvdXJjZShpZGVudGlmaWVyLCBk
b2N1bWVudExvYWRlciwgZnJhbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yUmVzb3VyY2UoaWRlbnRpZmllciwgbG9hZGVyKSk7CiAgICAgICAgIH0KIAorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gY3JlYXRlQ2FjaGVkKGxv
bmcgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IENhY2hlZFJlc291cmNl
Kik7CisKICAgICAgICAgfkluc3BlY3RvclJlc291cmNlKCk7Ci0gICAgICAgIFR5cGUgdHlwZSgp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldFNjcmlwdE9iamVjdChKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmKTsKLSAgICAgICAgdm9pZCBzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMoY29uc3Qg
SlNDOjpVU3RyaW5nJiBkYXRhKTsKLSAgICAgICAgdm9pZCBzZXRTY3JpcHRQcm9wZXJ0aWVzKGNv
bnN0IEpTQzo6VVN0cmluZyYgZGF0YSk7CiAKLSAgICAgICAgU3RyaW5nIHNvdXJjZVN0cmluZygp
IGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZVNjcmlwdE9iamVjdChTY3JpcHRTdGF0ZSosIGNv
bnN0IFNjcmlwdE9iamVjdCYgd2ViSW5zcGVjdG9yKTsKKyAgICAgICAgdm9pZCB1cGRhdGVTY3Jp
cHRPYmplY3QoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgdm9pZCByZWxlYXNlU2NyaXB0T2JqZWN0
KFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNwZWN0b3IsIGJvb2wgY2Fs
bFJlbW92ZVJlc291cmNlKTsKKworICAgICAgICB2b2lkIHVwZGF0ZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZvaWQgdXBkYXRlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOwogCi0gICAgICAgIGxvbmcgbG9uZyBpZGVudGlmaWVyOwotICAgICAgICBS
ZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlcjsKLSAgICAgICAgUmVmUHRyPEZyYW1lPiBmcmFt
ZTsKLSAgICAgICAgS1VSTCByZXF1ZXN0VVJMOwotICAgICAgICBIVFRQSGVhZGVyTWFwIHJlcXVl
c3RIZWFkZXJGaWVsZHM7Ci0gICAgICAgIEhUVFBIZWFkZXJNYXAgcmVzcG9uc2VIZWFkZXJGaWVs
ZHM7Ci0gICAgICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZp
bGVuYW1lOwotICAgICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q29udGV4dDsKLSAgICAgICAgSlNP
YmplY3RSZWYgc2NyaXB0T2JqZWN0OwotICAgICAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoOwotICAgICAgICBib29sIGNhY2hlZDsKLSAgICAgICAgYm9vbCBmaW5pc2hlZDsKLSAg
ICAgICAgYm9vbCBmYWlsZWQ7Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIGludCByZXNw
b25zZVN0YXR1c0NvZGU7Ci0gICAgICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0gICAgICAgIGRvdWJs
ZSByZXNwb25zZVJlY2VpdmVkVGltZTsKLSAgICAgICAgZG91YmxlIGVuZFRpbWU7CisgICAgICAg
IHZvaWQgc2V0WE1MSHR0cFJlc3BvbnNlVGV4dChjb25zdCBTY3JpcHRTdHJpbmcmIGRhdGEpOwor
CisgICAgICAgIFN0cmluZyBzb3VyY2VTdHJpbmcoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Nh
bWVMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikgY29uc3QgeyByZXR1cm4gbG9hZGVyID09
IG1fbG9hZGVyOyB9CisgICAgICAgIHZvaWQgbWFya01haW5SZXNvdXJjZSgpIHsgbV9pc01haW5S
ZXNvdXJjZSA9IHRydWU7IH0KKyAgICAgICAgbG9uZyBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICAgICAgU3RyaW5nIHJlcXVlc3RVUkwoKSBjb25z
dCB7IHJldHVybiBtX3JlcXVlc3RVUkwuc3RyaW5nKCk7IH0KKyAgICAgICAgRnJhbWUqIGZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZS5nZXQoKTsgfQorICAgICAgICBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZTsgfQorICAgICAgICB2b2lkIHN0
YXJ0VGltaW5nKCk7CisgICAgICAgIHZvaWQgbWFya1Jlc3BvbnNlUmVjZWl2ZWRUaW1lKCk7Cisg
ICAgICAgIHZvaWQgZW5kVGltaW5nKCk7CisKKyAgICAgICAgdm9pZCBtYXJrRmFpbGVkKCk7Cisg
ICAgICAgIHZvaWQgYWRkTGVuZ3RoKGludCBsZW5ndGhSZWNlaXZlZCk7CiAKICAgICBwcml2YXRl
OgotICAgICAgICBJbnNwZWN0b3JSZXNvdXJjZShsb25nIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMb2FkZXIqLCBGcmFtZSopOworICAgICAgICBlbnVtIENoYW5nZVR5cGUgeworICAgICAgICAg
ICAgTm9DaGFuZ2UgPSAwLAorICAgICAgICAgICAgUmVxdWVzdENoYW5nZSA9IDEsCisgICAgICAg
ICAgICBSZXNwb25zZUNoYW5nZSA9IDIsCisgICAgICAgICAgICBUeXBlQ2hhbmdlID0gNCwKKyAg
ICAgICAgICAgIExlbmd0aENoYW5nZSA9IDgsCisgICAgICAgICAgICBDb21wbGV0aW9uQ2hhbmdl
ID0gMTYsCisgICAgICAgICAgICBUaW1pbmdDaGFuZ2UgPSAzMgorICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIENoYW5nZXMgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDaGFuZ2Vz
KCkgOiBtX2NoYW5nZShOb0NoYW5nZSkge30KKworICAgICAgICAgICAgaW5saW5lIGJvb2wgaGFz
Q2hhbmdlKENoYW5nZVR5cGUgY2hhbmdlKSB7IHJldHVybiAobV9jaGFuZ2UgJiBjaGFuZ2UpIHx8
ICEobV9jaGFuZ2UgKyBjaGFuZ2UpOyB9CisgICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXQoQ2hh
bmdlVHlwZSBjaGFuZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Ug
PSBzdGF0aWNfY2FzdDxDaGFuZ2VUeXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jaGFuZ2Up
IHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSkpOyAgICAgICAgICAgIAorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW5saW5lIHZvaWQgY2xlYXIoQ2hhbmdlVHlwZSBjaGFuZ2UpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2UgPSBzdGF0aWNfY2FzdDxDaGFu
Z2VUeXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jaGFuZ2UpICYgfnN0YXRpY19jYXN0PHVu
c2lnbmVkPihjaGFuZ2UpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5lIHZv
aWQgc2V0QWxsKCkgeyBtX2NoYW5nZSA9IHN0YXRpY19jYXN0PENoYW5nZVR5cGU+KDYzKTsgfQor
ICAgICAgICAgICAgaW5saW5lIHZvaWQgY2xlYXJBbGwoKSB7IG1fY2hhbmdlID0gTm9DaGFuZ2U7
IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQ2hhbmdlVHlwZSBtX2NoYW5nZTsK
KyAgICAgICAgfTsKKworICAgICAgICBJbnNwZWN0b3JSZXNvdXJjZShsb25nIGxvbmcgaWRlbnRp
ZmllciwgRG9jdW1lbnRMb2FkZXIqKTsKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAKLSAg
ICAgICAgT3duUHRyPFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2U+IHhtbEh0dHBSZXF1ZXN0UmVzb3Vy
Y2U7CisgICAgICAgIGxvbmcgbG9uZyBtX2lkZW50aWZpZXI7CisgICAgICAgIFJlZlB0cjxEb2N1
bWVudExvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKKyAg
ICAgICAgS1VSTCBtX3JlcXVlc3RVUkw7CisgICAgICAgIEhUVFBIZWFkZXJNYXAgbV9yZXF1ZXN0
SGVhZGVyRmllbGRzOworICAgICAgICBIVFRQSGVhZGVyTWFwIG1fcmVzcG9uc2VIZWFkZXJGaWVs
ZHM7CisgICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBTdHJpbmcgbV9zdWdnZXN0
ZWRGaWxlbmFtZTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IG1fc2NyaXB0T2JqZWN0OworICAgICAg
ICBsb25nIGxvbmcgbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAgICAgIGJvb2wgbV9jYWNo
ZWQ7CisgICAgICAgIGJvb2wgbV9maW5pc2hlZDsKKyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKKyAg
ICAgICAgaW50IG1fbGVuZ3RoOworICAgICAgICBpbnQgbV9yZXNwb25zZVN0YXR1c0NvZGU7Cisg
ICAgICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VSZWNl
aXZlZFRpbWU7CisgICAgICAgIGRvdWJsZSBtX2VuZFRpbWU7CisgICAgICAgIFNjcmlwdFN0cmlu
ZyBtX3htbEh0dHBSZXNwb25zZVRleHQ7CisgICAgICAgIENoYW5nZXMgbV9jaGFuZ2VzOworICAg
ICAgICBib29sIG1faXNNYWluUmVzb3VyY2U7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>
<flag name="review"
          id="14462"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>