<?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>180901</bug_id>
          
          <creation_ts>2017-12-15 19:42:31 -0800</creation_ts>
          <short_desc>Hollow out stub implementation of InspectorBackendDispatcher::sendResponse().</short_desc>
          <delta_ts>2017-12-17 17:05:58 -0800</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>
          
          <blocked>180762</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>bburg</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1382432</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-15 19:42:31 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382433</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-15 19:43:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/36087649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382434</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-15 19:50:52 -0800</bug_when>
    <thetext>I think we can entirely stub out InspectorValues here.

Older versions of System Safari used InspectorValues (via WebInspector.framework) for two things:

  • Augmented JSContexts SPIs (via WebInspector.framework)
    - not actually used
  • WebDriver (maybe?)
    - I don&apos;t think this can be used with SafariForWebKitDevelopment

Since neither are used when running SafariForWebKitDevelopment we can stub out the symbols (InspectorValues, InspectorObjects, InspectorBackendDispatcher::sendResponse) to do nothing, and SafariForWebKitDevelopment  will then continue to launch with a trunk WebKit and won&apos;t have any observable bad behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382453</commentid>
    <comment_count>3</comment_count>
      <attachid>329563</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-15 23:10:13 -0800</bug_when>
    <thetext>Created attachment 329563
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382638</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-17 13:00:03 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r226012: &lt;http://trac.webkit.org/r226012&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382680</commentid>
    <comment_count>5</comment_count>
      <attachid>329563</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-17 17:05:58 -0800</bug_when>
    <thetext>Comment on attachment 329563
proposed patch.

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

Looks good!

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:189
&gt;  // FIXME: remove this function when legacy InspectorObject symbols are no longer needed &lt;http://webkit.org/b/179847&gt;.
&gt;  void BackendDispatcher::sendResponse(long requestId, RefPtr&lt;JSON::Object&gt;&amp;&amp; result)

I still don&apos;t think this comment makes sense for this file. JSON::Object is new so I don&apos;t think any existing code can depend on it.

You may want to move the FIXME / bugzilla bug to the DeprecatedInspectorValues file.

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h:90
&gt;      // When &lt;http://webkit.org/b/179847&gt; is fixed or this class is renamed for the JSON::Object case,
&gt;      // then this alternate method with a dummy parameter can be removed in favor of the one without it.

Same.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329563</attachid>
            <date>2017-12-15 23:10:13 -0800</date>
            <delta_ts>2017-12-17 10:15:36 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-180901.patch</filename>
            <type>text/plain</type>
            <size>55194</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1OTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE3LTEyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBI
b2xsb3cgb3V0IHN0dWIgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnNlbmRSZXNwb25zZSgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgwOTAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA4NzY0OT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBvbmx5IG5l
ZWQgdG8ga2VlcCBhIGRlcHJlY2F0ZWQgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdG9yVmFsdWVz
LAorICAgICAgICBJbnNwZWN0b3JPYmplY3RzLCBhbmQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnNlbmRSZXNwb25zZSgpIGFyb3VuZCBzbyB0aGF0CisgICAgICAgIG9sZGVyIHZlcnNpb25z
IG9mIFNhZmFyaSBjYW4gbGluayBhZ2FpbnN0IGFuZCBydW4gd2l0aCBhIGJ1aWxkIG9mIHRoZSBs
YXRlc3QgY29kZQorICAgICAgICBpbiBXZWJLaXQgdHJ1bmsuIE9sZGVyIHZlcnNpb25zIG9mIFN5
c3RlbSBTYWZhcmkgdXNlZCBJbnNwZWN0b3JWYWx1ZXMgKHZpYQorICAgICAgICBXZWJJbnNwZWN0
b3IuZnJhbWV3b3JrKSBmb3IgdHdvIHRoaW5nczoKKworICAgICAgICAxLiBBdWdtZW50ZWQgSlND
b250ZXh0cyBTUElzICh2aWEgV2ViSW5zcGVjdG9yLmZyYW1ld29yaykuCisgICAgICAgIDIuIG1h
eWJlIFdlYkRyaXZlci4KKworICAgICAgICBOZWl0aGVyIG9mIHRoZXNlIGFyZSB1c2VkIHdoZW4g
cnVubmluZyBTYWZhcmlGb3JXZWJLaXREZXZlbG9wbWVudC4gIFNpbmNlIG5laXRoZXIKKyAgICAg
ICAgYXJlIHVzZWQsIHdlIGNhbiBzdHViIG91dCB0aGUgc3ltYm9scyAoSW5zcGVjdG9yVmFsdWVz
LCBJbnNwZWN0b3JPYmplY3RzLAorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c2VuZFJlc3BvbnNlKSB0byBkbyBub3RoaW5nLCBhbmQKKyAgICAgICAgU2FmYXJpRm9yV2ViS2l0
RGV2ZWxvcG1lbnQgd2lsbCBzdGlsbCBjb250aW51ZSB0byBsYXVuY2ggd2l0aCB0cnVuayBXZWJL
aXQsIGFuZAorICAgICAgICBydW4gd2l0aG91dCBoYXZlIGFueSBvYnNlcnZhYmxlIGJhZCBiZWhh
dmlvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9jb2NvYS9EZXByZWNh
dGVkSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU6Om51bGwpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZTo6YXNBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6
dG9KU09OU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6
OmFzQm9vbGVhbiBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjph
c0RvdWJsZSBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjphc0lu
dGVnZXIgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6YXNTdHJp
bmcgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09O
IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6Om1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpvcGVuQWNj
ZXNzb3JzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6bWVtb3J5
Q29zdCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6Omdl
dEJvb2xlYW4gY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
OjpnZXRTdHJpbmcgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlOjpnZXRPYmplY3QgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpnZXRBcnJheSBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2U6OmdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OmdldCBj
b25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6bWVtb3J5Q29z
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6fkluc3BlY3Rvck9iamVjdEJh
c2UpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjph
c09iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJh
c2U6OndyaXRlSlNPTiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6Okluc3BlY3Rvck9iamVjdEJhc2UpOiBEZWxldGVkLgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6On5JbnNwZWN0b3JBcnJheUJhc2UpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OmFzQXJyYXkpOiBE
ZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNP
TiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFz
ZTo6SW5zcGVjdG9yQXJyYXlCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvY29j
b2EvRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5oOiBSZW1vdmVkLgorCiAyMDE3LTEyLTE1ICBS
eWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyMjU5NDEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
c0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0Nv
Y29hLnR4dAkocmV2aXNpb24gMjI1OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDYgQEAgQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0KIEFQSS9KU1dyYXBwZXJNYXAubW0KIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlv
bi5tbQogCi1pbnNwZWN0b3IvY29jb2EvRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAKLQog
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVBdXRvbWF0aW9uVGFyZ2V0LmNwcAogaW5zcGVjdG9yL3Jl
bW90ZS9SZW1vdGVDb250cm9sbGFibGVUYXJnZXQuY3BwCiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3Rpb25UYXJnZXQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjI1OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMTQsNyArMTIx
NCw2IEBACiAJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Nzg4RkMyMzE0NzFBRDBD
MDA2OENFMkQgLyogSlNEYXRlTWF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTk4MUVEODIzMjgyMzREOTFCQUVDQ0FERSAvKiBNYWNoaW5lQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjg4
MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVDb250ZXh0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkwREE2N0YxQzhFMzE2QTAwMjk1
MTU5IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRh
dGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
MERBNjdFMUM4RTMxMUQwMDI5NTE1OSAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTkyRDZBMTMxRkJENDkyRTAwMDI0NUY0IC8qIERlcHJlY2F0
ZWRJbnNwZWN0b3JWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5MkQ2QTEwMUZCRDQ5MUMwMDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9y
VmFsdWVzLmggKi87IH07CiAJCTk5MkY1NkI3MUU0RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNw
ZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5OTJGNTZCMTFFNEU4NDc5MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTk5NTlFOTJCMUJEMTdGQTQwMDFBQTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTU5RTkyNzFCRDE3RkEwMDAxQUE0
MTMgLyogY3NzbWluLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5NTlFOTI5MUJEMTdGQTAwMDFB
QTQxMyAvKiBqc21pbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTcxNSw2ICsxNzE0LDcgQEAKIAkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZE
IC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTNGRjc1MkYxRDlDRUExMjAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNl
dHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIy
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRkUwNUZBRkQxRkU0Q0VEQTAwMDkzMjMwIC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTky
RDZBMTExRkJENDkxRDAwMDI0NUY0IC8qIERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICov
OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBE
NEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87IH07
CiAJCUZFMEQ0QTA5MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUwRDRBMDcxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHAgKi87IH07CiAJCUZFMTBBQUVCMUY0NEQ1MjgwMDlERURDNSAvKiBQcm9iZVN0YWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTEwQUFFQTFG
NDRENTEyMDA5REVEQzUgLyogUHJvYmVTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zODE1LDcgKzM4MTUsNiBAQAogCQk5OTBEQTY3RTFD
OEUzMTFEMDAyOTUxNTkgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25z
X2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0g
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTJBQkNGNTFCRUE5NENBMDA2NDAzQTAg
LyogUmVtb3RlQXV0b21hdGlvblRhcmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTkyQUJDRjYxQkVBOTRDQTAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25U
YXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlQXV0b21hdGlv
blRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5OTJENkExMDFGQkQ0OTFD
MDAwMjQ1RjQgLyogRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk5MkQ2QTExMUZCRDQ5MUQwMDAyNDVGNCAvKiBEZXByZWNhdGVk
SW5zcGVjdG9yVmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5OTJGNTZCMDFFNEU4NDc5MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVJbnNwZWN0b3JD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkyRjU2QjExRTRFODQ3OTAw
MzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYzMCw3ICs3NjI5LDYgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJOTkyRDZBMTExRkJENDkxRDAwMDI0NUY0IC8qIERl
cHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwICovLAotCQkJCTk5MkQ2QTEwMUZCRDQ5MUMwMDAy
NDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgzNTUsNyArODM1Myw2IEBA
CiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDczREE0QTQ3NjRDNDVGRTg3MUIwNDg1IC8qIERlZmluZVByb3Bl
cnR5QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCQjczQkIxREVGODY0NTAwMkMw
MDlFIC8qIERlbGV0ZUFsbENvZGVFZmZvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTk5MkQ2QTEz
MUZCRDQ5MkUwMDAyNDVGNCAvKiBEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJh
Y3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyog
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODY5LDcgKzg4NjYs
NyBAQAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTJCMEI3MzFGRDlFRjcwMDA3NURBNUYgLyogSlNDUG9p
c29uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTJCMEI2OTFGRDIyN0UwMDA3NURBNUYgLyogSlND
UG9pc29uZWRQdHIuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5l
clV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MkFBRjdDRTFEMEQzMUIzMDA1RTYwQkUgLyog
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMTA2LDYgKzEwMTAzLDcgQEAKIAkJCQk1MzZCMzE0MTFGNzFDNTk5MDAzN0ZD
MzMgLyogVW5pZmllZFNvdXJjZTk0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTM4MUY3
MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlOTUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTM2QjMxMkYxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2U5Ni5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRTA1RkFGRDFGRTRDRURBMDAwOTMyMzAgLyogRGVwcmVjYXRlZEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzEzNjFGNzFDNTk5MDAzN0ZDMzMg
LyogVW5pZmllZFNvdXJjZTk3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTZBMUY3MUM1
OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlOTguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2
QjMxNjMxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2U5OS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAyMjU5OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJEZXByZWNhdGVkSW5zcGVjdG9yVmFsdWVzLmgiCi0jZW5k
aWYKLQogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyOjpTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIpCkBAIC0xODksMjEgKzE4NSw2IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGNvbnN0IFMKICAgICB9CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLS8v
IENPTVBBVElCSUxJVFk6IHJlbW92ZSB0aGlzIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCBieSBzeXN0
ZW0gV2ViSW5zcGVjdG9yLmZyYW1ld29yayA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+Lgot
dm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlc3VsdCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvdG9jb2xF
cnJvcnMuc2l6ZSgpKTsKLQotICAgIC8vIFRoZSBKU09OLVJQQyAyLjAgc3BlY2lmaWNhdGlvbiBy
ZXF1aXJlcyB0aGF0IHRoZSAiZXJyb3IiIG1lbWJlciBoYXZlIHRoZSB2YWx1ZSAnbnVsbCcKLSAg
ICAvLyBpZiBubyBlcnJvciBvY2N1cnJlZCBkdXJpbmcgYW4gaW52b2NhdGlvbiwgYnV0IHdlIGRv
IG5vdCBpbmNsdWRlIGl0IGF0IGFsbC4KLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIFdURk1vdmUocmVzdWx0KSk7Ci0g
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgcmVxdWVz
dElkKTsKLSAgICBtX2Zyb250ZW5kUm91dGVyLT5zZW5kUmVzcG9uc2UocmVzcG9uc2VNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KIC8vIEZJ
WE1FOiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIGxlZ2FjeSBJbnNwZWN0b3JPYmplY3Qgc3lt
Ym9scyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+Lgog
dm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmgJKHJldmlzaW9uIDIyNTk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzgsMTAgKzM4LDYg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7Ci0jZW5kaWYKLQogdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXI+IHsKQEAgLTkzLDExICs4OSw2IEBAIHB1YmxpYzoKICAgICAvLyBX
aGVuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3OTg0Nz4gaXMgZml4ZWQgb3IgdGhpcyBjbGFzcyBp
cyByZW5hbWVkIGZvciB0aGUgSlNPTjo6T2JqZWN0IGNhc2UsCiAgICAgLy8gdGhlbiB0aGlzIGFs
dGVybmF0ZSBtZXRob2Qgd2l0aCBhIGR1bW15IHBhcmFtZXRlciBjYW4gYmUgcmVtb3ZlZCBpbiBm
YXZvciBvZiB0aGUgb25lIHdpdGhvdXQgaXQuCiAgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gQ09NUEFUSUJJTElUWTogcmVtb3ZlIHRoaXMgd2hl
biBubyBsb25nZXIgbmVlZGVkIGJ5IHN5c3RlbSBXZWJJbnNwZWN0b3IuZnJhbWV3b3JrLgotICAg
IHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHJlc3VsdCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCk7CiAgICAgdm9pZCBzZW5kUGVuZGlu
Z0Vycm9ycygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2NvY29h
L0RlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvY29jb2EvRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAJ
KHJldmlzaW9uIDIyNTk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvY29j
b2EvRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzEsODIxICszMSwxNzEgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZEluc3BlY3RvclZhbHVl
cy5oIgogCi0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvZHRv
YS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJKU0V4
cG9ydE1hY3Jvcy5oIgogCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIHsKLQot
c3RhdGljIGNvbnN0IGludCBzdGFja0xpbWl0ID0gMTAwMDsKLQotZW51bSBUb2tlbiB7Ci0gICAg
T0JKRUNUX0JFR0lOLAotICAgIE9CSkVDVF9FTkQsCi0gICAgQVJSQVlfQkVHSU4sCi0gICAgQVJS
QVlfRU5ELAotICAgIFNUUklORywKLSAgICBOVU1CRVIsCi0gICAgQk9PTF9UUlVFLAotICAgIEJP
T0xfRkFMU0UsCi0gICAgTlVMTF9UT0tFTiwKLSAgICBMSVNUX1NFUEFSQVRPUiwKLSAgICBPQkpF
Q1RfUEFJUl9TRVBBUkFUT1IsCi0gICAgSU5WQUxJRF9UT0tFTiwKLX07Ci0KLWNvbnN0IGNoYXIq
IGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFyKiBjb25zdCB0cnVlU3RyaW5n
ID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJpbmcgPSAiZmFsc2UiOwotCi1i
b29sIHBhcnNlQ29uc3RUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGNvbnN0IGNoYXIqIHRva2VuKQotewotICAgIHdoaWxl
IChzdGFydCA8IGVuZCAmJiAqdG9rZW4gIT0gJ1wwJyAmJiAqc3RhcnQrKyA9PSAqdG9rZW4rKykg
eyB9Ci0KLSAgICBpZiAoKnRva2VuICE9ICdcMCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICp0b2tlbkVuZCA9IHN0YXJ0OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHJlYWRJ
bnQoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRv
a2VuRW5kLCBib29sIGNhbkhhdmVMZWFkaW5nWmVyb3MpCi17Ci0gICAgaWYgKHN0YXJ0ID09IGVu
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXZlTGVhZGluZ1plcm8gPSAn
MCcgPT0gKnN0YXJ0OwotICAgIGludCBsZW5ndGggPSAwOwotICAgIHdoaWxlIChzdGFydCA8IGVu
ZCAmJiAnMCcgPD0gKnN0YXJ0ICYmICpzdGFydCA8PSAnOScpIHsKLSAgICAgICAgKytzdGFydDsK
LSAgICAgICAgKytsZW5ndGg7Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghY2FuSGF2ZUxlYWRpbmdaZXJvcyAmJiBsZW5ndGggPiAx
ICYmIGhhdmVMZWFkaW5nWmVybykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKnRva2Vu
RW5kID0gc3RhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgcGFyc2VOdW1iZXJUb2tl
bihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9r
ZW5FbmQpCi17Ci0gICAgLy8gV2UganVzdCBncmFiIHRoZSBudW1iZXIgaGVyZS4gIFdlIHZhbGlk
YXRlIHRoZSBzaXplIGluIERlY29kZU51bWJlci4KLSAgICAvLyBBY2NvcmRpbmcgICB0byBSRkM0
NjI3LCBhIHZhbGlkIG51bWJlciBpczogW21pbnVzXSBpbnQgW2ZyYWNdIFtleHBdCi0gICAgaWYg
KHN0YXJ0ID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVUNoYXIgYyA9ICpz
dGFydDsKLSAgICBpZiAoJy0nID09IGMpCi0gICAgICAgICsrc3RhcnQ7Ci0KLSAgICBpZiAoIXJl
YWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChzdGFydCA9PSBlbmQpIHsKLSAgICAgICAgKnRva2VuRW5kID0gc3RhcnQ7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIE9wdGlvbmFsIGZyYWN0aW9uIHBh
cnQKLSAgICBjID0gKnN0YXJ0OwotICAgIGlmICgnLicgPT0gYykgewotICAgICAgICArK3N0YXJ0
OwotICAgICAgICBpZiAoIXJlYWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCB0cnVlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAg
ICAgICAgKnRva2VuRW5kID0gc3RhcnQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjID0gKnN0YXJ0OwotICAgIH0KLQotICAgIC8vIE9wdGlvbmFsIGV4cG9u
ZW50IHBhcnQKLSAgICBpZiAoJ2UnID09IGMgfHwgJ0UnID09IGMpIHsKLSAgICAgICAgKytzdGFy
dDsKLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYyA9ICpzdGFydDsKLSAgICAgICAgaWYgKCctJyA9PSBjIHx8ICcrJyA9PSBjKSB7
Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZWFk
SW50KHN0YXJ0LCBlbmQsICZzdGFydCwgdHJ1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgKnRva2VuRW5kID0gc3RhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgcmVhZEhleERpZ2l0cyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGludCBkaWdpdHMpCi17Ci0gICAgaWYgKGVuZCAtIHN0
YXJ0IDwgZGlnaXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGRpZ2l0czsgKytpKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpzdGFy
dCsrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAqdG9rZW5FbmQg
PSBzdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBwYXJzZVN0cmluZ1Rva2VuKGNv
bnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVu
ZCkKLXsKLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgVUNoYXIgYyA9ICpzdGFy
dCsrOwotICAgICAgICBpZiAoJ1xcJyA9PSBjKSB7Ci0gICAgICAgICAgICBjID0gKnN0YXJ0Kys7
Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGVzY2FwZWQgY2hhciBpcyB2YWxpZC4KLSAg
ICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFyZWFkSGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgMikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIGlmICghcmVhZEhleERpZ2l0cyhzdGFy
dCwgZW5kLCAmc3RhcnQsIDQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAg
ICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgY2FzZSAnZic6
Ci0gICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAgICAg
ICAgY2FzZSAndCc6Ci0gICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgIGNhc2UgJyIn
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
JyInID09IGMpIHsKLSAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVRva2VuIHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhcioqIHRva2VuU3RhcnQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCi17Ci0gICAg
d2hpbGUgKHN0YXJ0IDwgZW5kICYmIGlzU3BhY2VPck5ld2xpbmUoKnN0YXJ0KSkKLSAgICAgICAg
KytzdGFydDsKLQotICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAgICAgIHJldHVybiBJTlZBTElE
X1RPS0VOOwotCi0gICAgKnRva2VuU3RhcnQgPSBzdGFydDsKLQotICAgIHN3aXRjaCAoKnN0YXJ0
KSB7Ci0gICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVu
ZCwgdG9rZW5FbmQsIG51bGxTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIE5VTExfVE9LRU47
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRv
a2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVlU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVy
biBCT09MX1RSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAo
cGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCi0gICAg
ICAgICAgICByZXR1cm4gQk9PTF9GQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnWyc6
Ci0gICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIEFSUkFZX0JF
R0lOOwotICAgIGNhc2UgJ10nOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0gICAg
ICAgIHJldHVybiBBUlJBWV9FTkQ7Ci0gICAgY2FzZSAnLCc6Ci0gICAgICAgICp0b2tlbkVuZCA9
IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIExJU1RfU0VQQVJBVE9SOwotICAgIGNhc2UgJ3sn
OgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
QkVHSU47Ci0gICAgY2FzZSAnfSc6Ci0gICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKLSAg
ICAgICAgcmV0dXJuIE9CSkVDVF9FTkQ7Ci0gICAgY2FzZSAnOic6Ci0gICAgICAgICp0b2tlbkVu
ZCA9IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9QQUlSX1NFUEFSQVRPUjsKLSAg
ICBjYXNlICcwJzoKLSAgICBjYXNlICcxJzoKLSAgICBjYXNlICcyJzoKLSAgICBjYXNlICczJzoK
LSAgICBjYXNlICc0JzoKLSAgICBjYXNlICc1JzoKLSAgICBjYXNlICc2JzoKLSAgICBjYXNlICc3
JzoKLSAgICBjYXNlICc4JzoKLSAgICBjYXNlICc5JzoKLSAgICBjYXNlICctJzoKLSAgICAgICAg
aWYgKHBhcnNlTnVtYmVyVG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQpKQotICAgICAgICAgICAg
cmV0dXJuIE5VTUJFUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnIic6Ci0gICAgICAgIGlm
IChwYXJzZVN0cmluZ1Rva2VuKHN0YXJ0ICsgMSwgZW5kLCB0b2tlbkVuZCkpCi0gICAgICAgICAg
ICByZXR1cm4gU1RSSU5HOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gSU5W
QUxJRF9UT0tFTjsKLX0KLQotYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kLCBTdHJpbmdCdWlsZGVyJiBvdXRwdXQpCi17Ci0gICAgd2hpbGUgKHN0
YXJ0IDwgZW5kKSB7Ci0gICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsKLSAgICAgICAgaWYgKCdc
XCcgIT0gYykgewotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGMgPSAqc3RhcnQrKzsKLSAgICAgICAgc3dpdGNo
IChjKSB7Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgY2Fz
ZSAnXFwnOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2InOgotICAgICAgICAg
ICAgYyA9ICdcYic7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnZic6Ci0gICAg
ICAgICAgICBjID0gJ1xmJzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICduJzoK
LSAgICAgICAgICAgIGMgPSAnXG4nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
J3InOgotICAgICAgICAgICAgYyA9ICdccic7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAndCc6Ci0gICAgICAgICAgICBjID0gJ1x0JzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgIGMgPSAnXHYnOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgYyA9IHRvQVNDSUlIZXhWYWx1ZShzdGFy
dFswXSwgc3RhcnRbMV0pOwotICAgICAgICAgICAgc3RhcnQgKz0gMjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJSGV4VmFsdWUo
c3RhcnRbMF0sIHN0YXJ0WzFdKSA8PCA4IHwgdG9BU0NJSUhleFZhbHVlKHN0YXJ0WzJdLCBzdGFy
dFszXSk7Ci0gICAgICAgICAgICBzdGFydCArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgb3V0cHV0LmFwcGVuZChjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTdHJp
bmcmIG91dHB1dCkKLXsKLSAgICBpZiAoc3RhcnQgPT0gZW5kKSB7Ci0gICAgICAgIG91dHB1dCA9
IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChz
dGFydCA+IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nQnVpbGRlciBi
dWZmZXI7Ci0gICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7Ci0gICAgaWYg
KCFkZWNvZGVTdHJpbmcoc3RhcnQsIGVuZCwgYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgb3V0cHV0ID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRo
KQotewotICAgIGlmIChkZXB0aCA+IHN0YWNrTGltaXQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7Ci0gICAgY29uc3QgVUNoYXIq
IHRva2VuU3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIHRva2VuRW5kOwotICAgIFRva2VuIHRva2Vu
ID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJTlZBTElEX1RPS0VOOgotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBjYXNlIE5VTExfVE9LRU46Ci0gICAgICAgIHJlc3VsdCA9IEluc3BlY3Rv
clZhbHVlOjpudWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQk9PTF9UUlVFOgotICAg
ICAgICByZXN1bHQgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHRydWUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEJPT0xfRkFMU0U6Ci0gICAgICAgIHJlc3VsdCA9IEluc3BlY3RvclZhbHVl
OjpjcmVhdGUoZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5VTUJFUjogewotICAg
ICAgICBib29sIG9rOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBjaGFyYWN0ZXJzVG9Eb3VibGUo
dG9rZW5TdGFydCwgdG9rZW5FbmQgLSB0b2tlblN0YXJ0LCAmb2spOwotICAgICAgICBpZiAoIW9r
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3VsdCA9IEluc3BlY3Rv
clZhbHVlOjpjcmVhdGUodmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBT
VFJJTkc6IHsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBib29sIG9rID0gZGVjb2Rl
U3RyaW5nKHRva2VuU3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsIHZhbHVlKTsKLSAgICAgICAgaWYg
KCFvaykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBJbnNw
ZWN0b3JWYWx1ZTo6Y3JlYXRlKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgQVJSQVlfQkVHSU46IHsKLSAgICAgICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKLSAgICAg
ICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQp
OwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwg
d2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgICAgIHN0
YXJ0ID0gdG9rZW5FbmQ7Ci0gICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVu
ZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT0gTElT
VF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotICAgICAg
ICAgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRv
a2VuRW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQVJSQVlfRU5EKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodG9r
ZW4gIT0gQVJSQVlfRU5EKSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB2YWx1ZSBh
ZnRlciBsaXN0IHZhbHVlLiAgQmFpbCBvdXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuICE9IEFSUkFZ
X0VORCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKGFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgT0JKRUNUX0JFR0lO
OiB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7Ci0gICAgICAgIHRva2VuID0g
cGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKLSAgICAgICAg
d2hpbGUgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBT
VFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBTdHJp
bmcga2V5OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVTdHJpbmcodG9rZW5TdGFydCArIDEsIHRv
a2VuRW5kIC0gMSwga2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7Ci0KLSAgICAgICAgICAgIHRva2VuID0gcGFyc2VUb2tl
bihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKLSAgICAgICAgICAgIGlmICh0
b2tlbiAhPSBPQkpFQ1RfUEFJUl9TRVBBUkFUT1IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotCi0gICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5F
bmQsIGRlcHRoICsgMSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIFdURk1v
dmUodmFsdWUpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7Ci0KLSAgICAgICAgICAg
IC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQg
b2YgdGhlCi0gICAgICAgICAgICAvLyBvYmplY3QuCi0gICAgICAgICAgICB0b2tlbiA9IHBhcnNl
VG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAgICBp
ZiAodG9rZW4gPT0gTElTVF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwotICAgICAgICAgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAm
dG9rZW5TdGFydCwgJnRva2VuRW5kKTsKLSAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IE9C
SkVDVF9FTkQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5EKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VW5leHBlY3RlZCB2YWx1ZSBhZnRlciBsYXN0IG9iamVjdCB2YWx1ZS4gIEJhaWwgb3V0LgotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5EKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIHJlc3VsdCA9IFdURk1vdmUob2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gV2UgZ290IGEgdG9rZW4gdGhhdCdzIG5v
dCBhIHZhbHVlLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgKnZhbHVlVG9r
ZW5FbmQgPSB0b2tlbkVuZDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgYm9vbCBl
c2NhcGVDaGFyKFVDaGFyIGMsIFN0cmluZ0J1aWxkZXImIGRzdCkKLXsKLSAgICBzd2l0Y2ggKGMp
IHsKLSAgICBjYXNlICdcYic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXGIiKTsgYnJlYWs7Ci0gICAg
Y2FzZSAnXGYnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFxmIik7IGJyZWFrOwotICAgIGNhc2UgJ1xu
JzogZHN0LmFwcGVuZExpdGVyYWwoIlxcbiIpOyBicmVhazsKLSAgICBjYXNlICdccic6IGRzdC5h
cHBlbmRMaXRlcmFsKCJcXHIiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXHQnOiBkc3QuYXBwZW5kTGl0
ZXJhbCgiXFx0Iik7IGJyZWFrOwotICAgIGNhc2UgJ1xcJzogZHN0LmFwcGVuZExpdGVyYWwoIlxc
XFwiKTsgYnJlYWs7Ci0gICAgY2FzZSAnIic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXFwiIik7IGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyLCBTdHJpbmdCdWlsZGVyJiBkc3QpCi17Ci0gICAgZHN0LmFwcGVuZCgnIicpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBV
Q2hhciBjID0gc3RyW2ldOwotICAgICAgICBpZiAoIWVzY2FwZUNoYXIoYywgZHN0KSkgewotICAg
ICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI2IHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7
Ci0gICAgICAgICAgICAgICAgLy8gMS4gRXNjYXBpbmcgPCwgPiB0byBwcmV2ZW50IHNjcmlwdCBl
eGVjdXRpb24uCi0gICAgICAgICAgICAgICAgLy8gMi4gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFs
c28gcGFzcyB0aHJvdWdoIGMgPiAxMjYgYXMgVVRGOCwgYnV0IHRoaXMKLSAgICAgICAgICAgICAg
ICAvLyAgICBpcyBhbHNvIG9wdGlvbmFsLiAgSXQgd291bGQgYWxzbyBiZSBhIHBhaW4gdG8gaW1w
bGVtZW50IGhlcmUuCi0gICAgICAgICAgICAgICAgZHN0LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgi
XFx1JTA0WCIsIGMpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGRzdC5h
cHBlbmQoYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHN0LmFwcGVuZCgnIicpOwotfQotCi19
IC8vIGFub255bW91cyBuYW1lc3BhY2UKK25hbWVzcGFjZSBXVEYgewogCi1SZWY8SW5zcGVjdG9y
VmFsdWU+IEluc3BlY3RvclZhbHVlOjpudWxsKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JWYWx1ZSk7Ci19Ci0KLVJlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFs
dWU6OmNyZWF0ZShib29sIHZhbHVlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3Bl
Y3RvclZhbHVlKHZhbHVlKSk7Ci19Ci0KLVJlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFs
dWU6OmNyZWF0ZShpbnQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVj
dG9yVmFsdWUodmFsdWUpKTsKLX0KLQotUmVmPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1
ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNw
ZWN0b3JWYWx1ZSh2YWx1ZSkpOwotfQorY2xhc3MgU3RyaW5nQnVpbGRlcjsKIAotUmVmPEluc3Bl
Y3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yVmFsdWUodmFsdWUpKTsKLX0KK2Ns
YXNzIFN0cmluZyB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWYgeyB9OwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsgfTsKIAotUmVmPEluc3BlY3RvclZhbHVl
PiBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEluc3BlY3RvclZhbHVlKHZhbHVlKSk7Ci19Ci0KLWJvb2wgSW5zcGVj
dG9yVmFsdWU6OmFzVmFsdWUoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+ICYgdmFs
dWUpCi17Ci0gICAgdmFsdWUgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElu
c3BlY3RvclZhbHVlOjphc09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluc3BlY3RvclZhbHVlOjphc0FycmF5KFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0
b3JWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+JiBvdXRwdXQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91
bGQganVzdCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQg
dXBjb252ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBjaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb25JbnB1dC5sZW5ndGgo
KTsKLSAgICBjb25zdCBVQ2hhciogdG9rZW5FbmQ7Ci0gICAgYXV0byByZXN1bHQgPSBidWlsZFZh
bHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgdG9rZW5F
bmQgIT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBXVEZNb3Zl
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6
dG9KU09OU3RyaW5nKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7Ci0gICAgd3JpdGVKU09OKHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1ib29sIEluc3BlY3RvclZhbHVlOjphc0Jv
b2xlYW4oYm9vbCYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9v
bGVhbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29s
ZWFuOwotICAgIHJldHVybiB0cnVlOwotfQorfSAvLyBuYW1lc3BhY2UgV1RGCiAKLWJvb2wgSW5z
cGVjdG9yVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0
eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Cit1c2luZyBXVEY6
OlJlZjsKK3VzaW5nIFdURjo6UmVmUHRyOwordXNpbmcgV1RGOjpTdHJpbmc7Cit1c2luZyBXVEY6
OlN0cmluZ0J1aWxkZXI7CiAKLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNEb3VibGUoZmxvYXQmIG91dHB1
dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUubnVt
YmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJbnRl
Z2VyKGludCYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdl
ciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcihsb25nJiBvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3Vi
bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0
b3JWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0
eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1f
dmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1
ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlw
ZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEluc3BlY3RvclZh
bHVlOjphc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEluc3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OlN0cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
b3V0cHV0ID0gbV92YWx1ZS5zdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Ci17Ci0g
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFR5cGU6Ok51bGw6Ci0gICAgICAgIG91dHB1
dC5hcHBlbmRMaXRlcmFsKCJudWxsIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6
Qm9vbGVhbjoKLSAgICAgICAgaWYgKG1fdmFsdWUuYm9vbGVhbikKLSAgICAgICAgICAgIG91dHB1
dC5hcHBlbmRMaXRlcmFsKCJ0cnVlIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dHB1
dC5hcHBlbmRMaXRlcmFsKCJmYWxzZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6
OlN0cmluZzoKLSAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcobV92YWx1ZS5zdHJpbmcsIG91dHB1
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6RG91YmxlOgotICAgIGNhc2UgVHlw
ZTo6SW50ZWdlcjogewotICAgICAgICBOdW1iZXJUb0xTdHJpbmdCdWZmZXIgYnVmZmVyOwotICAg
ICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobV92YWx1ZS5udW1iZXIpKSB7Ci0gICAgICAgICAgICBv
dXRwdXQuYXBwZW5kTGl0ZXJhbCgibnVsbCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIERlY2ltYWxOdW1iZXIgZGVjaW1hbCA9IG1fdmFsdWUubnVtYmVyOwotICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoZGVjaW1hbC5idWZmZXJMZW5n
dGhGb3JTdHJpbmdEZWNpbWFsKCkgPiBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKSB7
Ci0gICAgICAgICAgICAvLyBOb3QgZW5vdWdoIHJvb20gZm9yIGRlY2ltYWwuIFVzZSBleHBvbmVu
dGlhbCBmb3JtYXQuCi0gICAgICAgICAgICBpZiAoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JTdHJp
bmdFeHBvbmVudGlhbCgpID4gV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkgewotICAg
ICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBhbiBhYm5vcm1hbCBjYXNlIGlmIGl0J3MgdG9v
IGxpdHRsZSBldmVuIGZvciBleHBvbmVudGlhbC4KLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kTGl0ZXJhbCgiTmFOIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0V4cG9uZW50aWFsKGJ1ZmZl
ciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZChidWZmZXIs
IGxlbmd0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXNpemVfdCBJbnNwZWN0b3JWYWx1ZTo6
bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBzaXplb2YodGhp
cyk7Ci0gICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpTdHJpbmcgJiYgbV92YWx1ZS5zdHJpbmcpCi0g
ICAgICAgIG1lbW9yeUNvc3QgKz0gbV92YWx1ZS5zdHJpbmctPnNpemVJbkJ5dGVzKCk7Ci0gICAg
cmV0dXJuIG1lbW9yeUNvc3Q7Ci19Ci0KLUluc3BlY3Rvck9iamVjdEJhc2U6On5JbnNwZWN0b3JP
YmplY3RCYXNlKCkKLXsKLX0KLQotYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjphc09iamVjdChS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0cHV0KQotewotICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihJbnNwZWN0b3JPYmplY3QpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3RCYXNlKSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0Kj4o
dGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKK2NsYXNzIElu
c3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yQXJyYXlCYXNlOworY2xhc3MgSW5zcGVjdG9y
T2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0QmFzZTsKK2NsYXNzIEluc3BlY3RvclZhbHVl
OwogfQogCi1JbnNwZWN0b3JPYmplY3QqIEluc3BlY3Rvck9iamVjdEJhc2U6Om9wZW5BY2Nlc3Nv
cnMoKQotewotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3JPYmplY3QpID09IHNp
emVvZihJbnNwZWN0b3JPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdCo+KHRoaXMpOwotfQorbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXNpemVfdCBJbnNwZWN0b3JPYmplY3RCYXNlOjptZW1vcnlDb3N0KCkgY29uc3QKLXsK
LSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IEluc3BlY3RvclZhbHVlOjptZW1vcnlDb3N0KCk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fbWFwKSB7Ci0gICAgICAgIG1lbW9yeUNvc3Qg
Kz0gZW50cnkua2V5LnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSkKLSAg
ICAgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50cnkudmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG1lbW9yeUNvc3Q7Ci19CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNw
ZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0K
KworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yVmFsdWU+IG51bGwoKTsKKyAgICBzdGF0aWMgUmVm
PEluc3BlY3RvclZhbHVlPiBjcmVhdGUoYm9vbCk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JW
YWx1ZT4gY3JlYXRlKGludCk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JWYWx1ZT4gY3JlYXRl
KGRvdWJsZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yVmFsdWU+IGNyZWF0ZShjb25zdCBjaGFy
Kik7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOdWxsID0gMCwKKyAgICAgICAg
Qm9vbGVhbiwKKyAgICAgICAgRG91YmxlLAorICAgICAgICBJbnRlZ2VyLAorICAgICAgICBTdHJp
bmcsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgQXJyYXksCisgICAgfTsKKworICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIFR5cGU6Ok51bGw7IH0KKyAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsK
KyAgICBib29sIGFzSW50ZWdlcihpbnQmKSBjb25zdDsKKyAgICBib29sIGFzSW50ZWdlcih1bnNp
Z25lZCYpIGNvbnN0OworICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKKyAgICBib29s
IGFzSW50ZWdlcihsb25nIGxvbmcmKSBjb25zdDsKKyAgICBib29sIGFzSW50ZWdlcih1bnNpZ25l
ZCBsb25nJikgY29uc3Q7CisgICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikg
Y29uc3Q7CisgICAgYm9vbCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKKyAgICBib29sIGFzRG91
YmxlKGZsb2F0JikgY29uc3Q7CisgICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKKyAg
ICBib29sIGFzVmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYpOworCisgICAgdmlydHVhbCBi
b29sIGFzT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Jik7CisgICAgdmlydHVhbCBib29s
IGFzQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOwogCi1ib29sIEluc3BlY3Rvck9iamVj
dEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0
Ci17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBib29sIHBh
cnNlSlNPTihjb25zdCBTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+Jik7CiAKLSAgICBy
ZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOwotfQorICAgIFN0cmluZyB0b0pTT05TdHJp
bmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImKSBj
b25zdDsKIAotYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1dCk7Ci19CisgICAg
dmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OworfTsKIAotYm9vbCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgb3V0cHV0KSBjb25zdAotewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKK1JlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKSB7IHJldHVybiB7
IH07IH0KK1JlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZShib29sKSB7
IHJldHVybiB7IH07IH0KK1JlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OmNyZWF0
ZShpbnQpIHsgcmV0dXJuIHsgfTsgfQorUmVmPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1
ZTo6Y3JlYXRlKGRvdWJsZSkgeyByZXR1cm4geyB9OyB9CitSZWY8SW5zcGVjdG9yVmFsdWU+IElu
c3BlY3RvclZhbHVlOjpjcmVhdGUoY29uc3QgU3RyaW5nJikgeyByZXR1cm4geyB9OyB9CitSZWY8
SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpjcmVhdGUoY29uc3QgY2hhciopIHsgcmV0
dXJuIHsgfTsgfQorCitib29sIEluc3BlY3RvclZhbHVlOjphc1ZhbHVlKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiAmKSB7IHJldHVybiB0cnVlOyB9Citib29sIEluc3BlY3RvclZh
bHVlOjphc09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpIHsgcmV0dXJuIGZhbHNlOyB9
Citib29sIEluc3BlY3RvclZhbHVlOjphc0FycmF5KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKSB7
IHJldHVybiBmYWxzZTsgfQorCitib29sIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oY29uc3Qg
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYpIHsgcmV0dXJuIGZhbHNlOyB9CitTdHJp
bmcgSW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQor
Citib29sIEluc3BlY3RvclZhbHVlOjphc0Jvb2xlYW4oYm9vbCYpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Citib29sIEluc3BlY3RvclZhbHVlOjphc0RvdWJsZShkb3VibGUmKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNEb3VibGUoZmxvYXQmKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCitib29sIEluc3BlY3RvclZhbHVlOjphc0ludGVnZXIoaW50
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdl
cih1bnNpZ25lZCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Citib29sIEluc3BlY3RvclZhbHVl
Ojphc0ludGVnZXIobG9uZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Citib29sIEluc3BlY3Rv
clZhbHVlOjphc0ludGVnZXIobG9uZyBsb25nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK2Jv
b2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25n
IGxvbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitib29sIEluc3BlY3RvclZhbHVlOjph
c1N0cmluZyhTdHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQordm9pZCBJbnNwZWN0b3JW
YWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImKSBjb25zdCB7IH0KK3NpemVfdCBJbnNwZWN0
b3JWYWx1ZTo6bWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworCitjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JPYmplY3RCYXNlIDogcHVibGljIEluc3BlY3RvclZhbHVl
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JPYmplY3QqIG9wZW5BY2Nlc3NvcnMoKTsKKworICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGdldEJvb2xlYW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wgZ2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wg
Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKSBj
b25zdDsKKyAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYpIGNvbnN0OworICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JikgY29uc3Q7CiAKLSAgICByZXR1cm4gdmFsdWUtPmFz
T2JqZWN0KG91dHB1dCk7Ci19CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJik7Cit9Owog
Ci1ib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0cHV0KSBjb25zdAotewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKK0luc3BlY3Rvck9iamVjdCogSW5zcGVjdG9yT2JqZWN0QmFzZTo6
b3BlbkFjY2Vzc29ycygpIHsgcmV0dXJuIG51bGxwdHI7IH0KK3NpemVfdCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjptZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgcmV0dXJuIHZh
bHVlLT5hc0FycmF5KG91dHB1dCk7Ci19Citib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEJv
b2xlYW4oY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Citib29s
IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJp
bmcmLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK2Jv
b2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmKSB7IH0KIAotYm9vbCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4mIG91dHB1dCkgY29uc3QKLXsKLSAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5k
UmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsKLSAgICBpZiAoZmluZFJlc3VsdCA9PSBtX21hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgb3V0cHV0ID0gZmluZFJlc3VsdC0+
dmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19CitjbGFzcyBJbnNwZWN0b3JPYmplY3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIEpTX0VYUE9SVF9Q
UklWQVRFIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgpOworfTsKIAotdm9pZCBJbnNwZWN0
b3JPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fbWFwLnJl
bW92ZShuYW1lKTsKLSAgICBtX29yZGVyLnJlbW92ZUZpcnN0KG5hbWUpOwotfQorUmVmPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSB7IHJldHVybiB7IH07IH0KIAot
dm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0
KSBjb25zdAotewotICAgIG91dHB1dC5hcHBlbmQoJ3snKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fb3JkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0g
bV9tYXAuZmluZChtX29yZGVyW2ldKTsKLSAgICAgICAgQVNTRVJUKGZpbmRSZXN1bHQgIT0gbV9t
YXAuZW5kKCkpOwotICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywn
KTsKLSAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoZmluZFJlc3VsdC0+a2V5LCBvdXRwdXQpOwot
ICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLT53
cml0ZUpTT04ob3V0cHV0KTsKLSAgICB9Ci0gICAgb3V0cHV0LmFwcGVuZCgnfScpOwotfQogCi1J
bnNwZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JPYmplY3RCYXNlKCkKLSAgICA6IEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUoVHlwZTo6T2JqZWN0KQotICAgICwgbV9tYXAoKQotICAgICwgbV9v
cmRlcigpCi17Ci19CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBcnJheUJhc2Ug
OiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgeworcHVibGljOgorICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gZ2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CiAKLUluc3BlY3RvckFycmF5QmFzZTo6fklu
c3BlY3RvckFycmF5QmFzZSgpCi17Ci19CisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBm
aW5hbDsKK307CiAKLWJvb2wgSW5zcGVjdG9yQXJyYXlCYXNlOjphc0FycmF5KFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG91dHB1dCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVj
dG9yQXJyYXlCYXNlKSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCBjYW5ub3RfY2FzdCk7Ci0g
ICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXkqPih0aGlzKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KK1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQXJyYXlCYXNlOjpn
ZXQoc2l6ZV90KSBjb25zdCB7IHJldHVybiB7IH07IH0KK3NpemVfdCBJbnNwZWN0b3JBcnJheUJh
c2U6Om1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLXZvaWQgSW5zcGVjdG9yQXJy
YXlCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAotewotICAgIG91
dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsg
KytpdCkgewotICAgICAgICBpZiAoaXQgIT0gbV9tYXAuYmVnaW4oKSkKLSAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoJywnKTsKLSAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRwdXQpOwotICAg
IH0KLSAgICBvdXRwdXQuYXBwZW5kKCddJyk7Ci19CiAKLUluc3BlY3RvckFycmF5QmFzZTo6SW5z
cGVjdG9yQXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkFycmF5KQotICAg
ICwgbV9tYXAoKQotewotfQorY2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBwdWJsaWMgSW5zcGVjdG9y
QXJyYXlCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUmVmPElu
c3BlY3RvckFycmF5PiBjcmVhdGUoKTsKK307CiAKLVJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5z
cGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9tYXAuc2l6ZSgpKTsKLSAgICByZXR1
cm4gbV9tYXBbaW5kZXhdOwotfQorUmVmPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCkgeyByZXR1cm4geyB9OyB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JP
YmplY3QpOwotfQogCi1SZWY8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckFycmF5KTsKLX0KK2NsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICAvLyBD
T01QQVRJQklMSVRZOiByZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQgYnkgc3lzdGVt
IFdlYkluc3BlY3Rvci5mcmFtZXdvcmsuCisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0KTsKK307CiAKLXNpemVfdCBJ
bnNwZWN0b3JBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHNpemVfdCBtZW1v
cnlDb3N0ID0gSW5zcGVjdG9yVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAgICAgICAgIG1lbW9y
eUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KLSAgICByZXR1cm4gbWVtb3J5Q29z
dDsKLX0KKy8vIENPTVBBVElCSUxJVFk6IHJlbW92ZSB0aGlzIHdoZW4gbm8gbG9uZ2VyIG5lZWRl
ZCBieSBzeXN0ZW0gV2ViSW5zcGVjdG9yLmZyYW1ld29yayA8aHR0cDovL3dlYmtpdC5vcmcvYi8x
Nzk4NDc+Lgordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYpIHsgfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvY29jb2EvRGVwcmVjYXRlZEluc3Bl
Y3RvclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvY29jb2EvRGVwcmVjYXRlZEluc3BlY3RvclZhbHVlcy5oCShyZXZpc2lvbiAyMjU5OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2NvY29hL0RlcHJlY2F0ZWRJbnNwZWN0
b3JWYWx1ZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkpTRXhwb3J0TWFjcm9zLmgiCi0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVjdG9yQXJy
YXlCYXNlOwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0QmFz
ZTsKLWNsYXNzIEluc3BlY3RvclZhbHVlOwotfQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnNwZWN0b3JWYWx1ZT4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4RGVw
dGggPSAxMDAwOwotCi0gICAgdmlydHVhbCB+SW5zcGVjdG9yVmFsdWUoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpOdWxsOgotICAgICAgICBj
YXNlIFR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGNhc2UgVHlwZTo6RG91YmxlOgotICAgICAgICBj
YXNlIFR5cGU6OkludGVnZXI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBl
OjpTdHJpbmc6Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS5zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbV92YWx1ZS5zdHJpbmctPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBUeXBlOjpPYmplY3Q6Ci0gICAgICAgIGNhc2UgVHlwZTo6QXJyYXk6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yVmFs
dWU+IG51bGwoKTsKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvclZhbHVlPiBjcmVhdGUoYm9vbCk7
Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JWYWx1ZT4gY3JlYXRlKGludCk7Ci0gICAgc3RhdGlj
IFJlZjxJbnNwZWN0b3JWYWx1ZT4gY3JlYXRlKGRvdWJsZSk7Ci0gICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3JWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBSZWY8SW5zcGVj
dG9yVmFsdWU+IGNyZWF0ZShjb25zdCBjaGFyKik7Ci0KLSAgICBlbnVtIGNsYXNzIFR5cGUgewot
ICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgQm9vbGVhbiwKLSAgICAgICAgRG91YmxlLAotICAg
ICAgICBJbnRlZ2VyLAotICAgICAgICBTdHJpbmcsCi0gICAgICAgIE9iamVjdCwKLSAgICAgICAg
QXJyYXksCi0gICAgfTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51bGw7
IH0KLQotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdl
cihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0OwotICAg
IGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25nIGxv
bmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7Ci0g
ICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBh
c0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29uc3Q7
Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUoUmVm
UHRyPEluc3BlY3RvclZhbHVlPiYpOwotCi0gICAgdmlydHVhbCBib29sIGFzT2JqZWN0KFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPElu
c3BlY3RvckFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0cmlu
ZyYganNvbklucHV0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpOwotCi0gICAgU3Ry
aW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNv
c3QoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclZhbHVlKCkKLSAgICAgICAg
OiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9Ci0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JWYWx1ZShU
eXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpIHsgfQotCi0gICAgZXhwbGljaXQgSW5z
cGVjdG9yVmFsdWUoYm9vbCB2YWx1ZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6Qm9vbGVhbikK
LSAgICB7Ci0gICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9IHZhbHVlOwotICAgIH0KLQotICAgIGV4
cGxpY2l0IEluc3BlY3RvclZhbHVlKGludCB2YWx1ZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6
SW50ZWdlcikKLSAgICB7Ci0gICAgICAgIG1fdmFsdWUubnVtYmVyID0gc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoZG91Ymxl
IHZhbHVlKQotICAgICAgICA6IG1fdHlwZShUeXBlOjpEb3VibGUpCi0gICAgewotICAgICAgICBt
X3ZhbHVlLm51bWJlciA9IHZhbHVlOwotICAgIH0KLQotICAgIGV4cGxpY2l0IEluc3BlY3RvclZh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OlN0cmluZykK
LSAgICB7Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5nID0gdmFsdWUuaW1wbCgpOwotICAgICAgICBp
ZiAobV92YWx1ZS5zdHJpbmcpCi0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+cmVmKCk7Ci0g
ICAgfQotCi0gICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoY29uc3QgY2hhciogdmFsdWUpCi0g
ICAgICAgIDogbV90eXBlKFR5cGU6OlN0cmluZykKLSAgICB7Ci0gICAgICAgIFN0cmluZyB3cmFw
cGVyKHZhbHVlKTsKLSAgICAgICAgbV92YWx1ZS5zdHJpbmcgPSB3cmFwcGVyLmltcGwoKTsKLSAg
ICAgICAgaWYgKG1fdmFsdWUuc3RyaW5nKQotICAgICAgICAgICAgbV92YWx1ZS5zdHJpbmctPnJl
ZigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBUeXBlIG1fdHlwZSB7IFR5cGU6Ok51bGwgfTsK
LSAgICB1bmlvbiB7Ci0gICAgICAgIGJvb2wgYm9vbGVhbjsKLSAgICAgICAgZG91YmxlIG51bWJl
cjsKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgIH0gbV92YWx1ZTsKLX07Ci0KLWNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3Rvck9iamVjdEJhc2UgOiBwdWJsaWMgSW5zcGVj
dG9yVmFsdWUgewotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+PiBEaWN0aW9uYXJ5OwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBEaWN0
aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25hcnk6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgSW5zcGVjdG9yT2JqZWN0KiBvcGVuQWNj
ZXNzb3JzKCk7Ci0KLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yT2JqZWN0QmFzZSgpOwotCi0gICAgYm9vbCBh
c09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0cHV0KSBvdmVycmlkZTsKLQotICAg
IC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0
ZWQgc2V0KigpIG1ldGhvZHMuCi0gICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCk7Ci0gICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50KTsK
LSAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7Ci0gICAgdm9p
ZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3RCYXNlPiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVm
UHRyPEluc3BlY3RvckFycmF5QmFzZT4mJik7Ci0KLSAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSk7Ci0gICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwotCi0gICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91
bnQgb2YgZHVwbGljYXRlZCBnZXQqKCkgbWV0aG9kcy4KLSAgICBib29sIGdldEJvb2xlYW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IFQ+IGJvb2wgZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAot
ICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYg
KCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZShvdXRwdXQpOwotICAgIH0KLSAgICB0ZW1wbGF0
ZTxjbGFzcyBUPiBib29sIGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQp
IGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAg
ICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcihvdXRwdXQpOwotICAgIH0KLQot
ICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNv
bnN0OwotICAgIGJvb2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mKSBjb25zdDsKLSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpIGNvbnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29u
c3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JikgY29uc3Q7Ci0KLSAgICB2
b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKLQotICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IG1fbWFwLmVuZCgpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX21hcC5iZWdpbigpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JPYmplY3RCYXNlKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVy
OwotfTsKLQotY2xhc3MgSW5zcGVjdG9yT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdEJh
c2UgewotcHVibGljOgotICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGUoKTsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmFzT2Jq
ZWN0OwotCi0gICAgLy8gVGhpcyBjbGFzcyBleHBlY3RlZCBub24tY3ljbGljIHZhbHVlcywgYXMg
d2UgY2Fubm90IHNlcmlhbGl6ZSBjeWNsZXMgaW4gSlNPTi4KLSAgICB1c2luZyBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRCb29sZWFuOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNl
dEludGVnZXI7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlOwotICAg
IHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmluZzsKLSAgICB1c2luZyBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRWYWx1ZTsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpz
ZXRPYmplY3Q7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXk7Ci0KLSAg
ICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpmaW5kOwotICAgIHVzaW5nIEluc3BlY3Rvck9i
amVjdEJhc2U6OmdldEJvb2xlYW47Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0
SW50ZWdlcjsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXREb3VibGU7Ci0gICAg
dXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0U3RyaW5nOwotICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdEJhc2U6OmdldE9iamVjdDsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpn
ZXRBcnJheTsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZTsKLQotICAg
IHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnJlbW92ZTsKLQotICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdEJhc2U6OmJlZ2luOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmVuZDsK
LQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNpemU7Ci19OwotCi0KLWNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckFycmF5QmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1
ZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPj46
Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX21hcC5zaXplKCkp
OyB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0
OwotCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbDsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgfkluc3BlY3RvckFycmF5QmFzZSgpOwotCi0gICAgYm9vbCBhc0FycmF5KFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcHVzaEJvb2xlYW4o
Ym9vbCk7Ci0gICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOwotICAgIHZvaWQgcHVzaERvdWJsZShk
b3VibGUpOwotICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHB1
c2hWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYpOwotICAgIHZvaWQgcHVzaE9iamVjdChS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBwdXNoQXJyYXkoUmVmUHRy
PEluc3BlY3RvckFycmF5QmFzZT4mJik7Ci0KLSAgICB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yQXJyYXlCYXNlKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4+IG1fbWFwOwotfTsKLQot
Y2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3RvckFycmF5PiBjcmVh
dGUoKTsKLQotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6YXNBcnJheTsKLQotICAgIC8v
IFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJp
YWxpemUgY3ljbGVzIGluIEpTT04uCi0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNo
Qm9vbGVhbjsKLSAgICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwotICAg
IHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaERvdWJsZTsKLSAgICB1c2luZyBJbnNwZWN0
b3JBcnJheUJhc2U6OnB1c2hTdHJpbmc7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpw
dXNoVmFsdWU7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0OwotICAg
IHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5OwotCi0gICAgdXNpbmcgSW5zcGVj
dG9yQXJyYXlCYXNlOjpnZXQ7Ci0KLSAgICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OmJlZ2lu
OwotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6ZW5kOwotfTsKLQotCi1pbmxpbmUgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6aXRlcmF0b3IgSW5zcGVjdG9yT2JqZWN0QmFzZTo6ZmluZChjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fbWFwLmZpbmQobmFtZSk7Ci19Ci0KLWlu
bGluZSBJbnNwZWN0b3JPYmplY3RCYXNlOjpjb25zdF9pdGVyYXRvciBJbnNwZWN0b3JPYmplY3RC
YXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tYXAu
ZmluZChuYW1lKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0Qm9v
bGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpCi17Ci0gICAgc2V0VmFsdWUobmFt
ZSwgSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHZhbHVl
KQotewotICAgIHNldFZhbHVlKG5hbWUsIEluc3BlY3RvclZhbHVlOjpjcmVhdGUodmFsdWUpKTsK
LX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKGNvbnN0IFN0
cmluZyYgbmFtZSwgZG91YmxlIHZhbHVlKQotewotICAgIHNldFZhbHVlKG5hbWUsIEluc3BlY3Rv
clZhbHVlOjpjcmVhdGUodmFsdWUpKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRWYWx1ZShuYW1lLCBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Ci19
Ci0KLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQotewotICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRy
eSkKLSAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3RCYXNlPiYmIHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYg
KG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKLSAgICAgICAgbV9v
cmRlci5hcHBlbmQobmFtZSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4m
JiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX21hcC5zZXQobmFtZSwg
V1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCi0gICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUp
OwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hCb29sZWFuKGJvb2wg
dmFsdWUpCi17Ci0gICAgbV9tYXAuYXBwZW5kKEluc3BlY3RvclZhbHVlOjpjcmVhdGUodmFsdWUp
KTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoSW50ZWdlcihpbnQg
dmFsdWUpCi17Ci0gICAgbV9tYXAuYXBwZW5kKEluc3BlY3RvclZhbHVlOjpjcmVhdGUodmFsdWUp
KTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoRG91YmxlKGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICBtX21hcC5hcHBlbmQoSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh2YWx1
ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX21hcC5hcHBlbmQoSW5zcGVjdG9yVmFsdWU6OmNy
ZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hW
YWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVl
KTsKLSAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+
JiYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBtX21hcC5hcHBlbmQoV1RGTW92
ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hBcnJh
eShSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiYmIHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1
ZSk7Ci0gICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2NvY29hL0RlcHJlY2F0ZWRJbnNwZWN0b3JWYWx1ZXMuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkK
</data>
<flag name="review"
          id="348646"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>