<?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>77967</bug_id>
          
          <creation_ts>2012-02-07 04:53:52 -0800</creation_ts>
          <short_desc>Web Inspector: Optional out arguments are not supported in the Web Inspector protocol, which breaks the implementation</short_desc>
          <delta_ts>2012-02-08 08:17:41 -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>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>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Peter Rybin">peter.rybin</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>prybin</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>550863</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-02-07 04:53:52 -0800</bug_when>
    <thetext>Please fix ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551361</commentid>
    <comment_count>1</comment_count>
      <attachid>125924</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-07 14:09:31 -0800</bug_when>
    <thetext>Created attachment 125924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551374</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-07 14:15:32 -0800</bug_when>
    <thetext>Alexander, I propose this patch. It support optional returns for RefPtr-based types. However you would have to manually clear RefPtr in order to not return a value.

You might expect that the proper way would be to pass empty RefPtr in the first place, but unfortunately this is much harder to implement right now and it would interfere with a refactoring that I&apos;m doing on the same part of generator code.

Please consider using this schema as a temporary solution. You can put FIXME comment at each RefPtr clearing site. I&apos;m going to iterate over all returns in the future when landing my refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552062</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-02-08 06:03:09 -0800</bug_when>
    <thetext>Could you attach generated files diff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552109</commentid>
    <comment_count>4</comment_count>
      <attachid>126080</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-08 07:32:18 -0800</bug_when>
    <thetext>Created attachment 126080
original InspectorBackendDispatcher.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552110</commentid>
    <comment_count>5</comment_count>
      <attachid>126081</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-08 07:33:54 -0800</bug_when>
    <thetext>Created attachment 126081
new InspectorBackendDispatcher.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552132</commentid>
    <comment_count>6</comment_count>
      <attachid>125924</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 08:17:36 -0800</bug_when>
    <thetext>Comment on attachment 125924
Patch

Clearing flags on attachment: 125924

Committed r107091: &lt;http://trac.webkit.org/changeset/107091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552133</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 08:17:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125924</attachid>
            <date>2012-02-07 14:09:31 -0800</date>
            <delta_ts>2012-02-08 08:17:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77967-20120208020929.patch</filename>
            <type>text/plain</type>
            <size>2219</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI3YTI1YWZiMmJkOTEw
MTNkNDc1OWVkZWE0NjNiOTAzMGVmNzY2Zi4uMGE5NmFmNDczOGE4NmIyOTFkYzhjNDVmZjJjMThj
ZTk2MWQ2NTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAyLTA3ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBPcHRpb25hbCBvdXQgYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoZSBXZWIgSW5z
cGVjdG9yIHByb3RvY29sLCB3aGljaCBicmVha3MgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzk2NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbmRpdGlvbiBmb3IgUmVm
UHRyLWJhc2VkIHR5cGVzIGFkZGVkLiBUaGlzIGlzIG1vcmUtb3ItbGVzcyBhIGhhY2sKKyAgICAg
ICAgYW5kIGl0J3Mgc2hvdWxkIGJlIHJlZG9uZSB0b2dldGhlciB3aXRoIHRoZSBzd2l0Y2ggdG8g
dHlwZS1zYWZlIEFQSS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZCk6CisKIDIwMTItMDIt
MDYgIEV1Z2VuZSBHaXJhcmQgIDxnaXJhcmRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4
ZWREQiBjcmVhdGVPYmplY3RTdG9yZSBzaG91bGQgdGhyb3cgaWYgb3B0aW9ucyBhcmcgaXMgaW52
YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQppbmRleCAyMTA2NDJiYTFlOGE4YmNjY2NkYThkNmNhYjUyODBlYWE3M2E1MTQ0Li45
MzA4NjMyYzFlYTI3ZTgyMWZjYTBhNmQ1Zjg2ZDZiMDI1ODk0Yjk2IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtMjY2MSw4
ICsyNjYxLDkgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgIHBhcmFtID0gIiwg
JXNvdXRfJXMiICUgKHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9hcmd1bWVu
dF9wcmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKICAgICAgICAgICAgICAgICBjb29rID0gIiAg
ICAgICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90eXBlLCBq
c29uX3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQogICAgICAgICAgICAgICAgIGlmIG9w
dGlvbmFsOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogc3VwcG9ydCBvcHRpb25h
bCBwcm9wZXJseS4gUHJvYmFibHkgYW4gYWRkaXRpb25hbCBvdXRwdXQgcGFyYW1ldGVyIHNob3Vs
ZCBiZSBpbiBlYWNoIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIGlmIHZhcl90eXBlLmdldF90
ZXh0KCkgPT0gImJvb2wiOgorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0IG9w
dGlvbmFsIHByb3Blcmx5LiBQcm9iYWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0ZXIg
c2hvdWxkIGJlIGluIGVhY2ggY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcmVm
YWN0b3IgdGhpcyBjb25kaXRpb247IGl0J3MgYSBoYWNrIG5vdy4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgb3IgdmFyX3R5cGUuZ2V0X3RleHQo
KS5zdGFydHN3aXRoKCJSZWZQdHI8Iik6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb29rID0g
KCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vawog
ICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9
ICIgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuXG4iICsgY29vawo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>126080</attachid>
            <date>2012-02-08 07:32:18 -0800</date>
            <delta_ts>2012-02-08 07:32:18 -0800</delta_ts>
            <desc>original InspectorBackendDispatcher.cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>text/plain</type>
            <size>194447</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1
ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiAgICAiSW5zcGVjdG9yLmVuYWJsZSIsCiAg
ICAiSW5zcGVjdG9yLmRpc2FibGUiLAogICAgIk1lbW9yeS5nZXRET01Ob2RlQ291bnQiLAogICAg
IlBhZ2UuZW5hYmxlIiwKICAgICJQYWdlLmRpc2FibGUiLAogICAgIlBhZ2UuYWRkU2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZCIsCiAgICAiUGFnZS5yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwK
ICAgICJQYWdlLnJlbG9hZCIsCiAgICAiUGFnZS5uYXZpZ2F0ZSIsCiAgICAiUGFnZS5nZXRDb29r
aWVzIiwKICAgICJQYWdlLmRlbGV0ZUNvb2tpZSIsCiAgICAiUGFnZS5nZXRSZXNvdXJjZVRyZWUi
LAogICAgIlBhZ2UuZ2V0UmVzb3VyY2VDb250ZW50IiwKICAgICJQYWdlLnNlYXJjaEluUmVzb3Vy
Y2UiLAogICAgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZXMiLAogICAgIlBhZ2Uuc2V0RG9jdW1lbnRD
b250ZW50IiwKICAgICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIsCiAgICAiUnVudGltZS5l
dmFsdWF0ZSIsCiAgICAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIsCiAgICAiUnVudGltZS5nZXRQ
cm9wZXJ0aWVzIiwKICAgICJSdW50aW1lLnJlbGVhc2VPYmplY3QiLAogICAgIlJ1bnRpbWUucmVs
ZWFzZU9iamVjdEdyb3VwIiwKICAgICJSdW50aW1lLnJ1biIsCiAgICAiQ29uc29sZS5lbmFibGUi
LAogICAgIkNvbnNvbGUuZGlzYWJsZSIsCiAgICAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiwKICAg
ICJDb25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIiwKICAgICJDb25zb2xlLmFkZEluc3Bl
Y3RlZE5vZGUiLAogICAgIk5ldHdvcmsuZW5hYmxlIiwKICAgICJOZXR3b3JrLmRpc2FibGUiLAog
ICAgIk5ldHdvcmsuc2V0VXNlckFnZW50T3ZlcnJpZGUiLAogICAgIk5ldHdvcmsuc2V0RXh0cmFI
VFRQSGVhZGVycyIsCiAgICAiTmV0d29yay5nZXRSZXNwb25zZUJvZHkiLAogICAgIk5ldHdvcmsu
Y2FuQ2xlYXJCcm93c2VyQ2FjaGUiLAogICAgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiLAog
ICAgIk5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsCiAgICAiTmV0d29yay5jbGVhckJy
b3dzZXJDb29raWVzIiwKICAgICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiLAojaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKCiAgICAiRGF0YWJhc2UuZW5hYmxlIiwKICAgICJEYXRhYmFzZS5kaXNh
YmxlIiwKICAgICJEYXRhYmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiLAogICAgIkRhdGFiYXNl
LmV4ZWN1dGVTUUwiLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKCiAgICAiSW5kZXhlZERCLmVuYWJsZSIsCiAgICAiSW5kZXhlZERC
LmRpc2FibGUiLAogICAgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lIiwK
ICAgICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKICAgICJET01TdG9yYWdlLmVuYWJsZSIsCiAgICAiRE9NU3RvcmFnZS5kaXNh
YmxlIiwKICAgICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiwKICAgICJET01TdG9y
YWdlLnNldERPTVN0b3JhZ2VJdGVtIiwKICAgICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJ
dGVtIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMiLAogICAg
IkFwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldE1hbmlm
ZXN0Rm9yRnJhbWUiLAogICAgIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZv
ckZyYW1lIiwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAiRmlsZVN5c3RlbS5lbmFibGUi
LAogICAgIkZpbGVTeXN0ZW0uZGlzYWJsZSIsCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0p
CgogICAgIkRPTS5nZXREb2N1bWVudCIsCiAgICAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiwKICAg
ICJET00ucXVlcnlTZWxlY3RvciIsCiAgICAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLAogICAgIkRP
TS5zZXROb2RlTmFtZSIsCiAgICAiRE9NLnNldE5vZGVWYWx1ZSIsCiAgICAiRE9NLnJlbW92ZU5v
ZGUiLAogICAgIkRPTS5zZXRBdHRyaWJ1dGVWYWx1ZSIsCiAgICAiRE9NLnNldEF0dHJpYnV0ZXNB
c1RleHQiLAogICAgIkRPTS5yZW1vdmVBdHRyaWJ1dGUiLAogICAgIkRPTS5nZXRFdmVudExpc3Rl
bmVyc0Zvck5vZGUiLAogICAgIkRPTS5nZXRPdXRlckhUTUwiLAogICAgIkRPTS5zZXRPdXRlckhU
TUwiLAogICAgIkRPTS5wZXJmb3JtU2VhcmNoIiwKICAgICJET00uZ2V0U2VhcmNoUmVzdWx0cyIs
CiAgICAiRE9NLmRpc2NhcmRTZWFyY2hSZXN1bHRzIiwKICAgICJET00ucmVxdWVzdE5vZGUiLAog
ICAgIkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgIkRPTS5oaWdobGlnaHRSZWN0IiwK
ICAgICJET00uaGlnaGxpZ2h0Tm9kZSIsCiAgICAiRE9NLmhpZGVIaWdobGlnaHQiLAogICAgIkRP
TS5oaWdobGlnaHRGcmFtZSIsCiAgICAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsCiAg
ICAiRE9NLnJlc29sdmVOb2RlIiwKICAgICJET00uZ2V0QXR0cmlidXRlcyIsCiAgICAiRE9NLm1v
dmVUbyIsCiAgICAiRE9NLnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCIsCiAgICAiQ1NTLmVuYWJs
ZSIsCiAgICAiQ1NTLmRpc2FibGUiLAogICAgIkNTUy5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSIs
CiAgICAiQ1NTLmdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAgIkNTUy5nZXRDb21wdXRlZFN0
eWxlRm9yTm9kZSIsCiAgICAiQ1NTLmdldEFsbFN0eWxlU2hlZXRzIiwKICAgICJDU1MuZ2V0U3R5
bGVTaGVldCIsCiAgICAiQ1NTLmdldFN0eWxlU2hlZXRUZXh0IiwKICAgICJDU1Muc2V0U3R5bGVT
aGVldFRleHQiLAogICAgIkNTUy5zZXRQcm9wZXJ0eVRleHQiLAogICAgIkNTUy50b2dnbGVQcm9w
ZXJ0eSIsCiAgICAiQ1NTLnNldFJ1bGVTZWxlY3RvciIsCiAgICAiQ1NTLmFkZFJ1bGUiLAogICAg
IkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiwKICAgICJDU1Muc3RhcnRTZWxlY3RvclBy
b2ZpbGVyIiwKICAgICJDU1Muc3RvcFNlbGVjdG9yUHJvZmlsZXIiLAogICAgIlRpbWVsaW5lLnN0
YXJ0IiwKICAgICJUaW1lbGluZS5zdG9wIiwKICAgICJUaW1lbGluZS5zZXRJbmNsdWRlTWVtb3J5
RGV0YWlscyIsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAiRGVidWdnZXIu
Y2F1c2VzUmVjb21waWxhdGlvbiIsCiAgICAiRGVidWdnZXIuc3VwcG9ydHNOYXRpdmVCcmVha3Bv
aW50cyIsCiAgICAiRGVidWdnZXIuZW5hYmxlIiwKICAgICJEZWJ1Z2dlci5kaXNhYmxlIiwKICAg
ICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIsCiAgICAiRGVidWdnZXIuc2V0QnJlYWtw
b2ludEJ5VXJsIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5jb250aW51ZVRvTG9jYXRpb24iLAogICAg
IkRlYnVnZ2VyLnN0ZXBPdmVyIiwKICAgICJEZWJ1Z2dlci5zdGVwSW50byIsCiAgICAiRGVidWdn
ZXIuc3RlcE91dCIsCiAgICAiRGVidWdnZXIucGF1c2UiLAogICAgIkRlYnVnZ2VyLnJlc3VtZSIs
CiAgICAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50IiwKICAgICJEZWJ1Z2dlci5jYW5TZXRTY3Jp
cHRTb3VyY2UiLAogICAgIkRlYnVnZ2VyLnNldFNjcmlwdFNvdXJjZSIsCiAgICAiRGVidWdnZXIu
Z2V0U2NyaXB0U291cmNlIiwKICAgICJEZWJ1Z2dlci5nZXRGdW5jdGlvbkRldGFpbHMiLAogICAg
IkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIiwKICAgICJEZWJ1Z2dlci5ldmFsdWF0ZU9u
Q2FsbEZyYW1lIiwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJET01EZWJ1Z2dlci5zZXRET01CcmVha3Bv
aW50IiwKICAgICJET01EZWJ1Z2dlci5yZW1vdmVET01CcmVha3BvaW50IiwKICAgICJET01EZWJ1
Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIsCiAgICAiRE9NRGVidWdnZXIucmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldEluc3RydW1lbnRh
dGlvbkJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnJlbW92ZUluc3RydW1lbnRhdGlvbkJy
ZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldFhIUkJyZWFrcG9pbnQiLAogICAgIkRPTURl
YnVnZ2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgIlByb2ZpbGVy
LmNhdXNlc1JlY29tcGlsYXRpb24iLAogICAgIlByb2ZpbGVyLmlzU2FtcGxpbmciLAogICAgIlBy
b2ZpbGVyLmhhc0hlYXBQcm9maWxlciIsCiAgICAiUHJvZmlsZXIuZW5hYmxlIiwKICAgICJQcm9m
aWxlci5kaXNhYmxlIiwKICAgICJQcm9maWxlci5zdGFydCIsCiAgICAiUHJvZmlsZXIuc3RvcCIs
CiAgICAiUHJvZmlsZXIuZ2V0UHJvZmlsZUhlYWRlcnMiLAogICAgIlByb2ZpbGVyLmdldFByb2Zp
bGUiLAogICAgIlByb2ZpbGVyLnJlbW92ZVByb2ZpbGUiLAogICAgIlByb2ZpbGVyLmNsZWFyUHJv
ZmlsZXMiLAogICAgIlByb2ZpbGVyLnRha2VIZWFwU25hcHNob3QiLAogICAgIlByb2ZpbGVyLmNv
bGxlY3RHYXJiYWdlIiwKICAgICJQcm9maWxlci5nZXRPYmplY3RCeUhlYXBPYmplY3RJZCIsCiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykK
CiAgICAiV29ya2VyLnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkIiwKICAgICJXb3JrZXIuc2Vu
ZE1lc3NhZ2VUb1dvcmtlciIsCiAgICAiV29ya2VyLmNvbm5lY3RUb1dvcmtlciIsCiAgICAiV29y
a2VyLmRpc2Nvbm5lY3RGcm9tV29ya2VyIiwKICAgICJXb3JrZXIuc2V0QXV0b2Nvbm5lY3RUb1dv
cmtlcnMiLAojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgp9OwoKCmNsYXNzIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbCA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
CnB1YmxpYzoKICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAsIG1f
YXBwbGljYXRpb25DYWNoZUFnZW50KDApCiAgICAgICAgLCBtX2Nzc0FnZW50KDApCiAgICAgICAg
LCBtX2NvbnNvbGVBZ2VudCgwKQogICAgICAgICwgbV9kb21BZ2VudCgwKQojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9kb21EZWJ1Z2dlckFnZW50KDApCiNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgLCBtX2RvbVN0b3JhZ2VB
Z2VudCgwKQojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2RhdGFiYXNlQWdl
bnQoMCkKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgICAgICwgbV9kZWJ1Z2dlckFnZW50KDApCiNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgICAg
ICwgbV9maWxlU3lzdGVtQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2luZGV4ZWREQkFnZW50KDAp
CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2luc3BlY3Rv
ckFnZW50KDApCiAgICAgICAgLCBtX21lbW9yeUFnZW50KDApCiAgICAgICAgLCBtX25ldHdvcmtB
Z2VudCgwKQogICAgICAgICwgbV9wYWdlQWdlbnQoMCkKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKICAgICAgICAsIG1fcHJvZmlsZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9ydW50aW1lQWdlbnQoMCkKICAgICAgICAs
IG1fdGltZWxpbmVBZ2VudCgwKQojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgICAgICwgbV93b3Jr
ZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgogICAgeyB9CgogICAgdmlydHVh
bCB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsg
fQogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQs
IENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OwogICAgdXNpbmcgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3I7CgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QWdlbnQoQXBwbGljYXRpb25DYWNoZUNvbW1hbmRIYW5kbGVyKiBhcHBsaWNhdGlvbkNhY2hlQWdl
bnQpIHsgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7IG1fYXBwbGljYXRpb25DYWNo
ZUFnZW50ID0gYXBwbGljYXRpb25DYWNoZUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJBZ2VudChDU1NDb21tYW5kSGFuZGxlciogY3NzQWdlbnQpIHsgQVNTRVJUKCFtX2Nzc0FnZW50
KTsgbV9jc3NBZ2VudCA9IGNzc0FnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2Vu
dChDb25zb2xlQ29tbWFuZEhhbmRsZXIqIGNvbnNvbGVBZ2VudCkgeyBBU1NFUlQoIW1fY29uc29s
ZUFnZW50KTsgbV9jb25zb2xlQWdlbnQgPSBjb25zb2xlQWdlbnQ7IH0KICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckFnZW50KERPTUNvbW1hbmRIYW5kbGVyKiBkb21BZ2VudCkgeyBBU1NFUlQoIW1f
ZG9tQWdlbnQpOyBtX2RvbUFnZW50ID0gZG9tQWdlbnQ7IH0KI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERPTURlYnVnZ2VyQ29t
bWFuZEhhbmRsZXIqIGRvbURlYnVnZ2VyQWdlbnQpIHsgQVNTRVJUKCFtX2RvbURlYnVnZ2VyQWdl
bnQpOyBtX2RvbURlYnVnZ2VyQWdlbnQgPSBkb21EZWJ1Z2dlckFnZW50OyB9CiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2Vu
dChET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIqIGRvbVN0b3JhZ2VBZ2VudCkgeyBBU1NFUlQoIW1f
ZG9tU3RvcmFnZUFnZW50KTsgbV9kb21TdG9yYWdlQWdlbnQgPSBkb21TdG9yYWdlQWdlbnQ7IH0K
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQo
RGF0YWJhc2VDb21tYW5kSGFuZGxlciogZGF0YWJhc2VBZ2VudCkgeyBBU1NFUlQoIW1fZGF0YWJh
c2VBZ2VudCk7IG1fZGF0YWJhc2VBZ2VudCA9IGRhdGFiYXNlQWdlbnQ7IH0KI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoRGVidWdnZXJDb21tYW5kSGFuZGxlciogZGVidWdn
ZXJBZ2VudCkgeyBBU1NFUlQoIW1fZGVidWdnZXJBZ2VudCk7IG1fZGVidWdnZXJBZ2VudCA9IGRl
YnVnZ2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChGaWxl
U3lzdGVtQ29tbWFuZEhhbmRsZXIqIGZpbGVTeXN0ZW1BZ2VudCkgeyBBU1NFUlQoIW1fZmlsZVN5
c3RlbUFnZW50KTsgbV9maWxlU3lzdGVtQWdlbnQgPSBmaWxlU3lzdGVtQWdlbnQ7IH0KI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbmRleGVkREJDb21tYW5kSGFuZGxlciogaW5k
ZXhlZERCQWdlbnQpIHsgQVNTRVJUKCFtX2luZGV4ZWREQkFnZW50KTsgbV9pbmRleGVkREJBZ2Vu
dCA9IGluZGV4ZWREQkFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JDb21tYW5kSGFuZGxlciog
aW5zcGVjdG9yQWdlbnQpIHsgQVNTRVJUKCFtX2luc3BlY3RvckFnZW50KTsgbV9pbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChN
ZW1vcnlDb21tYW5kSGFuZGxlciogbWVtb3J5QWdlbnQpIHsgQVNTRVJUKCFtX21lbW9yeUFnZW50
KTsgbV9tZW1vcnlBZ2VudCA9IG1lbW9yeUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJBZ2VudChOZXR3b3JrQ29tbWFuZEhhbmRsZXIqIG5ldHdvcmtBZ2VudCkgeyBBU1NFUlQoIW1f
bmV0d29ya0FnZW50KTsgbV9uZXR3b3JrQWdlbnQgPSBuZXR3b3JrQWdlbnQ7IH0KICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckFnZW50KFBhZ2VDb21tYW5kSGFuZGxlciogcGFnZUFnZW50KSB7IEFT
U0VSVCghbV9wYWdlQWdlbnQpOyBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudDsgfQojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoUHJv
ZmlsZXJDb21tYW5kSGFuZGxlciogcHJvZmlsZXJBZ2VudCkgeyBBU1NFUlQoIW1fcHJvZmlsZXJB
Z2VudCk7IG1fcHJvZmlsZXJBZ2VudCA9IHByb2ZpbGVyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFJ1
bnRpbWVDb21tYW5kSGFuZGxlciogcnVudGltZUFnZW50KSB7IEFTU0VSVCghbV9ydW50aW1lQWdl
bnQpOyBtX3J1bnRpbWVBZ2VudCA9IHJ1bnRpbWVBZ2VudDsgfQogICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQWdlbnQoVGltZWxpbmVDb21tYW5kSGFuZGxlciogdGltZWxpbmVBZ2VudCkgeyBBU1NF
UlQoIW1fdGltZWxpbmVBZ2VudCk7IG1fdGltZWxpbmVBZ2VudCA9IHRpbWVsaW5lQWdlbnQ7IH0K
I2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFdvcmtl
ckNvbW1hbmRIYW5kbGVyKiB3b3JrZXJBZ2VudCkgeyBBU1NFUlQoIW1fd29ya2VyQWdlbnQpOyBt
X3dvcmtlckFnZW50ID0gd29ya2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoK
cHJpdmF0ZToKICAgIHZvaWQgSW5zcGVjdG9yX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEluc3BlY3Rvcl9kaXNhYmxl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgTWVtb3J5X2dldERPTU5vZGVDb3VudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZW5hYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9k
aXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgUGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9yZW1v
dmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9yZWxvYWQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX25hdmln
YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgUGFnZV9nZXRDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9kZWxldGVDb29raWUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdl
X2dldFJlc291cmNlVHJlZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZ2V0UmVzb3VyY2VDb250ZW50KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9z
ZWFyY2hJblJlc291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9zZWFyY2hJblJlc291cmNlcyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2V0
RG9jdW1lbnRDb250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9zZXRTY3JlZW5TaXplT3ZlcnJpZGUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBSdW50
aW1lX2V2YWx1YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9jYWxsRnVuY3Rpb25Pbihsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfZ2V0
UHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFz
ZU9iamVjdEdyb3VwKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9ydW4obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2VuYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENv
bnNvbGVfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIENvbnNvbGVfY2xlYXJNZXNzYWdlcyhsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENvbnNvbGVfc2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2FkZEluc3BlY3RlZE5vZGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfc2V0VXNlckFn
ZW50T3ZlcnJpZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBOZXR3b3Jr
X2dldFJlc3BvbnNlQm9keShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ2FjaGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX2NsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29r
aWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgTmV0d29ya19jbGVhckJyb3dzZXJDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19zZXRDYWNo
ZURpc2FibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdm9pZCBEYXRhYmFzZV9lbmFibGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBEYXRhYmFzZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVz
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRGF0YWJhc2VfZXhlY3V0ZVNRTChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZvaWQgSW5kZXhlZERCX2VuYWJsZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IEluZGV4ZWREQl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5hbWVzRm9y
RnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKICAgIHZvaWQgRE9NU3RvcmFnZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01TdG9yYWdlX2Rp
c2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFn
ZV9zZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTVN0b3JhZ2VfcmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVfZ2V0TWFuaWZlc3RGb3JGcmFt
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKCiAgICB2b2lkIEZpbGVTeXN0ZW1fZW5hYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRmlsZVN5c3Rl
bV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICB2b2lkIERPTV9nZXREb2N1
bWVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERPTV9yZXF1ZXN0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9xdWVyeVNlbGVjdG9yKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgRE9NX3F1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0Tm9kZU5hbWUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0
Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRE9NX3JlbW92ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0QXR0cmlidXRlVmFsdWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBET01fc2V0QXR0cmlidXRlc0FzVGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZW1vdmVBdHRyaWJ1dGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBET01fZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2dldE91dGVySFRNTChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IERPTV9zZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcGVyZm9ybVNlYXJjaChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9nZXRTZWFy
Y2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3JlcXVlc3RO
b2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRE9NX3NldEluc3BlY3RNb2RlRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9oaWdobGlnaHRSZWN0
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRE9NX2hpZ2hsaWdodE5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01faGlkZUhpZ2hsaWdodChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9o
aWdobGlnaHRGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERPTV9wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01f
cmVzb2x2ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBET01fZ2V0QXR0cmlidXRlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9tb3ZlVG8obG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01fc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19kaXNh
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgQ1NTX2dldE1hdGNoZWRTdHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldElubGluZVN0
eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0
QWxsU3R5bGVTaGVldHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19nZXRTdHlsZVNo
ZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIENTU19zZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zZXRQcm9wZXJ0eVRl
eHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBDU1NfdG9nZ2xlUHJvcGVydHkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc2V0UnVsZVNlbGVjdG9yKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19z
dGFydFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBU
aW1lbGluZV9zdGFydChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIFRpbWVsaW5lX3N0b3AobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBUaW1lbGluZV9zZXRJbmNsdWRl
TWVtb3J5RGV0YWlscyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERlYnVn
Z2VyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFr
cG9pbnRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZGlzYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5
VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3JlbW92ZUJyZWFr
cG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdGVw
T3Zlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc3RlcE91dChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3BhdXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2VhcmNoSW5D
b250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0
U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJf
Z2V0RnVuY3Rpb25EZXRhaWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnMobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBEZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2FsbEZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgRE9NRGVi
dWdnZXJfc2V0RE9NQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURl
YnVnZ2VyX3JlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NRGVidWdnZXJfc2V0
SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3JlbW92ZUluc3RydW1l
bnRhdGlvbkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RE9NRGVidWdnZXJfcmVtb3ZlWEhSQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIFByb2Zp
bGVyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9pc1NhbXBsaW5nKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfaGFzSGVhcFByb2ZpbGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJf
ZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIFByb2ZpbGVyX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfc3RvcChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2Zp
bGVyX2dldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZ2V0UHJvZmlsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2Zp
bGVyX3JlbW92ZVByb2ZpbGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9jbGVhclByb2ZpbGVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmls
ZXJfdGFrZUhlYXBTbmFwc2hvdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgdm9pZCBXb3JrZXJfc2V0V29ya2VySW5z
cGVjdGlvbkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlcihsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtl
cl9jb25uZWN0VG9Xb3JrZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBX
b3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICBBcHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIqIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
OwogICAgQ1NTQ29tbWFuZEhhbmRsZXIqIG1fY3NzQWdlbnQ7CiAgICBDb25zb2xlQ29tbWFuZEhh
bmRsZXIqIG1fY29uc29sZUFnZW50OwogICAgRE9NQ29tbWFuZEhhbmRsZXIqIG1fZG9tQWdlbnQ7
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICBET01EZWJ1Z2dlckNvbW1hbmRI
YW5kbGVyKiBtX2RvbURlYnVnZ2VyQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICBET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIqIG1fZG9tU3RvcmFnZUFnZW50
OwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICBEYXRhYmFzZUNvbW1hbmRIYW5kbGVyKiBt
X2RhdGFiYXNlQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIERlYnVnZ2VyQ29tbWFuZEhhbmRsZXIqIG1fZGVi
dWdnZXJBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKCiAgICBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIqIG1fZmlsZVN5
c3RlbUFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQoKICAgIEluZGV4ZWREQkNvbW1hbmRIYW5kbGVyKiBtX2luZGV4ZWREQkFn
ZW50OwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgogICAgSW5zcGVjdG9yQ29t
bWFuZEhhbmRsZXIqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICBNZW1vcnlDb21tYW5kSGFuZGxlciog
bV9tZW1vcnlBZ2VudDsKICAgIE5ldHdvcmtDb21tYW5kSGFuZGxlciogbV9uZXR3b3JrQWdlbnQ7
CiAgICBQYWdlQ29tbWFuZEhhbmRsZXIqIG1fcGFnZUFnZW50OwojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgUHJvZmlsZXJDb21tYW5kSGFuZGxlciogbV9wcm9maWxlckFnZW50
OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgUnVudGltZUNvbW1h
bmRIYW5kbGVyKiBtX3J1bnRpbWVBZ2VudDsKICAgIFRpbWVsaW5lQ29tbWFuZEhhbmRsZXIqIG1f
dGltZWxpbmVBZ2VudDsKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIFdvcmtlckNvbW1hbmRIYW5k
bGVyKiBtX3dvcmtlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKICAgIHN0YXRp
YyBpbnQgZ2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CiAgICBz
dGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOwogICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpOwogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpOwogICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcg
aW52b2NhdGlvbkVycm9yKTsKCn07Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6SW5zcGVjdG9yX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkluc3BlY3RvciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJJbnNwZWN0b3IuZW5hYmxlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpJbnNwZWN0b3JfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluc3BlY3RvciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiSW5zcGVjdG9yLmRp
c2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6Ok1lbW9yeV9nZXRET01Ob2RlQ291bnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX21lbW9yeUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJNZW1vcnkgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2RvbUdyb3VwcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9z
dHJpbmdzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX21lbW9yeUFn
ZW50LT5nZXRET01Ob2RlQ291bnQoJmVycm9yLCBvdXRfZG9tR3JvdXBzLCBvdXRfc3RyaW5ncyk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImRvbUdyb3VwcyIsIG91dF9kb21Hcm91
cHMpOwogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzdHJpbmdzIiwgb3V0X3N0cmluZ3MpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk1lbW9yeS5n
ZXRET01Ob2RlQ291bnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZW5hYmxlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpQYWdlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9w
YWdlQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9hZGRTY3Jp
cHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIFN0cmluZyBvdXRfaWRlbnRpZmllciA9ICIiOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9zY3JpcHRTb3VyY2UgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
c2NyaXB0U291cmNlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5hZGRTY3JpcHRUb0V2YWx1YXRl
T25Mb2FkKCZlcnJvciwgaW5fc2NyaXB0U291cmNlLCAmb3V0X2lkZW50aWZpZXIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWRlbnRpZmllciIsIG91dF9pZGVudGlmaWVyKTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmFk
ZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5faWRlbnRpZmllciA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJpZGVudGlmaWVyIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5yZW1vdmVT
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkKCZlcnJvciwgaW5faWRlbnRpZmllcik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLnJlbW92ZVNjcmlw
dFRvRXZhbHVhdGVPbkxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfcmVsb2FkKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2Ug
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaWdub3Jl
Q2FjaGVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pZ25vcmVDYWNoZSA9IGdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaWdub3JlQ2FjaGUiLCAmaWdub3JlQ2FjaGVfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBzY3JpcHRUb0V2YWx1YXRlT25M
b2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9zY3JpcHRUb0V2YWx1YXRlT25M
b2FkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNjcmlwdFRvRXZhbHVhdGVPbkxv
YWQiLCAmc2NyaXB0VG9FdmFsdWF0ZU9uTG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPnJlbG9hZCgmZXJyb3IsIGlnbm9yZUNhY2hlX3ZhbHVlRm91bmQgPyAmaW5faWdub3JlQ2Fj
aGUgOiAwLCBzY3JpcHRUb0V2YWx1YXRlT25Mb2FkX3ZhbHVlRm91bmQgPyAmaW5fc2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZCA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiUGFnZS5yZWxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfbmF2aWdhdGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9wYWdlQWdlbnQtPm5hdmlnYXRlKCZlcnJvciwgaW5fdXJsKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UubmF2aWdhdGUiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2VfZ2V0Q29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG91dF9jb29raWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgU3RyaW5nIG91dF9jb29raWVzU3RyaW5nID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPmdldENvb2tpZXMoJmVycm9yLCBvdXRfY29va2llcywgJm91dF9jb29raWVzU3RyaW5nKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29va2llcyIsIG91dF9jb29raWVzKTsK
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY29va2llc1N0cmluZyIsIG91dF9jb29raWVzU3Ry
aW5nKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQ
YWdlLmdldENvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZGVsZXRlQ29va2llKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9jb29raWVOYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNvb2tpZU5hbWUi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZG9tYWluID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgImRvbWFpbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+ZGVs
ZXRlQ29va2llKCZlcnJvciwgaW5fY29va2llTmFtZSwgaW5fZG9tYWluKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZGVsZXRlQ29va2ll
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQYWdlX2dldFJlc291cmNlVHJlZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfZnJhbWVUcmVlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+Z2V0UmVzb3VyY2VUcmVlKCZl
cnJvciwgb3V0X2ZyYW1lVHJlZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJm
cmFtZVRyZWUiLCBvdXRfZnJhbWVUcmVlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmdldFJlc291cmNlVHJlZSIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9n
ZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgU3RyaW5nIG91dF9jb250ZW50ID0gIiI7CiAgICBib29sIG91dF9iYXNlNjRF
bmNvZGVkID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXJs
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5nZXRSZXNvdXJjZUNvbnRlbnQoJmVycm9yLCBpbl9m
cmFtZUlkLCBpbl91cmwsICZvdXRfY29udGVudCwgJm91dF9iYXNlNjRFbmNvZGVkKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImNvbnRlbnQiLCBvdXRfY29udGVudCk7CiAgICAg
ICAgcmVzdWx0LT5zZXRCb29sZWFuKCJiYXNlNjRFbmNvZGVkIiwgb3V0X2Jhc2U2NEVuY29kZWQp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uu
Z2V0UmVzb3VyY2VDb250ZW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NlYXJjaEluUmVzb3VyY2UobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgImZyYW1lSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdXJsID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJx
dWVyeSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY2FzZVNlbnNpdGl2ZV92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2Nhc2VTZW5zaXRpdmUgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgImNhc2VTZW5zaXRpdmUiLCAmY2FzZVNlbnNpdGl2ZV92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgYm9vbCBpbl9pc1JlZ2V4ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIs
ICJpc1JlZ2V4IiwgJmlzUmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZWFy
Y2hJblJlc291cmNlKCZlcnJvciwgaW5fZnJhbWVJZCwgaW5fdXJsLCBpbl9xdWVyeSwgY2FzZVNl
bnNpdGl2ZV92YWx1ZUZvdW5kID8gJmluX2Nhc2VTZW5zaXRpdmUgOiAwLCBpc1JlZ2V4X3ZhbHVl
Rm91bmQgPyAmaW5faXNSZWdleCA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLnNlYXJjaEluUmVzb3VyY2UiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OlBhZ2Vfc2VhcmNoSW5SZXNvdXJjZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcmVzdWx0ID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90ZXh0
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9v
bCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYXNl
U2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdl
eCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdleCIsICZpc1JlZ2V4X3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+c2VhcmNoSW5SZXNvdXJjZXMoJmVycm9yLCBp
bl90ZXh0LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAs
IGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2VhcmNoSW5S
ZXNvdXJjZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0RG9jdW1lbnRDb250ZW50KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5faHRtbCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJodG1sIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZXREb2N1bWVudENv
bnRlbnQoJmVycm9yLCBpbl9mcmFtZUlkLCBpbl9odG1sKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2V0RG9jdW1lbnRDb250ZW50Iiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQYWdlX3NldFNjcmVlblNpemVPdmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd2lkdGggPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAid2lkdGgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBpbnQgaW5faGVpZ2h0ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImhlaWdodCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKCZlcnJvciwgaW5f
d2lkdGgsIGluX2hlaWdodCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGlt
ZV9ldmFsdWF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGJvb2wgb3V0X3dhc1Rocm93biA9IGZhbHNlOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9leHByZXNzaW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgImV4cHJlc3Npb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVj
dEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91cCIsICZvYmplY3RHcm91cF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluY2x1ZGVDb21tYW5kTGlu
ZUFQSV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2luY2x1ZGVDb21tYW5kTGluZUFQ
SSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
IiwgJmluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
Ym9vbCBpbl9kb05vdFBhdXNlT25FeGNlcHRpb25zID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsICJkb05vdFBhdXNlT25FeGNlcHRpb25zIiwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBmcmFtZUlkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgImZyYW1lSWQiLCAmZnJhbWVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJyZXR1cm5C
eVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFnZW50
LT5ldmFsdWF0ZSgmZXJyb3IsIGluX2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQg
PyAmaW5fb2JqZWN0R3JvdXAgOiAwLCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/
ICZpbl9pbmNsdWRlQ29tbWFuZExpbmVBUEkgOiAwLCBkb05vdFBhdXNlT25FeGNlcHRpb25zX3Zh
bHVlRm91bmQgPyAmaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucyA6IDAsIGZyYW1lSWRfdmFsdWVG
b3VuZCA/ICZpbl9mcmFtZUlkIDogMCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8gJmluX3Jl
dHVybkJ5VmFsdWUgOiAwLCBvdXRfcmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICBpZiAo
b3V0X3dhc1Rocm93bikKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJ3YXNUaHJvd24i
LCBvdXRfd2FzVGhyb3duKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJSdW50aW1lLmV2YWx1YXRlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2NhbGxGdW5jdGlv
bk9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgYm9vbCBvdXRfd2FzVGhyb3duID0gZmFsc2U7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9i
amVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2Z1bmN0aW9uRGVj
bGFyYXRpb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnVuY3Rpb25EZWNsYXJh
dGlvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgYXJndW1lbnRzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5fYXJndW1lbnRzID0gZ2V0
QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAiYXJndW1lbnRzIiwgJmFyZ3VtZW50c192YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJhbXND
b250YWluZXJQdHIsICJyZXR1cm5CeVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fcnVudGltZUFnZW50LT5jYWxsRnVuY3Rpb25PbigmZXJyb3IsIGluX29iamVjdElk
LCBpbl9mdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHNfdmFsdWVGb3VuZCA/ICZpbl9hcmd1
bWVudHMgOiAwLCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPyAmaW5fcmV0dXJuQnlWYWx1ZSA6
IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIGlmIChvdXRfd2FzVGhyb3du
KQogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIG91dF93YXNUaHJv
d24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlJ1
bnRpbWUuY2FsbEZ1bmN0aW9uT24iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZ2V0UHJvcGVydGllcyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgIm9iamVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBv
d25Qcm9wZXJ0aWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fb3duUHJvcGVydGll
cyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAib3duUHJvcGVydGllcyIsICZvd25Q
cm9wZXJ0aWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3J1bnRpbWVBZ2VudC0+Z2V0UHJvcGVydGll
cygmZXJyb3IsIGluX29iamVjdElkLCBvd25Qcm9wZXJ0aWVzX3ZhbHVlRm91bmQgPyAmaW5fb3du
UHJvcGVydGllcyA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLmdldFByb3BlcnRpZXMiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRp
bWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9ydW50aW1lQWdl
bnQtPnJlbGVhc2VPYmplY3QoJmVycm9yLCBpbl9vYmplY3RJZCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLnJlbGVhc2VPYmplY3Qi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRp
bWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91
cCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX3J1bnRpbWVBZ2VudC0+cmVsZWFzZU9iamVjdEdyb3VwKCZlcnJvciwg
aW5fb2JqZWN0R3JvdXApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUnVudGltZS5yZWxlYXNlT2JqZWN0R3JvdXAiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVf
cnVuKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1
bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFn
ZW50LT5ydW4oJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIlJ1bnRpbWUucnVuIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2VuYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29s
ZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+ZW5hYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDb25zb2xlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9kaXNhYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29uc29sZUFnZW50LT5kaXNhYmxlKCZl
cnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJDb25zb2xlLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfY2xlYXJNZXNzYWdlcyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29s
ZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+Y2xlYXJN
ZXNzYWdlcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX3NldE1v
bml0b3JpbmdYSFJFbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IGdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2Vu
dC0+c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuc2V0TW9u
aXRvcmluZ1hIUkVuYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9kZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJDb25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJ
ZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+YWRkSW5zcGVjdGVkTm9kZSgmZXJyb3IsIGlu
X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDb25zb2xlLmFkZEluc3BlY3RlZE5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZW5hYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9u
ZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5l
bmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIk5ldHdvcmsuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2Rpc2FibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdv
cmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmRpc2Fi
bGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIk5ldHdvcmsuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19zZXRVc2VyQWdlbnRPdmVy
cmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXNlckFnZW50ID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInVzZXJBZ2VudCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+c2V0VXNl
ckFnZW50T3ZlcnJpZGUoJmVycm9yLCBpbl91c2VyQWdlbnQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5zZXRVc2VyQWdlbnRPdmVy
cmlkZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6TmV0d29ya19zZXRFeHRyYUhUVFBIZWFkZXJzKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
Ik5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2hlYWRlcnMgPSBnZXRPYmplY3QocGFyYW1zQ29udGFp
bmVyUHRyLCAiaGVhZGVycyIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+c2V0RXh0cmFIVFRQ
SGVhZGVycygmZXJyb3IsIGluX2hlYWRlcnMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5zZXRFeHRyYUhUVFBIZWFkZXJzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpOZXR3b3JrX2dldFJlc3BvbnNlQm9keShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29y
a0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2JvZHkgPSAiIjsKICAgIGJv
b2wgb3V0X2Jhc2U2NEVuY29kZWQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5f
cmVxdWVzdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInJlcXVlc3RJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX25ldHdvcmtBZ2VudC0+Z2V0UmVzcG9uc2VCb2R5KCZlcnJvciwgaW5fcmVxdWVz
dElkLCAmb3V0X2JvZHksICZvdXRfYmFzZTY0RW5jb2RlZCk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJib2R5Iiwgb3V0X2JvZHkpOwogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVh
bigiYmFzZTY0RW5jb2RlZCIsIG91dF9iYXNlNjRFbmNvZGVkKTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmdldFJlc3BvbnNlQm9keSIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDYWNoZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25l
dHdvcmtBZ2VudC0+Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yLCAmb3V0X3Jlc3VsdCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5j
YW5DbGVhckJyb3dzZXJDYWNoZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jbGVhckJyb3dzZXJDYWNoZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3Jr
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+
Y2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtB
Z2VudC0+Y2FuQ2xlYXJCcm93c2VyQ29va2llcygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNhbkNs
ZWFyQnJvd3NlckNvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llcyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3Jr
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+
Y2xlYXJCcm93c2VyQ29va2llcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5jbGVhckJyb3dzZXJDb29raWVzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpOZXR3b3JrX3NldENhY2hlRGlzYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdv
cmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9jYWNoZURp
c2FibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYWNoZURpc2FibGVkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fbmV0d29ya0FnZW50LT5zZXRDYWNoZURpc2FibGVkKCZlcnJvciwgaW5fY2Fj
aGVEaXNhYmxlZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGF0YWJhc2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmVuYWJs
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGF0YWJhc2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZGlz
YWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBvdXRfdGFibGVOYW1lcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJkYXRhYmFzZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+Z2V0RGF0YWJh
c2VUYWJsZU5hbWVzKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgb3V0X3RhYmxlTmFtZXMpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJ0YWJsZU5hbWVzIiwgb3V0X3RhYmxlTmFtZXMp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFi
YXNlLmdldERhdGFiYXNlVGFibGVOYW1lcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZXhlY3V0ZVNRTChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IGJvb2wgb3V0X3N1Y2Nlc3MgPSBmYWxzZTsKICAgIGludCBvdXRfdHJhbnNhY3Rpb25JZCA9IDA7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgaW50IGluX2RhdGFiYXNlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAiZGF0YWJhc2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RhdGFiYXNlQWdlbnQtPmV4ZWN1dGVTUUwoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSwgJm91dF9zdWNjZXNzLCAmb3V0X3RyYW5zYWN0aW9uSWQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEJvb2xlYW4oInN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCBvdXRfdHJhbnNhY3Rpb25JZCk7CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0
ZVNRTCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5lbmFibGUoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIklu
ZGV4ZWREQi5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5kaXNhYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJJbmRleGVkREIuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFz
ZU5hbWVzRm9yRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9yZXF1ZXN0SWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAicmVxdWVzdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJh
bWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5yZXF1ZXN0RGF0YWJhc2VOYW1lc0Zv
ckZyYW1lKCZlcnJvciwgaW5fcmVxdWVzdElkLCBpbl9mcmFtZUlkKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5yZXF1ZXN0RGF0
YWJhc2VOYW1lc0ZvckZyYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBpbnQgaW5fcmVxdWVzdElkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgInJlcXVlc3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9mcmFt
ZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZGF0YWJhc2VOYW1lID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgImRhdGFiYXNlTmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50
LT5yZXF1ZXN0RGF0YWJhc2UoJmVycm9yLCBpbl9yZXF1ZXN0SWQsIGluX2ZyYW1lSWQsIGluX2Rh
dGFiYXNlTmFtZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+ZW5hYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJET01TdG9yYWdlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NU3RvcmFnZV9kaXNhYmxlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21T
dG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTVN0b3Jh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFn
ZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vf
Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfZW50
cmllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5f
c3RvcmFnZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0b3JhZ2VJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+Z2V0RE9NU3RvcmFnZUVudHJpZXMoJmVycm9yLCBpbl9z
dG9yYWdlSWQsIG91dF9lbnRyaWVzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
ZW50cmllcyIsIG91dF9lbnRyaWVzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21T
dG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTVN0b3Jh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3N1Y2Nlc3MgPSBm
YWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fc3RvcmFnZUlkID0gZ2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgInN0b3JhZ2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmlu
ZyBpbl9rZXkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAia2V5IiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5zZXRET01TdG9y
YWdlSXRlbSgmZXJyb3IsIGluX3N0b3JhZ2VJZCwgaW5fa2V5LCBpbl92YWx1ZSwgJm91dF9zdWNj
ZXNzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJzdWNjZXNzIiwgb3V0X3N1
Y2Nlc3MpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTVN0b3JhZ2Uuc2V0RE9NU3RvcmFnZUl0ZW0iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2VfcmVtb3Zl
RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc3VjY2VzcyA9IGZhbHNlOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGludCBpbl9zdG9yYWdlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAic3Rv
cmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2tleSA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJrZXkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21TdG9yYWdlQWdl
bnQtPnJlbW92ZURPTVN0b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3RvcmFnZUlkLCBpbl9rZXksICZv
dXRfc3VjY2Vzcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigic3VjY2VzcyIs
IG91dF9zdWNjZXNzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVtIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQXBwbGljYXRpb25DYWNoZSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRf
ZnJhbWVJZHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9hcHBsaWNh
dGlvbkNhY2hlQWdlbnQtPmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoJmVycm9yLCBvdXRfZnJhbWVJ
ZHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJmcmFtZUlkcyIsIG91dF9mcmFt
ZUlkcyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
QXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+ZW5hYmxlKCZlcnJv
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJB
cHBsaWNhdGlvbkNhY2hlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6QXBwbGljYXRpb25DYWNoZV9nZXRNYW5p
ZmVzdEZvckZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2FjaGUgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfbWFuaWZlc3RVUkwgPSAi
IjsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
LT5nZXRNYW5pZmVzdEZvckZyYW1lKCZlcnJvciwgaW5fZnJhbWVJZCwgJm91dF9tYW5pZmVzdFVS
TCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIG91dF9t
YW5pZmVzdFVSTCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiQXBwbGljYXRpb25DYWNoZS5nZXRNYW5pZmVzdEZvckZyYW1lIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBs
aWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfYXBwbGljYXRpb25DYWNoZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2FwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC0+Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKCZlcnJvciwgaW5f
ZnJhbWVJZCwgb3V0X2FwcGxpY2F0aW9uQ2FjaGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNl
dE9iamVjdCgiYXBwbGljYXRpb25DYWNoZSIsIG91dF9hcHBsaWNhdGlvbkNhY2hlKTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJBcHBsaWNhdGlvbkNh
Y2hlLmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkZpbGVTeXN0ZW1fZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9maWxlU3lzdGVtQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkZpbGVTeXN0ZW0gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkZpbGVTeXN0
ZW0uZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1BZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPmRpc2FibGUo
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkZpbGVTeXN0ZW0uZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5k
aWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9nZXREb2N1bWVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gb3V0X3Jvb3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fZG9tQWdlbnQtPmdldERvY3VtZW50KCZlcnJvciwgb3V0X3Jvb3QpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicm9vdCIsIG91dF9yb290KTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0RG9jdW1lbnQi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTV9yZXF1ZXN0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9t
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldElu
dChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cmVx
dWVzdENoaWxkTm9kZXMoJmVycm9yLCBpbl9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpET01fcXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnF1ZXJ5U2VsZWN0
b3IoJmVycm9yLCBpbl9ub2RlSWQsIGluX3NlbGVjdG9yLCAmb3V0X25vZGVJZCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucXVlcnlTZWxlY3Rv
ciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rv
bUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X25vZGVJ
ZHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25v
ZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAic2VsZWN0b3IiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cXVlcnlTZWxlY3RvckFs
bCgmZXJyb3IsIGluX25vZGVJZCwgaW5fc2VsZWN0b3IsIG91dF9ub2RlSWRzKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVzdWx0LT5zZXRBcnJheSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucXVlcnlTZWxlY3Rv
ckFsbCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVOYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFtZSA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldE5vZGVOYW1l
KCZlcnJvciwgaW5fbm9kZUlkLCBpbl9uYW1lLCAmb3V0X25vZGVJZCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uc2V0Tm9kZU5hbWUiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9zZXROb2RlVmFsdWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGlu
X3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fZG9tQWdlbnQtPnNldE5vZGVWYWx1ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fdmFsdWUpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNl
dE5vZGVWYWx1ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQt
PnJlbW92ZU5vZGUoJmVycm9yLCBpbl9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlbW92ZU5vZGUiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9z
ZXRBdHRyaWJ1dGVWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFt
ZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldEF0dHJpYnV0ZVZhbHVlKCZlcnJv
ciwgaW5fbm9kZUlkLCBpbl9uYW1lLCBpbl92YWx1ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uc2V0QXR0cmlidXRlVmFsdWUiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9zZXRBdHRyaWJ1dGVzQXNUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG5hbWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
U3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibmFtZSIsICZu
YW1lX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5zZXRBdHRyaWJ1dGVzQXNUZXh0KCZl
cnJvciwgaW5fbm9kZUlkLCBpbl90ZXh0LCBuYW1lX3ZhbHVlRm91bmQgPyAmaW5fbmFtZSA6IDAp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9N
LnNldEF0dHJpYnV0ZXNBc1RleHQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGlu
dCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAibmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZW1vdmVBdHRyaWJ1dGUo
JmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlbW92ZUF0dHJpYnV0ZSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X2dldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbGlzdGVuZXJzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdl
bnQtPmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb3V0X2xpc3Rl
bmVycyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImxpc3RlbmVycyIsIG91dF9s
aXN0ZW5lcnMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTS5nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRPdXRlckhU
TUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmlu
ZyBvdXRfb3V0ZXJIVE1MID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+
Z2V0T3V0ZXJIVE1MKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X291dGVySFRNTCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvdXRlckhUTUwiLCBvdXRfb3V0ZXJIVE1MKTsKICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0T3V0
ZXJIVE1MIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01fc2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
b21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIFN0cmluZyBpbl9vdXRlckhUTUwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
b3V0ZXJIVE1MIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldE91dGVySFRNTCgmZXJyb3IsIGlu
X25vZGVJZCwgaW5fb3V0ZXJIVE1MKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRPdXRlckhUTUwiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9wZXJmb3Jt
U2VhcmNoKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBT
dHJpbmcgb3V0X3NlYXJjaElkID0gIiI7CiAgICBpbnQgb3V0X3Jlc3VsdENvdW50ID0gMDsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAicXVlcnkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cGVyZm9ybVNlYXJjaCgmZXJyb3Is
IGluX3F1ZXJ5LCAmb3V0X3NlYXJjaElkLCAmb3V0X3Jlc3VsdENvdW50KTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlYXJjaElkIiwgb3V0X3NlYXJjaElkKTsKICAgICAgICBy
ZXN1bHQtPnNldE51bWJlcigicmVzdWx0Q291bnQiLCBvdXRfcmVzdWx0Q291bnQpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5wZXJmb3JtU2Vh
cmNoIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01fZ2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
ZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbm9k
ZUlkcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fc2VhcmNoSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fZnJvbUluZGV4ID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgImZyb21JbmRleCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGlu
dCBpbl90b0luZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInRvSW5kZXgiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kb21BZ2VudC0+Z2V0U2VhcmNoUmVzdWx0cygmZXJyb3IsIGluX3NlYXJjaElkLCBp
bl9mcm9tSW5kZXgsIGluX3RvSW5kZXgsIG91dF9ub2RlSWRzKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVz
dWx0LT5zZXRBcnJheSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0U2VhcmNoUmVzdWx0cyIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VhcmNoSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21B
Z2VudC0+ZGlzY2FyZFNlYXJjaFJlc3VsdHMoJmVycm9yLCBpbl9zZWFyY2hJZCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZGlzY2FyZFNl
YXJjaFJlc3VsdHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZXF1ZXN0Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJvYmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZXF1ZXN0Tm9kZSgmZXJyb3Is
IGluX29iamVjdElkLCAmb3V0X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0TnVt
YmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVxdWVzdE5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRJbnNw
ZWN0TW9kZUVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IGdldEJvb2xlYW4ocGFyYW1zQ29u
dGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaGln
aGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX2hpZ2hsaWdodENvbmZpZyA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJo
aWdobGlnaHRDb25maWciLCAmaGlnaGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Rv
bUFnZW50LT5zZXRJbnNwZWN0TW9kZUVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkLCBoaWdobGln
aHRDb25maWdfdmFsdWVGb3VuZCA/ICZpbl9oaWdobGlnaHRDb25maWcgOiAwKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRJbnNwZWN0
TW9kZUVuYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRSZWN0KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5feCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJ4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
aW50IGluX3kgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAieSIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGludCBpbl93aWR0aCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ3
aWR0aCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9oZWlnaHQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAiaGVpZ2h0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
Ym9vbCBjb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbl9jb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJjb2xvciIsICZjb2xv
cl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG91dGxpbmVDb2xvcl92
YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9vdXRsaW5l
Q29sb3IgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAib3V0bGluZUNvbG9yIiwgJm91
dGxpbmVDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0UmVjdCgm
ZXJyb3IsIGluX3gsIGluX3ksIGluX3dpZHRoLCBpbl9oZWlnaHQsIGNvbG9yX3ZhbHVlRm91bmQg
PyAmaW5fY29sb3IgOiAwLCBvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9vdXRsaW5lQ29s
b3IgOiAwKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTS5oaWdobGlnaHRSZWN0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0Tm9kZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50
IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9oaWdobGlnaHRD
b25maWcgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAiaGlnaGxpZ2h0Q29uZmlnIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodE5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIGlu
X2hpZ2hsaWdodENvbmZpZyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJET00uaGlnaGxpZ2h0Tm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZGVIaWdobGln
aHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmhpZGVIaWdo
bGlnaHQoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRPTS5oaWRlSGlnaGxpZ2h0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0RnJhbWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZy
YW1lSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRlbnRDb2xvcl92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb250ZW50Q29s
b3IgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAiY29udGVudENvbG9yIiwgJmNvbnRl
bnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRlbnRP
dXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaW5fY29udGVudE91dGxpbmVDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
ICJjb250ZW50T3V0bGluZUNvbG9yIiwgJmNvbnRlbnRPdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodEZyYW1lKCZlcnJvciwgaW5fZnJhbWVJZCwgY29u
dGVudENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29udGVudENvbG9yIDogMCwgY29udGVudE91dGxp
bmVDb2xvcl92YWx1ZUZvdW5kID8gJmluX2NvbnRlbnRPdXRsaW5lQ29sb3IgOiAwKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5oaWdobGln
aHRGcmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RE9NX3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAw
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9wYXRoID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInBhdGgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKCZlcnJvciwgaW5fcGF0aCwgJm91dF9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0X25vZGVJZCk7CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3Jlc29sdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5n
IGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdy
b3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZXNvbHZl
Tm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmpl
Y3RHcm91cCA6IDAsIG91dF9vYmplY3QpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVj
dCgib2JqZWN0Iiwgb3V0X29iamVjdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlc29sdmVOb2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fZ2V0QXR0cmli
dXRlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBvdXRfYXR0cmlidXRlcyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5nZXRBdHRyaWJ1dGVzKCZl
cnJvciwgaW5fbm9kZUlkLCBvdXRfYXR0cmlidXRlcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+
c2V0QXJyYXkoImF0dHJpYnV0ZXMiLCBvdXRfYXR0cmlidXRlcyk7CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmdldEF0dHJpYnV0ZXMiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9tb3ZlVG8obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIGludCBvdXRfbm9kZUlkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl90YXJnZXROb2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAidGFyZ2V0Tm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbnNlcnRC
ZWZvcmVOb2RlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX2luc2VydEJlZm9yZU5v
ZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJpbnNlcnRCZWZvcmVOb2RlSWQiLCAm
aW5zZXJ0QmVmb3JlTm9kZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5tb3ZlVG8o
JmVycm9yLCBpbl9ub2RlSWQsIGluX3RhcmdldE5vZGVJZCwgaW5zZXJ0QmVmb3JlTm9kZUlkX3Zh
bHVlRm91bmQgPyAmaW5faW5zZXJ0QmVmb3JlTm9kZUlkIDogMCwgJm91dF9ub2RlSWQpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0X25vZGVJZCk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLm1vdmVUbyIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RE9NX3NldFRvdWNoRW11bGF0aW9uRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVk
ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
ZG9tQWdlbnQtPnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCgmZXJyb3IsIGluX2VuYWJsZWQpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNl
dFRvdWNoRW11bGF0aW9uRW5hYmxlZCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZW5hYmxlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1NfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9j
c3NBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRNYXRjaGVk
U3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbWF0Y2hlZENTU1J1bGVzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcHNldWRv
RWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG91dF9pbmhlcml0ZWQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2Rl
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGZvcmNlZFBzZXVkb0NsYXNzZXNf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbl9mb3JjZWRQ
c2V1ZG9DbGFzc2VzID0gZ2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAiZm9yY2VkUHNldWRv
Q2xhc3NlcyIsICZmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29s
IGluX2luY2x1ZGVQc2V1ZG8gPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImluY2x1
ZGVQc2V1ZG8iLCAmaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9pbmNsdWRlSW5oZXJpdGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNs
dWRlSW5oZXJpdGVkIiwgJmluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3Nz
QWdlbnQtPmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBmb3JjZWRQ
c2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQgPyAmaW5fZm9yY2VkUHNldWRvQ2xhc3NlcyA6IDAsIGlu
Y2x1ZGVQc2V1ZG9fdmFsdWVGb3VuZCA/ICZpbl9pbmNsdWRlUHNldWRvIDogMCwgaW5jbHVkZUlu
aGVyaXRlZF92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVJbmhlcml0ZWQgOiAwLCBvdXRfbWF0Y2hl
ZENTU1J1bGVzLCBvdXRfcHNldWRvRWxlbWVudHMsIG91dF9pbmhlcml0ZWQpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0
QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIG91dF9tYXRjaGVkQ1NTUnVsZXMpOwogICAgICAgIC8v
IEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuCiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
cHNldWRvRWxlbWVudHMiLCBvdXRfcHNldWRvRWxlbWVudHMpOwogICAgICAgIC8vIEZJWE1FOiBz
dXBwb3J0IG9wdGlvbmFsIGhlcmUuCiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiaW5oZXJpdGVk
Iiwgb3V0X2luaGVyaXRlZCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ1NTLmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0
SW5saW5lU3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X2lubGluZVN0eWxlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X3N0
eWxlQXR0cmlidXRlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2Nzc0FnZW50LT5nZXRJbmxpbmVTdHlsZXNGb3JOb2RlKCZlcnJvciwgaW5fbm9k
ZUlkLCBvdXRfaW5saW5lU3R5bGUsIG91dF9zdHlsZUF0dHJpYnV0ZXMpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJpbmxpbmVTdHlsZSIsIG91dF9pbmxpbmVTdHlsZSk7CiAgICAgICAgLy8gRklYTUU6IHN1
cHBvcnQgb3B0aW9uYWwgaGVyZS4KICAgICAgICByZXN1bHQtPnNldEFycmF5KCJzdHlsZUF0dHJp
YnV0ZXMiLCBvdXRfc3R5bGVBdHRyaWJ1dGVzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZ2V0SW5saW5lU3R5bGVzRm9yTm9kZSIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q1NTX2dldENvbXB1dGVkU3R5bGVGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9jb21wdXRl
ZFN0eWxlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgYm9vbCBmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5fZm9yY2VkUHNldWRvQ2xhc3NlcyA9
IGdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgImZvcmNlZFBzZXVkb0NsYXNzZXMiLCAmZm9y
Y2VkUHNldWRvQ2xhc3Nlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0Q29tcHV0
ZWRTdHlsZUZvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNzZXNfdmFs
dWVGb3VuZCA/ICZpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzIDogMCwgb3V0X2NvbXB1dGVkU3R5bGUp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb21wdXRlZFN0eWxlIiwgb3V0X2Nv
bXB1dGVkU3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkNTUy5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldEFsbFN0
eWxlU2hlZXRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
Q1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG91dF9oZWFkZXJzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
Y3NzQWdlbnQtPmdldEFsbFN0eWxlU2hlZXRzKCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJoZWFkZXJzIiwgb3V0X2hlYWRlcnMpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRBbGxTdHls
ZVNoZWV0cyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldFN0eWxlU2hlZXQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9z
dHlsZVNoZWV0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0
eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRTdHlsZVNoZWV0KCZlcnJvciwg
aW5fc3R5bGVTaGVldElkLCBvdXRfc3R5bGVTaGVldCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJzdHlsZVNoZWV0Iiwgb3V0X3N0eWxlU2hlZXQpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdHlsZVNoZWV0IiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpDU1NfZ2V0U3R5bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfdGV4dCA9ICIiOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9zdHlsZVNoZWV0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
c3R5bGVTaGVldElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPmdldFN0eWxlU2hlZXRUZXh0KCZl
cnJvciwgaW5fc3R5bGVTaGVldElkLCAmb3V0X3RleHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQt
PnNldFN0cmluZygidGV4dCIsIG91dF90ZXh0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZ2V0U3R5bGVTaGVldFRleHQiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNT
U19zZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3N0eWxlU2hlZXRJZCA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJzdHlsZVNoZWV0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBTdHJpbmcgaW5fdGV4dCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ0
ZXh0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPnNldFN0eWxlU2hlZXRUZXh0KCZlcnJvciwgaW5f
c3R5bGVTaGVldElkLCBpbl90ZXh0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5zZXRTdHlsZVNoZWV0VGV4dCIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3Nl
dFByb3BlcnR5VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9z
dHlsZUlkID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlSWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fcHJvcGVydHlJbmRleCA9IGdldEludChwYXJhbXND
b250YWluZXJQdHIsICJwcm9wZXJ0eUluZGV4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
U3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidGV4dCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5fb3ZlcndyaXRlID0gZ2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsICJvdmVyd3JpdGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c2V0
UHJvcGVydHlUZXh0KCZlcnJvciwgaW5fc3R5bGVJZCwgaW5fcHJvcGVydHlJbmRleCwgaW5fdGV4
dCwgaW5fb3ZlcndyaXRlLCBvdXRfc3R5bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5zZXRQcm9wZXJ0eVRleHQiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU190b2dn
bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdHls
ZUlkID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5fcHJvcGVydHlJbmRleCA9IGdldEludChwYXJhbXNDb250
YWluZXJQdHIsICJwcm9wZXJ0eUluZGV4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCBpbl9kaXNhYmxlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkaXNhYmxlIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fY3NzQWdlbnQtPnRvZ2dsZVByb3BlcnR5KCZlcnJvciwgaW5fc3R5bGVJZCwg
aW5fcHJvcGVydHlJbmRleCwgaW5fZGlzYWJsZSwgb3V0X3N0eWxlKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgb3V0X3N0eWxlKTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MudG9nZ2xlUHJvcGVydHkiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19zZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9ydWxlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBpbl9ydWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAicnVsZUlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPnNl
dFJ1bGVTZWxlY3RvcigmZXJyb3IsIGluX3J1bGVJZCwgaW5fc2VsZWN0b3IsIG91dF9ydWxlKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJ1bGUiLCBvdXRfcnVsZSk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLnNldFJ1bGVT
ZWxlY3RvciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0Fn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9ydWxlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fY29udGV4
dE5vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJjb250ZXh0Tm9kZUlkIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPmFkZFJ1
bGUoJmVycm9yLCBpbl9jb250ZXh0Tm9kZUlkLCBpbl9zZWxlY3Rvciwgb3V0X3J1bGUpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicnVsZSIsIG91dF9ydWxlKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuYWRkUnVsZSIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6Q1NTX2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2Nzc1Byb3BlcnRpZXMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0U3VwcG9ydGVkQ1NT
UHJvcGVydGllcygmZXJyb3IsIG91dF9jc3NQcm9wZXJ0aWVzKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVz
dWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIG91dF9jc3NQcm9wZXJ0aWVzKTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3N0YXJ0U2VsZWN0b3JQcm9maWxlcihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3Nz
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c3RhcnRTZWxlY3RvclBy
b2ZpbGVyKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJDU1Muc3RhcnRTZWxlY3RvclByb2ZpbGVyIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc3RvcFNl
bGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG91dF9wcm9maWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2Nzc0FnZW50LT5zdG9wU2VsZWN0b3JQcm9maWxlcigmZXJyb3IsIG91dF9wcm9maWxl
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb2ZpbGUiLCBvdXRfcHJvZmls
ZSk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NT
LnN0b3BTZWxlY3RvclByb2ZpbGVyIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zdGFydChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fdGltZWxpbmVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiVGltZWxpbmUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGJvb2wgbWF4Q2FsbFN0YWNrRGVwdGhfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGlu
X21heENhbGxTdGFja0RlcHRoID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm1heENhbGxT
dGFja0RlcHRoIiwgJm1heENhbGxTdGFja0RlcHRoX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3RpbWVs
aW5lQWdlbnQtPnN0YXJ0KCZlcnJvciwgbWF4Q2FsbFN0YWNrRGVwdGhfdmFsdWVGb3VuZCA/ICZp
bl9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiVGltZWxpbmUuc3RhcnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0
b3AobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlRp
bWVsaW5lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3RpbWVsaW5l
QWdlbnQtPnN0b3AoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIlRpbWVsaW5lLnN0b3AiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3NldEluY2x1
ZGVNZW1vcnlEZXRhaWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90aW1lbGluZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGluZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVkID0gZ2V0Qm9vbGVh
bihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2Vu
dC0+c2V0SW5jbHVkZU1lbW9yeURldGFpbHMoJmVycm9yLCBpbl9lbmFibGVkKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlRpbWVsaW5lLnNldElu
Y2x1ZGVNZW1vcnlEZXRhaWxzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9jYXVzZXNSZWNvbXBpbGF0aW9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgYm9vbCBvdXRfcmVzdWx0ID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5jYXVzZXNSZWNvbXBpbGF0aW9uKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmNh
dXNlc1JlY29tcGlsYXRpb24iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N1cHBvcnRzTmF0aXZlQnJlYWtw
b2ludHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1
bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN1cHBvcnRzTmF0aXZlQnJl
YWtwb2ludHMoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuc3VwcG9ydHNOYXRpdmVCcmVha3BvaW50
cyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmVuYWJs
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuZGlz
YWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJlYWtwb2ludHNBY3RpdmUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBib29sIGluX2FjdGl2ZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiYWN0aXZl
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoJmVycm9y
LCBpbl9hY3RpdmUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2Vy
X3NldEJyZWFrcG9pbnRCeVVybChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfYnJlYWtwb2ludElkID0gIiI7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9sb2NhdGlvbnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX2xpbmVOdW1iZXIgPSBnZXRJbnQocGFyYW1z
Q29udGFpbmVyUHRyLCAibGluZU51bWJlciIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgdXJsX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCAidXJsIiwgJnVybF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIHVybFJlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBp
bl91cmxSZWdleCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmxSZWdleCIsICZ1
cmxSZWdleF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbHVtbk51
bWJlcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fY29sdW1uTnVtYmVyID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbHVtbk51bWJlciIsICZjb2x1bW5OdW1iZXJfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBjb25kaXRpb25fdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgU3RyaW5nIGluX2NvbmRpdGlvbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJjb25kaXRpb24iLCAmY29uZGl0aW9uX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnNldEJyZWFrcG9pbnRCeVVybCgmZXJyb3IsIGluX2xpbmVOdW1iZXIsIHVybF92
YWx1ZUZvdW5kID8gJmluX3VybCA6IDAsIHVybFJlZ2V4X3ZhbHVlRm91bmQgPyAmaW5fdXJsUmVn
ZXggOiAwLCBjb2x1bW5OdW1iZXJfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OdW1iZXIgOiAwLCBj
b25kaXRpb25fdmFsdWVGb3VuZCA/ICZpbl9jb25kaXRpb24gOiAwLCAmb3V0X2JyZWFrcG9pbnRJ
ZCwgb3V0X2xvY2F0aW9ucyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJicmVh
a3BvaW50SWQiLCBvdXRfYnJlYWtwb2ludElkKTsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBv
cHRpb25hbCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImxvY2F0aW9ucyIsIG91dF9s
b2NhdGlvbnMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJl
YWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIFN0cmluZyBvdXRfYnJlYWtwb2ludElkID0gIiI7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvdXRfYWN0dWFsTG9jYXRpb24gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2xvY2F0aW9uID0g
Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgImxvY2F0aW9uIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgYm9vbCBjb25kaXRpb25fdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5n
IGluX2NvbmRpdGlvbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJjb25kaXRpb24i
LCAmY29uZGl0aW9uX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFr
cG9pbnQoJmVycm9yLCBpbl9sb2NhdGlvbiwgY29uZGl0aW9uX3ZhbHVlRm91bmQgPyAmaW5fY29u
ZGl0aW9uIDogMCwgJm91dF9icmVha3BvaW50SWQsIG91dF9hY3R1YWxMb2NhdGlvbik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBvdXRfYnJlYWtwb2lu
dElkKTsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgiYWN0dWFsTG9jYXRpb24iLCBvdXRfYWN0
dWFsTG9jYXRpb24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3JlbW92ZUJy
ZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fYnJlYWtwb2ludElkID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgImJyZWFrcG9pbnRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnJlbW92ZUJyZWFrcG9pbnQoJmVycm9yLCBpbl9icmVha3BvaW50SWQpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIucmVt
b3ZlQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfY29udGludWVUb0xvY2F0aW9uKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fbG9jYXRpb24gPSBnZXRPYmplY3Qo
cGFyYW1zQ29udGFpbmVyUHRyLCAibG9jYXRpb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5jb250aW51ZVRvTG9jYXRpb24oJmVycm9yLCBpbl9sb2NhdGlvbik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5jb250aW51ZVRv
TG9jYXRpb24iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBPdmVyKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdGVwT3ZlcigmZXJyb3Ip
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVi
dWdnZXIuc3RlcE92ZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdGVwSW50bygm
ZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGVidWdnZXIuc3RlcEludG8iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBPdXQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2Vy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBP
dXQoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRlYnVnZ2VyLnN0ZXBPdXQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3BhdXNlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dl
ckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5wYXVz
ZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRGVidWdnZXIucGF1c2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3Jlc3VtZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1l
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEZWJ1Z2dlci5yZXN1bWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NlYXJjaEluQ29udGVudChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X3Jlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2NyaXB0SWQgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAic2NyaXB0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBT
dHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAicXVlcnkiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250
YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGJvb2wgaW5faXNSZWdleCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdl
eCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNlYXJjaElu
Q29udGVudCgmZXJyb3IsIGluX3NjcmlwdElkLCBpbl9xdWVyeSwgY2FzZVNlbnNpdGl2ZV92YWx1
ZUZvdW5kID8gJmluX2Nhc2VTZW5zaXRpdmUgOiAwLCBpc1JlZ2V4X3ZhbHVlRm91bmQgPyAmaW5f
aXNSZWdleCA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5
KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZWFyY2hJbkNvbnRlbnQiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVn
Z2VyX2NhblNldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
Y2FuU2V0U2NyaXB0U291cmNlKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmNhblNldFNjcmlwdFNv
dXJjZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
ZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBvdXRfY2FsbEZyYW1lcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJzY3JpcHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl9zY3JpcHRTb3VyY2UgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2Ny
aXB0U291cmNlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBwcmV2aWV3X3ZhbHVl
Rm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fcHJldmlldyA9IGdldEJvb2xlYW4ocGFyYW1zQ29u
dGFpbmVyUHRyLCAicHJldmlldyIsICZwcmV2aWV3X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnNldFNjcmlwdFNvdXJjZSgmZXJyb3IsIGluX3NjcmlwdElkLCBpbl9zY3JpcHRT
b3VyY2UsIHByZXZpZXdfdmFsdWVGb3VuZCA/ICZpbl9wcmV2aWV3IDogMCwgb3V0X2NhbGxGcmFt
ZXMsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25h
bCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNhbGxGcmFtZXMiLCBvdXRfY2FsbEZy
YW1lcyk7CiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS4KICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuc2V0U2NyaXB0U291cmNl
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpEZWJ1Z2dlcl9nZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVn
Z2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X3NjcmlwdFNv
dXJjZSA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJzY3JpcHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdl
bnQtPmdldFNjcmlwdFNvdXJjZSgmZXJyb3IsIGluX3NjcmlwdElkLCAmb3V0X3NjcmlwdFNvdXJj
ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBvdXRf
c2NyaXB0U291cmNlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJEZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX2dldEZ1
bmN0aW9uRGV0YWlscyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9kZXRhaWxzID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnVuY3Rp
b25JZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmdW5jdGlvbklkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fZGVidWdnZXJBZ2VudC0+Z2V0RnVuY3Rpb25EZXRhaWxzKCZlcnJvciwgaW5fZnVuY3Rp
b25JZCwgb3V0X2RldGFpbHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgiZGV0
YWlscyIsIG91dF9kZXRhaWxzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5nZXRGdW5jdGlvbkRldGFpbHMiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVn
Z2VyX3NldFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3N0YXRlID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0YXRlIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+c2V0UGF1c2VPbkV4Y2VwdGlvbnMoJmVycm9yLCBpbl9zdGF0ZSk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRQ
YXVzZU9uRXhjZXB0aW9ucyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgYm9vbCBvdXRfd2FzVGhyb3duID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX2NhbGxGcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNh
bGxGcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2V4cHJlc3Np
b24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
Im9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGJvb2wgaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsICJpbmNsdWRlQ29tbWFuZExpbmVBUEkiLCAmaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5ldmFsdWF0ZU9uQ2FsbEZyYW1lKCZlcnJvciwg
aW5fY2FsbEZyYW1lSWQsIGluX2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAm
aW5fb2JqZWN0R3JvdXAgOiAwLCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/ICZp
bl9pbmNsdWRlQ29tbWFuZExpbmVBUEkgOiAwLCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPyAm
aW5fcmV0dXJuQnlWYWx1ZSA6IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAg
IGlmIChvdXRfd2FzVGhyb3duKQogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Ro
cm93biIsIG91dF93YXNUaHJvd24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmV2YWx1YXRlT25DYWxsRnJhbWUiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5z
ZXRET01CcmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnNldERP
TUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnQobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1
Z2dlckFnZW50LT5yZW1vdmVET01CcmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBl
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRP
TURlYnVnZ2VyLnJlbW92ZURPTUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldEV2
ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V2ZW50
TmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJldmVudE5hbWUiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9kb21EZWJ1Z2dlckFnZW50LT5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCgmZXJyb3Is
IGluX2V2ZW50TmFtZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJET01EZWJ1Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NRGVidWdnZXJfcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgImV2ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KCZlcnJvciwgaW5fZXZlbnROYW1lKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnJlbW92ZUV2
ZW50TGlzdGVuZXJCcmVha3BvaW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRJbnN0cnVtZW50
YXRpb25CcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V2ZW50TmFtZSA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJldmVudE5hbWUiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9k
b21EZWJ1Z2dlckFnZW50LT5zZXRJbnN0cnVtZW50YXRpb25CcmVha3BvaW50KCZlcnJvciwgaW5f
ZXZlbnROYW1lKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRPTURlYnVnZ2VyLnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTURlYnVnZ2VyX3JlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgImV2ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUluc3Ry
dW1lbnRhdGlvbkJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NRGVidWdnZXIucmVtb3Zl
SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfc2V0WEhSQnJl
YWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tRGVidWdnZXJBZ2VudC0+c2V0
WEhSQnJlYWtwb2ludCgmZXJyb3IsIGluX3VybCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET01EZWJ1Z2dlci5zZXRYSFJCcmVha3BvaW50Iiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5yZW1vdmVYSFJCcmVha3BvaW50KCZlcnJvciwg
aW5fdXJsKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTURlYnVnZ2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OlByb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2Zp
bGVyQWdlbnQtPmNhdXNlc1JlY29tcGlsYXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuY2F1
c2VzUmVjb21waWxhdGlvbiIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfaXNTYW1wbGluZyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+aXNTYW1wbGluZygmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxl
ci5pc1NhbXBsaW5nIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmhhc0hlYXBQcm9maWxlcigmZXJyb3IsICZvdXRfcmVz
dWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVz
dWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQ
cm9maWxlci5oYXNIZWFwUHJvZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2VuYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmls
ZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+ZW5h
YmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJQcm9maWxlci5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2Rpc2FibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2Zp
bGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRp
c2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIlByb2ZpbGVyLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3N0YXJ0KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9m
aWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5z
dGFydCgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiUHJvZmlsZXIuc3RhcnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3N0b3AobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0b3Ao
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIlByb2ZpbGVyLnN0b3AiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGVIZWFkZXJzKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
cm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBvdXRfaGVhZGVycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3By
b2ZpbGVyQWdlbnQtPmdldFByb2ZpbGVIZWFkZXJzKCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJoZWFkZXJzIiwgb3V0X2hlYWRlcnMpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmdl
dFByb2ZpbGVIZWFkZXJzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRQcm9maWxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb3V0X3Byb2ZpbGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fdWlkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQt
PmdldFByb2ZpbGUoJmVycm9yLCBpbl90eXBlLCBpbl91aWQsIG91dF9wcm9maWxlKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb2ZpbGUiLCBvdXRfcHJvZmlsZSk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuZ2V0
UHJvZmlsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
UHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0
cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnJlbW92ZVByb2ZpbGUoJmVy
cm9yLCBpbl90eXBlLCBpbl91aWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIucmVtb3ZlUHJvZmlsZSIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmls
ZXJfY2xlYXJQcm9maWxlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fcHJvZmlsZXJBZ2VudC0+Y2xlYXJQcm9maWxlcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuY2xlYXJQcm9m
aWxlcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfdGFrZUhlYXBTbmFwc2hvdChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+dGFrZUhlYXBTbmFw
c2hvdCgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiUHJvZmlsZXIudGFrZUhlYXBTbmFwc2hvdCIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfY29s
bGVjdEdhcmJhZ2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X3Byb2ZpbGVyQWdlbnQtPmNvbGxlY3RHYXJiYWdlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5jb2xsZWN0R2FyYmFn
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UHJvZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBpbnQgaW5fb2JqZWN0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5nZXRPYmplY3RCeUhlYXBP
YmplY3RJZCgmZXJyb3IsIGluX29iamVjdElkLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmdldE9iamVjdEJ5SGVh
cE9iamVjdElkIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWQo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX3dvcmtlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJXb3JrZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwg
InZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPnNldFdvcmtlckluc3BlY3Rpb25FbmFi
bGVkKCZlcnJvciwgaW5fdmFsdWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fd29y
a2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dvcmtlcklk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fbWVzc2FnZSA9IGdldE9iamVj
dChwYXJhbXNDb250YWluZXJQdHIsICJtZXNzYWdlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQt
PnNlbmRNZXNzYWdlVG9Xb3JrZXIoJmVycm9yLCBpbl93b3JrZXJJZCwgaW5fbWVzc2FnZSk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJXb3JrZXIu
c2VuZE1lc3NhZ2VUb1dvcmtlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Nvbm5lY3RUb1dvcmtlcihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndvcmtl
cklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPmNvbm5lY3RUb1dvcmtlcigmZXJyb3IsIGlu
X3dvcmtlcklkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIldvcmtlci5jb25uZWN0VG9Xb3JrZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9kaXNjb25uZWN0
RnJvbVdvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgIndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPmRpc2Nvbm5lY3RG
cm9tV29ya2VyKCZlcnJvciwgaW5fd29ya2VySWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLmRpc2Nvbm5lY3RGcm9tV29ya2VyIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpXb3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX3dvcmtlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJXb3Jr
ZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5f
dmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fd29ya2VyQWdlbnQtPnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzKCZlcnJvciwgaW5fdmFsdWUp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiV29y
a2VyLnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgpQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQp7CiAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpKTsKfQoKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpkaXNw
YXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7CiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAs
IGRpc3BhdGNoTWFwLCApOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChkaXNwYXRjaE1h
cC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgQ2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5zcGVjdG9yX2Vu
YWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5zcGVj
dG9yX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
Ok1lbW9yeV9nZXRET01Ob2RlQ291bnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2VfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQYWdlX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlBhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9yZW1vdmVTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpQYWdlX3JlbG9hZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6UGFnZV9uYXZpZ2F0ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UGFnZV9nZXRDb29raWVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQYWdlX2RlbGV0ZUNvb2tpZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZVRyZWUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZ2V0UmVzb3VyY2VDb250ZW50LAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NlYXJjaEluUmVz
b3VyY2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vf
c2VhcmNoSW5SZXNvdXJjZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2Vfc2V0RG9jdW1lbnRDb250ZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldFNjcmVlblNpemVPdmVycmlkZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9ldmFsdWF0ZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9jYWxsRnVu
Y3Rpb25PbiwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVu
dGltZV9nZXRQcm9wZXJ0aWVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpSdW50aW1lX3JlbGVhc2VPYmplY3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX3J1biwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9lbmFibGUsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfZGlzYWJsZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9jbGVh
ck1lc3NhZ2VzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpD
b25zb2xlX3NldE1vbml0b3JpbmdYSFJFbmFibGVkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2FkZEluc3BlY3RlZE5vZGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZW5hYmxlLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2Rpc2FibGUsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0VXNl
ckFnZW50T3ZlcnJpZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Ok5ldHdvcmtfc2V0RXh0cmFIVFRQSGVhZGVycywKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19nZXRSZXNwb25zZUJvZHksCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2Vy
Q2FjaGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdv
cmtfY2xlYXJCcm93c2VyQ2FjaGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcywKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jbGVhckJyb3dzZXJDb29raWVz
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX3Nl
dENhY2hlRGlzYWJsZWQsCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZW5hYmxlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9kaXNhYmxlLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9nZXREYXRh
YmFzZVRhYmxlTmFtZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRhdGFiYXNlX2V4ZWN1dGVTUUwsCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoK
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX2Rpc2FibGUsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VO
YW1lc0ZvckZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlLAojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01T
dG9yYWdlX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NU3RvcmFnZV9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJ
dGVtLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9y
YWdlX3JlbW92ZURPTVN0b3JhZ2VJdGVtLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2Fj
aGVfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpB
cHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWUsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25D
YWNoZUZvckZyYW1lLAojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9lbmFibGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkZpbGVTeXN0ZW1fZGlzYWJsZSwKI2Vu
ZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTV9nZXREb2N1bWVudCwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlcXVlc3RDaGlsZE5vZGVzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcXVlcnlTZWxlY3RvciwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JB
bGwsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRO
b2RlTmFtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X3NldE5vZGVWYWx1ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX3JlbW92ZU5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9zZXRBdHRyaWJ1dGVWYWx1ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEF0dHJpYnV0ZXNBc1RleHQsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRFdmVudExpc3Rl
bmVyc0Zvck5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV9nZXRPdXRlckhUTUwsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9zZXRPdXRlckhUTUwsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRPTV9wZXJmb3JtU2VhcmNoLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpET01fZ2V0U2VhcmNoUmVzdWx0cywKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVxdWVzdE5v
ZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRJ
bnNwZWN0TW9kZUVuYWJsZWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9oaWdobGlnaHRSZWN0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0Tm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZGVIaWdobGlnaHQsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRGcmFtZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3B1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X3Jlc29sdmVOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01fZ2V0QXR0cmlidXRlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RE9NX21vdmVUbywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RE9NX3NldFRvdWNoRW11bGF0aW9uRW5hYmxlZCwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2VuYWJsZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldElubGlu
ZVN0eWxlc0Zvck5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldEFsbFN0eWxlU2hlZXRzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3R5bGVTaGVldCwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldFN0eWxlU2hlZXRU
ZXh0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0
U3R5bGVTaGVldFRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19zZXRQcm9wZXJ0eVRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkNTU190b2dnbGVQcm9wZXJ0eSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFJ1bGVTZWxlY3RvciwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2FkZFJ1bGUsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc3Rh
cnRTZWxlY3RvclByb2ZpbGVyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0YXJ0LAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zdG9wLAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zZXRJbmNsdWRlTWVtb3J5RGV0
YWlscywKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfY2F1c2VzUmVjb21waWxhdGlvbiwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3Vw
cG9ydHNOYXRpdmVCcmVha3BvaW50cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJl
YWtwb2ludEJ5VXJsLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24s
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0
ZXBPdmVyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1
Z2dlcl9zdGVwSW50bywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RGVidWdnZXJfc3RlcE91dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RGVidWdnZXJfcGF1c2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRlYnVnZ2VyX3Jlc3VtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2VhcmNoSW5Db250ZW50LAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jYW5TZXRTY3JpcHRTb3Vy
Y2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2Vy
X3NldFNjcmlwdFNvdXJjZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RGVidWdnZXJfZ2V0U2NyaXB0U291cmNlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9nZXRGdW5jdGlvbkRldGFpbHMsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFBhdXNlT25F
eGNlcHRpb25zLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
ZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2FsbEZyYW1lLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRET01CcmVha3Bv
aW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1
Z2dlcl9yZW1vdmVET01CcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfcmVt
b3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2Vy
X3JlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92
ZVhIUkJyZWFrcG9pbnQsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2lzU2FtcGxpbmcs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2hh
c0hlYXBQcm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6UHJvZmlsZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQcm9maWxlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQcm9maWxlcl9zdGFydCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfc3RvcCwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGUs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3Jl
bW92ZVByb2ZpbGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlByb2ZpbGVyX3Rha2VIZWFwU25hcHNob3QsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRPYmpl
Y3RCeUhlYXBPYmplY3RJZCwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoK
I2lmIEVOQUJMRShXT1JLRVJTKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6V29ya2VyX3NldFdvcmtlckluc3BlY3Rpb25FbmFibGVkLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtl
ciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Nv
bm5lY3RUb1dvcmtlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6V29ya2VyX2Rpc2Nvbm5lY3RGcm9tV29ya2VyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMsCiNlbmRp
ZiAvLyBFTkFCTEUoV09SS0VSUykKCiAgICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0g
c2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tpXSk7CiAgICB9CgogICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTiht
ZXNzYWdlKTsKICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
T2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKICAgIGlmICghbWVzc2FnZU9iamVj
dCkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNz
YWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5n
ZXQoImlkIik7CiAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2Fs
bElkKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJU
aGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdl
T2JqZWN0LT5nZXQoIm1ldGhvZCIpOwogICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9w
ZXJ0eSB3YXNuJ3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG1l
dGhvZDsKICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9m
ICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0
Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsg
bWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgo
KnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9y
U3RyaW5nIGludm9jYXRpb25FcnJvcikKewogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywg
ZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
aWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNh
bGxJZCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKewogICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxv
bmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAp7CiAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7CiAgICBpZiAo
IXNfY29tbW9uRXJyb3JzLnNpemUoKSkgewogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQ
YXJzZUVycm9yLCAtMzI3MDApOwogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlk
UmVxdWVzdCwgLTMyNjAwKTsKICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90
Rm91bmQsIC0zMjYwMSk7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJh
bXMsIC0zMjYwMik7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3Is
IC0zMjYwMyk7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIw
MDApOwogICAgfQogICAgQVNTRVJUKGNvZGUgPj0wKTsKICAgIEFTU0VSVCgodW5zaWduZWQpY29k
ZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7CiAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29k
ZV0pOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2Nv
ZGVdKTsKICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAg
QVNTRVJUKGVycm9yKTsKICAgIGlmIChkYXRhKQogICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0
YSIsIGRhdGEpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3Ip
OwogICAgaWYgKGNhbGxJZCkKICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJ
ZCk7CiAgICBlbHNlCiAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFs
dWU6Om51bGwoKSk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCmludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91
bmQgPSBmYWxzZTsKCiAgICBpbnQgdmFsdWUgPSAwOwoKICAgIGlmICghb2JqZWN0KSB7CiAgICAg
ICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBp
biBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJl
cXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChu
YW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAoIXZhbHVl
Rm91bmQpCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYg
KCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3
cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwog
ICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZvdW5kKQogICAgICAgICAgICAqdmFsdWVGb3VuZCA9
IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0KClN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBTdHJpbmcgdmFsdWUgPSAiIjsKCiAgICBpZiAo
IW9iamVjdCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkgewogICAgICAgICAgICAvLyBSZXF1
aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgogICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0
IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgIH0KCiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+
ZW5kKCk7CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3Ig
PSBvYmplY3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAg
ICAgICAgaWYgKCF2YWx1ZUZvdW5kKQogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnIHdh
cyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVl
OwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUp
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJh
bWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnU3RyaW5nJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKICAgIGVsc2UKICAgICAgICBpZiAodmFsdWVGb3VuZCkKICAgICAgICAg
ICAgKnZhbHVlRm91bmQgPSB0cnVlOwogICAgcmV0dXJuIHZhbHVlOwp9Cgpib29sIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZh
bHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBib29sIHZhbHVlID0g
ZmFsc2U7CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKICAg
ICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5l
ci4KICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0
aCB0eXBlICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVy
YXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRo
IHR5cGUgJ0Jvb2xlYW4nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25k
LT5hc0Jvb2xlYW4oJnZhbHVlKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUg
J0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2
YWx1ZUZvdW5kKQogICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFs
dWU7Cn0KClBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAg
ICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGlu
IG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVx
dWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwogICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5h
bWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAgICAgIGlmICghdmFsdWVG
b3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAo
IXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdy
b25nIHR5cGUuIEl0IG11c3QgYmUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICBlbHNlCiAgICAgICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2YWx1ZUZvdW5kID0g
dHJ1ZTsKICAgIHJldHVybiB2YWx1ZTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYg
KHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
b2JqZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVp
cmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3Qg
bXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAg
ICB9CgogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVu
ZCgpOwogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0g
b2JqZWN0LT5maW5kKG5hbWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAg
ICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBu
b3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdBcnJheScuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7CiAgICBlbHNlCiAgICAgICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2
YWx1ZUZvdW5kID0gdHJ1ZTsKICAgIHJldHVybiB2YWx1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJp
bmcqIHJlc3VsdCkKewogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICBpZiAoIXZhbHVlKQogICAgICAgIHJldHVy
biBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKICAgIGlmICghb2JqZWN0KQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAo
IW9iamVjdC0+Z2V0U3RyaW5nKCJtZXRob2QiLCByZXN1bHQpKQogICAgICAgIHJldHVybiBmYWxz
ZTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>126081</attachid>
            <date>2012-02-08 07:33:54 -0800</date>
            <delta_ts>2012-02-08 07:33:54 -0800</delta_ts>
            <desc>new InspectorBackendDispatcher.cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>text/plain</type>
            <size>194384</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1
ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiAgICAiSW5zcGVjdG9yLmVuYWJsZSIsCiAg
ICAiSW5zcGVjdG9yLmRpc2FibGUiLAogICAgIk1lbW9yeS5nZXRET01Ob2RlQ291bnQiLAogICAg
IlBhZ2UuZW5hYmxlIiwKICAgICJQYWdlLmRpc2FibGUiLAogICAgIlBhZ2UuYWRkU2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZCIsCiAgICAiUGFnZS5yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwK
ICAgICJQYWdlLnJlbG9hZCIsCiAgICAiUGFnZS5uYXZpZ2F0ZSIsCiAgICAiUGFnZS5nZXRDb29r
aWVzIiwKICAgICJQYWdlLmRlbGV0ZUNvb2tpZSIsCiAgICAiUGFnZS5nZXRSZXNvdXJjZVRyZWUi
LAogICAgIlBhZ2UuZ2V0UmVzb3VyY2VDb250ZW50IiwKICAgICJQYWdlLnNlYXJjaEluUmVzb3Vy
Y2UiLAogICAgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZXMiLAogICAgIlBhZ2Uuc2V0RG9jdW1lbnRD
b250ZW50IiwKICAgICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIsCiAgICAiUnVudGltZS5l
dmFsdWF0ZSIsCiAgICAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIsCiAgICAiUnVudGltZS5nZXRQ
cm9wZXJ0aWVzIiwKICAgICJSdW50aW1lLnJlbGVhc2VPYmplY3QiLAogICAgIlJ1bnRpbWUucmVs
ZWFzZU9iamVjdEdyb3VwIiwKICAgICJSdW50aW1lLnJ1biIsCiAgICAiQ29uc29sZS5lbmFibGUi
LAogICAgIkNvbnNvbGUuZGlzYWJsZSIsCiAgICAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiwKICAg
ICJDb25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIiwKICAgICJDb25zb2xlLmFkZEluc3Bl
Y3RlZE5vZGUiLAogICAgIk5ldHdvcmsuZW5hYmxlIiwKICAgICJOZXR3b3JrLmRpc2FibGUiLAog
ICAgIk5ldHdvcmsuc2V0VXNlckFnZW50T3ZlcnJpZGUiLAogICAgIk5ldHdvcmsuc2V0RXh0cmFI
VFRQSGVhZGVycyIsCiAgICAiTmV0d29yay5nZXRSZXNwb25zZUJvZHkiLAogICAgIk5ldHdvcmsu
Y2FuQ2xlYXJCcm93c2VyQ2FjaGUiLAogICAgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiLAog
ICAgIk5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsCiAgICAiTmV0d29yay5jbGVhckJy
b3dzZXJDb29raWVzIiwKICAgICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiLAojaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKCiAgICAiRGF0YWJhc2UuZW5hYmxlIiwKICAgICJEYXRhYmFzZS5kaXNh
YmxlIiwKICAgICJEYXRhYmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiLAogICAgIkRhdGFiYXNl
LmV4ZWN1dGVTUUwiLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKCiAgICAiSW5kZXhlZERCLmVuYWJsZSIsCiAgICAiSW5kZXhlZERC
LmRpc2FibGUiLAogICAgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lIiwK
ICAgICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKICAgICJET01TdG9yYWdlLmVuYWJsZSIsCiAgICAiRE9NU3RvcmFnZS5kaXNh
YmxlIiwKICAgICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiwKICAgICJET01TdG9y
YWdlLnNldERPTVN0b3JhZ2VJdGVtIiwKICAgICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJ
dGVtIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMiLAogICAg
IkFwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldE1hbmlm
ZXN0Rm9yRnJhbWUiLAogICAgIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZv
ckZyYW1lIiwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAiRmlsZVN5c3RlbS5lbmFibGUi
LAogICAgIkZpbGVTeXN0ZW0uZGlzYWJsZSIsCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0p
CgogICAgIkRPTS5nZXREb2N1bWVudCIsCiAgICAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiwKICAg
ICJET00ucXVlcnlTZWxlY3RvciIsCiAgICAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLAogICAgIkRP
TS5zZXROb2RlTmFtZSIsCiAgICAiRE9NLnNldE5vZGVWYWx1ZSIsCiAgICAiRE9NLnJlbW92ZU5v
ZGUiLAogICAgIkRPTS5zZXRBdHRyaWJ1dGVWYWx1ZSIsCiAgICAiRE9NLnNldEF0dHJpYnV0ZXNB
c1RleHQiLAogICAgIkRPTS5yZW1vdmVBdHRyaWJ1dGUiLAogICAgIkRPTS5nZXRFdmVudExpc3Rl
bmVyc0Zvck5vZGUiLAogICAgIkRPTS5nZXRPdXRlckhUTUwiLAogICAgIkRPTS5zZXRPdXRlckhU
TUwiLAogICAgIkRPTS5wZXJmb3JtU2VhcmNoIiwKICAgICJET00uZ2V0U2VhcmNoUmVzdWx0cyIs
CiAgICAiRE9NLmRpc2NhcmRTZWFyY2hSZXN1bHRzIiwKICAgICJET00ucmVxdWVzdE5vZGUiLAog
ICAgIkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgIkRPTS5oaWdobGlnaHRSZWN0IiwK
ICAgICJET00uaGlnaGxpZ2h0Tm9kZSIsCiAgICAiRE9NLmhpZGVIaWdobGlnaHQiLAogICAgIkRP
TS5oaWdobGlnaHRGcmFtZSIsCiAgICAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsCiAg
ICAiRE9NLnJlc29sdmVOb2RlIiwKICAgICJET00uZ2V0QXR0cmlidXRlcyIsCiAgICAiRE9NLm1v
dmVUbyIsCiAgICAiRE9NLnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCIsCiAgICAiQ1NTLmVuYWJs
ZSIsCiAgICAiQ1NTLmRpc2FibGUiLAogICAgIkNTUy5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSIs
CiAgICAiQ1NTLmdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAgIkNTUy5nZXRDb21wdXRlZFN0
eWxlRm9yTm9kZSIsCiAgICAiQ1NTLmdldEFsbFN0eWxlU2hlZXRzIiwKICAgICJDU1MuZ2V0U3R5
bGVTaGVldCIsCiAgICAiQ1NTLmdldFN0eWxlU2hlZXRUZXh0IiwKICAgICJDU1Muc2V0U3R5bGVT
aGVldFRleHQiLAogICAgIkNTUy5zZXRQcm9wZXJ0eVRleHQiLAogICAgIkNTUy50b2dnbGVQcm9w
ZXJ0eSIsCiAgICAiQ1NTLnNldFJ1bGVTZWxlY3RvciIsCiAgICAiQ1NTLmFkZFJ1bGUiLAogICAg
IkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiwKICAgICJDU1Muc3RhcnRTZWxlY3RvclBy
b2ZpbGVyIiwKICAgICJDU1Muc3RvcFNlbGVjdG9yUHJvZmlsZXIiLAogICAgIlRpbWVsaW5lLnN0
YXJ0IiwKICAgICJUaW1lbGluZS5zdG9wIiwKICAgICJUaW1lbGluZS5zZXRJbmNsdWRlTWVtb3J5
RGV0YWlscyIsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAiRGVidWdnZXIu
Y2F1c2VzUmVjb21waWxhdGlvbiIsCiAgICAiRGVidWdnZXIuc3VwcG9ydHNOYXRpdmVCcmVha3Bv
aW50cyIsCiAgICAiRGVidWdnZXIuZW5hYmxlIiwKICAgICJEZWJ1Z2dlci5kaXNhYmxlIiwKICAg
ICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIsCiAgICAiRGVidWdnZXIuc2V0QnJlYWtw
b2ludEJ5VXJsIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5jb250aW51ZVRvTG9jYXRpb24iLAogICAg
IkRlYnVnZ2VyLnN0ZXBPdmVyIiwKICAgICJEZWJ1Z2dlci5zdGVwSW50byIsCiAgICAiRGVidWdn
ZXIuc3RlcE91dCIsCiAgICAiRGVidWdnZXIucGF1c2UiLAogICAgIkRlYnVnZ2VyLnJlc3VtZSIs
CiAgICAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50IiwKICAgICJEZWJ1Z2dlci5jYW5TZXRTY3Jp
cHRTb3VyY2UiLAogICAgIkRlYnVnZ2VyLnNldFNjcmlwdFNvdXJjZSIsCiAgICAiRGVidWdnZXIu
Z2V0U2NyaXB0U291cmNlIiwKICAgICJEZWJ1Z2dlci5nZXRGdW5jdGlvbkRldGFpbHMiLAogICAg
IkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIiwKICAgICJEZWJ1Z2dlci5ldmFsdWF0ZU9u
Q2FsbEZyYW1lIiwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJET01EZWJ1Z2dlci5zZXRET01CcmVha3Bv
aW50IiwKICAgICJET01EZWJ1Z2dlci5yZW1vdmVET01CcmVha3BvaW50IiwKICAgICJET01EZWJ1
Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIsCiAgICAiRE9NRGVidWdnZXIucmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldEluc3RydW1lbnRh
dGlvbkJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnJlbW92ZUluc3RydW1lbnRhdGlvbkJy
ZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldFhIUkJyZWFrcG9pbnQiLAogICAgIkRPTURl
YnVnZ2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgIlByb2ZpbGVy
LmNhdXNlc1JlY29tcGlsYXRpb24iLAogICAgIlByb2ZpbGVyLmlzU2FtcGxpbmciLAogICAgIlBy
b2ZpbGVyLmhhc0hlYXBQcm9maWxlciIsCiAgICAiUHJvZmlsZXIuZW5hYmxlIiwKICAgICJQcm9m
aWxlci5kaXNhYmxlIiwKICAgICJQcm9maWxlci5zdGFydCIsCiAgICAiUHJvZmlsZXIuc3RvcCIs
CiAgICAiUHJvZmlsZXIuZ2V0UHJvZmlsZUhlYWRlcnMiLAogICAgIlByb2ZpbGVyLmdldFByb2Zp
bGUiLAogICAgIlByb2ZpbGVyLnJlbW92ZVByb2ZpbGUiLAogICAgIlByb2ZpbGVyLmNsZWFyUHJv
ZmlsZXMiLAogICAgIlByb2ZpbGVyLnRha2VIZWFwU25hcHNob3QiLAogICAgIlByb2ZpbGVyLmNv
bGxlY3RHYXJiYWdlIiwKICAgICJQcm9maWxlci5nZXRPYmplY3RCeUhlYXBPYmplY3RJZCIsCiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykK
CiAgICAiV29ya2VyLnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkIiwKICAgICJXb3JrZXIuc2Vu
ZE1lc3NhZ2VUb1dvcmtlciIsCiAgICAiV29ya2VyLmNvbm5lY3RUb1dvcmtlciIsCiAgICAiV29y
a2VyLmRpc2Nvbm5lY3RGcm9tV29ya2VyIiwKICAgICJXb3JrZXIuc2V0QXV0b2Nvbm5lY3RUb1dv
cmtlcnMiLAojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgp9OwoKCmNsYXNzIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbCA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
CnB1YmxpYzoKICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAsIG1f
YXBwbGljYXRpb25DYWNoZUFnZW50KDApCiAgICAgICAgLCBtX2Nzc0FnZW50KDApCiAgICAgICAg
LCBtX2NvbnNvbGVBZ2VudCgwKQogICAgICAgICwgbV9kb21BZ2VudCgwKQojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9kb21EZWJ1Z2dlckFnZW50KDApCiNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgLCBtX2RvbVN0b3JhZ2VB
Z2VudCgwKQojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2RhdGFiYXNlQWdl
bnQoMCkKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgICAgICwgbV9kZWJ1Z2dlckFnZW50KDApCiNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgICAg
ICwgbV9maWxlU3lzdGVtQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2luZGV4ZWREQkFnZW50KDAp
CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAgLCBtX2luc3BlY3Rv
ckFnZW50KDApCiAgICAgICAgLCBtX21lbW9yeUFnZW50KDApCiAgICAgICAgLCBtX25ldHdvcmtB
Z2VudCgwKQogICAgICAgICwgbV9wYWdlQWdlbnQoMCkKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKICAgICAgICAsIG1fcHJvZmlsZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9ydW50aW1lQWdlbnQoMCkKICAgICAgICAs
IG1fdGltZWxpbmVBZ2VudCgwKQojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgICAgICwgbV93b3Jr
ZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgogICAgeyB9CgogICAgdmlydHVh
bCB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsg
fQogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQs
IENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OwogICAgdXNpbmcgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3I7CgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QWdlbnQoQXBwbGljYXRpb25DYWNoZUNvbW1hbmRIYW5kbGVyKiBhcHBsaWNhdGlvbkNhY2hlQWdl
bnQpIHsgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7IG1fYXBwbGljYXRpb25DYWNo
ZUFnZW50ID0gYXBwbGljYXRpb25DYWNoZUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJBZ2VudChDU1NDb21tYW5kSGFuZGxlciogY3NzQWdlbnQpIHsgQVNTRVJUKCFtX2Nzc0FnZW50
KTsgbV9jc3NBZ2VudCA9IGNzc0FnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2Vu
dChDb25zb2xlQ29tbWFuZEhhbmRsZXIqIGNvbnNvbGVBZ2VudCkgeyBBU1NFUlQoIW1fY29uc29s
ZUFnZW50KTsgbV9jb25zb2xlQWdlbnQgPSBjb25zb2xlQWdlbnQ7IH0KICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckFnZW50KERPTUNvbW1hbmRIYW5kbGVyKiBkb21BZ2VudCkgeyBBU1NFUlQoIW1f
ZG9tQWdlbnQpOyBtX2RvbUFnZW50ID0gZG9tQWdlbnQ7IH0KI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERPTURlYnVnZ2VyQ29t
bWFuZEhhbmRsZXIqIGRvbURlYnVnZ2VyQWdlbnQpIHsgQVNTRVJUKCFtX2RvbURlYnVnZ2VyQWdl
bnQpOyBtX2RvbURlYnVnZ2VyQWdlbnQgPSBkb21EZWJ1Z2dlckFnZW50OyB9CiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2Vu
dChET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIqIGRvbVN0b3JhZ2VBZ2VudCkgeyBBU1NFUlQoIW1f
ZG9tU3RvcmFnZUFnZW50KTsgbV9kb21TdG9yYWdlQWdlbnQgPSBkb21TdG9yYWdlQWdlbnQ7IH0K
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQo
RGF0YWJhc2VDb21tYW5kSGFuZGxlciogZGF0YWJhc2VBZ2VudCkgeyBBU1NFUlQoIW1fZGF0YWJh
c2VBZ2VudCk7IG1fZGF0YWJhc2VBZ2VudCA9IGRhdGFiYXNlQWdlbnQ7IH0KI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoRGVidWdnZXJDb21tYW5kSGFuZGxlciogZGVidWdn
ZXJBZ2VudCkgeyBBU1NFUlQoIW1fZGVidWdnZXJBZ2VudCk7IG1fZGVidWdnZXJBZ2VudCA9IGRl
YnVnZ2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChGaWxl
U3lzdGVtQ29tbWFuZEhhbmRsZXIqIGZpbGVTeXN0ZW1BZ2VudCkgeyBBU1NFUlQoIW1fZmlsZVN5
c3RlbUFnZW50KTsgbV9maWxlU3lzdGVtQWdlbnQgPSBmaWxlU3lzdGVtQWdlbnQ7IH0KI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbmRleGVkREJDb21tYW5kSGFuZGxlciogaW5k
ZXhlZERCQWdlbnQpIHsgQVNTRVJUKCFtX2luZGV4ZWREQkFnZW50KTsgbV9pbmRleGVkREJBZ2Vu
dCA9IGluZGV4ZWREQkFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JDb21tYW5kSGFuZGxlciog
aW5zcGVjdG9yQWdlbnQpIHsgQVNTRVJUKCFtX2luc3BlY3RvckFnZW50KTsgbV9pbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChN
ZW1vcnlDb21tYW5kSGFuZGxlciogbWVtb3J5QWdlbnQpIHsgQVNTRVJUKCFtX21lbW9yeUFnZW50
KTsgbV9tZW1vcnlBZ2VudCA9IG1lbW9yeUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJBZ2VudChOZXR3b3JrQ29tbWFuZEhhbmRsZXIqIG5ldHdvcmtBZ2VudCkgeyBBU1NFUlQoIW1f
bmV0d29ya0FnZW50KTsgbV9uZXR3b3JrQWdlbnQgPSBuZXR3b3JrQWdlbnQ7IH0KICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckFnZW50KFBhZ2VDb21tYW5kSGFuZGxlciogcGFnZUFnZW50KSB7IEFT
U0VSVCghbV9wYWdlQWdlbnQpOyBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudDsgfQojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoUHJv
ZmlsZXJDb21tYW5kSGFuZGxlciogcHJvZmlsZXJBZ2VudCkgeyBBU1NFUlQoIW1fcHJvZmlsZXJB
Z2VudCk7IG1fcHJvZmlsZXJBZ2VudCA9IHByb2ZpbGVyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFJ1
bnRpbWVDb21tYW5kSGFuZGxlciogcnVudGltZUFnZW50KSB7IEFTU0VSVCghbV9ydW50aW1lQWdl
bnQpOyBtX3J1bnRpbWVBZ2VudCA9IHJ1bnRpbWVBZ2VudDsgfQogICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQWdlbnQoVGltZWxpbmVDb21tYW5kSGFuZGxlciogdGltZWxpbmVBZ2VudCkgeyBBU1NF
UlQoIW1fdGltZWxpbmVBZ2VudCk7IG1fdGltZWxpbmVBZ2VudCA9IHRpbWVsaW5lQWdlbnQ7IH0K
I2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFdvcmtl
ckNvbW1hbmRIYW5kbGVyKiB3b3JrZXJBZ2VudCkgeyBBU1NFUlQoIW1fd29ya2VyQWdlbnQpOyBt
X3dvcmtlckFnZW50ID0gd29ya2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoK
cHJpdmF0ZToKICAgIHZvaWQgSW5zcGVjdG9yX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEluc3BlY3Rvcl9kaXNhYmxl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgTWVtb3J5X2dldERPTU5vZGVDb3VudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZW5hYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9k
aXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgUGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9yZW1v
dmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9yZWxvYWQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX25hdmln
YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgUGFnZV9nZXRDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9kZWxldGVDb29raWUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdl
X2dldFJlc291cmNlVHJlZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZ2V0UmVzb3VyY2VDb250ZW50KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9z
ZWFyY2hJblJlc291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9zZWFyY2hJblJlc291cmNlcyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2V0
RG9jdW1lbnRDb250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9zZXRTY3JlZW5TaXplT3ZlcnJpZGUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBSdW50
aW1lX2V2YWx1YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9jYWxsRnVuY3Rpb25Pbihsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfZ2V0
UHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFz
ZU9iamVjdEdyb3VwKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9ydW4obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2VuYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENv
bnNvbGVfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIENvbnNvbGVfY2xlYXJNZXNzYWdlcyhsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENvbnNvbGVfc2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2FkZEluc3BlY3RlZE5vZGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfc2V0VXNlckFn
ZW50T3ZlcnJpZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBOZXR3b3Jr
X2dldFJlc3BvbnNlQm9keShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ2FjaGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX2NsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29r
aWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgTmV0d29ya19jbGVhckJyb3dzZXJDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19zZXRDYWNo
ZURpc2FibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdm9pZCBEYXRhYmFzZV9lbmFibGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBEYXRhYmFzZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVz
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRGF0YWJhc2VfZXhlY3V0ZVNRTChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZvaWQgSW5kZXhlZERCX2VuYWJsZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IEluZGV4ZWREQl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5hbWVzRm9y
RnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKICAgIHZvaWQgRE9NU3RvcmFnZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01TdG9yYWdlX2Rp
c2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFn
ZV9zZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTVN0b3JhZ2VfcmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVfZ2V0TWFuaWZlc3RGb3JGcmFt
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKCiAgICB2b2lkIEZpbGVTeXN0ZW1fZW5hYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRmlsZVN5c3Rl
bV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICB2b2lkIERPTV9nZXREb2N1
bWVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERPTV9yZXF1ZXN0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9xdWVyeVNlbGVjdG9yKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgRE9NX3F1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0Tm9kZU5hbWUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0
Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRE9NX3JlbW92ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0QXR0cmlidXRlVmFsdWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBET01fc2V0QXR0cmlidXRlc0FzVGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZW1vdmVBdHRyaWJ1dGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBET01fZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2dldE91dGVySFRNTChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IERPTV9zZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcGVyZm9ybVNlYXJjaChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9nZXRTZWFy
Y2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3JlcXVlc3RO
b2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRE9NX3NldEluc3BlY3RNb2RlRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9oaWdobGlnaHRSZWN0
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRE9NX2hpZ2hsaWdodE5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01faGlkZUhpZ2hsaWdodChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9o
aWdobGlnaHRGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERPTV9wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01f
cmVzb2x2ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBET01fZ2V0QXR0cmlidXRlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9tb3ZlVG8obG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01fc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19kaXNh
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgQ1NTX2dldE1hdGNoZWRTdHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldElubGluZVN0
eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0
QWxsU3R5bGVTaGVldHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19nZXRTdHlsZVNo
ZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIENTU19zZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zZXRQcm9wZXJ0eVRl
eHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBDU1NfdG9nZ2xlUHJvcGVydHkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc2V0UnVsZVNlbGVjdG9yKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19z
dGFydFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBU
aW1lbGluZV9zdGFydChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIFRpbWVsaW5lX3N0b3AobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBUaW1lbGluZV9zZXRJbmNsdWRl
TWVtb3J5RGV0YWlscyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERlYnVn
Z2VyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFr
cG9pbnRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZGlzYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5
VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3JlbW92ZUJyZWFr
cG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdGVw
T3Zlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc3RlcE91dChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3BhdXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2VhcmNoSW5D
b250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0
U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJf
Z2V0RnVuY3Rpb25EZXRhaWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnMobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBEZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2FsbEZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgRE9NRGVi
dWdnZXJfc2V0RE9NQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURl
YnVnZ2VyX3JlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NRGVidWdnZXJfc2V0
SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3JlbW92ZUluc3RydW1l
bnRhdGlvbkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RE9NRGVidWdnZXJfcmVtb3ZlWEhSQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIFByb2Zp
bGVyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9pc1NhbXBsaW5nKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfaGFzSGVhcFByb2ZpbGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJf
ZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIFByb2ZpbGVyX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfc3RvcChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2Zp
bGVyX2dldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZ2V0UHJvZmlsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2Zp
bGVyX3JlbW92ZVByb2ZpbGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9jbGVhclByb2ZpbGVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmls
ZXJfdGFrZUhlYXBTbmFwc2hvdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgdm9pZCBXb3JrZXJfc2V0V29ya2VySW5z
cGVjdGlvbkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlcihsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtl
cl9jb25uZWN0VG9Xb3JrZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBX
b3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICBBcHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIqIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
OwogICAgQ1NTQ29tbWFuZEhhbmRsZXIqIG1fY3NzQWdlbnQ7CiAgICBDb25zb2xlQ29tbWFuZEhh
bmRsZXIqIG1fY29uc29sZUFnZW50OwogICAgRE9NQ29tbWFuZEhhbmRsZXIqIG1fZG9tQWdlbnQ7
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICBET01EZWJ1Z2dlckNvbW1hbmRI
YW5kbGVyKiBtX2RvbURlYnVnZ2VyQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICBET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIqIG1fZG9tU3RvcmFnZUFnZW50
OwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICBEYXRhYmFzZUNvbW1hbmRIYW5kbGVyKiBt
X2RhdGFiYXNlQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIERlYnVnZ2VyQ29tbWFuZEhhbmRsZXIqIG1fZGVi
dWdnZXJBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKCiAgICBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIqIG1fZmlsZVN5
c3RlbUFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQoKICAgIEluZGV4ZWREQkNvbW1hbmRIYW5kbGVyKiBtX2luZGV4ZWREQkFn
ZW50OwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgogICAgSW5zcGVjdG9yQ29t
bWFuZEhhbmRsZXIqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICBNZW1vcnlDb21tYW5kSGFuZGxlciog
bV9tZW1vcnlBZ2VudDsKICAgIE5ldHdvcmtDb21tYW5kSGFuZGxlciogbV9uZXR3b3JrQWdlbnQ7
CiAgICBQYWdlQ29tbWFuZEhhbmRsZXIqIG1fcGFnZUFnZW50OwojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgUHJvZmlsZXJDb21tYW5kSGFuZGxlciogbV9wcm9maWxlckFnZW50
OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgUnVudGltZUNvbW1h
bmRIYW5kbGVyKiBtX3J1bnRpbWVBZ2VudDsKICAgIFRpbWVsaW5lQ29tbWFuZEhhbmRsZXIqIG1f
dGltZWxpbmVBZ2VudDsKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIFdvcmtlckNvbW1hbmRIYW5k
bGVyKiBtX3dvcmtlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKICAgIHN0YXRp
YyBpbnQgZ2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CiAgICBz
dGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOwogICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpOwogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpOwogICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcg
aW52b2NhdGlvbkVycm9yKTsKCn07Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6SW5zcGVjdG9yX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkluc3BlY3RvciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJJbnNwZWN0b3IuZW5hYmxlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpJbnNwZWN0b3JfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluc3BlY3RvciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiSW5zcGVjdG9yLmRp
c2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6Ok1lbW9yeV9nZXRET01Ob2RlQ291bnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX21lbW9yeUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJNZW1vcnkgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2RvbUdyb3VwcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9z
dHJpbmdzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX21lbW9yeUFn
ZW50LT5nZXRET01Ob2RlQ291bnQoJmVycm9yLCBvdXRfZG9tR3JvdXBzLCBvdXRfc3RyaW5ncyk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImRvbUdyb3VwcyIsIG91dF9kb21Hcm91
cHMpOwogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzdHJpbmdzIiwgb3V0X3N0cmluZ3MpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk1lbW9yeS5n
ZXRET01Ob2RlQ291bnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZW5hYmxlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpQYWdlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9w
YWdlQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9hZGRTY3Jp
cHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIFN0cmluZyBvdXRfaWRlbnRpZmllciA9ICIiOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9zY3JpcHRTb3VyY2UgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
c2NyaXB0U291cmNlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5hZGRTY3JpcHRUb0V2YWx1YXRl
T25Mb2FkKCZlcnJvciwgaW5fc2NyaXB0U291cmNlLCAmb3V0X2lkZW50aWZpZXIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWRlbnRpZmllciIsIG91dF9pZGVudGlmaWVyKTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmFk
ZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5faWRlbnRpZmllciA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJpZGVudGlmaWVyIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5yZW1vdmVT
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkKCZlcnJvciwgaW5faWRlbnRpZmllcik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLnJlbW92ZVNjcmlw
dFRvRXZhbHVhdGVPbkxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfcmVsb2FkKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2Ug
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaWdub3Jl
Q2FjaGVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pZ25vcmVDYWNoZSA9IGdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaWdub3JlQ2FjaGUiLCAmaWdub3JlQ2FjaGVfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBzY3JpcHRUb0V2YWx1YXRlT25M
b2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9zY3JpcHRUb0V2YWx1YXRlT25M
b2FkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNjcmlwdFRvRXZhbHVhdGVPbkxv
YWQiLCAmc2NyaXB0VG9FdmFsdWF0ZU9uTG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPnJlbG9hZCgmZXJyb3IsIGlnbm9yZUNhY2hlX3ZhbHVlRm91bmQgPyAmaW5faWdub3JlQ2Fj
aGUgOiAwLCBzY3JpcHRUb0V2YWx1YXRlT25Mb2FkX3ZhbHVlRm91bmQgPyAmaW5fc2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZCA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiUGFnZS5yZWxvYWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfbmF2aWdhdGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9wYWdlQWdlbnQtPm5hdmlnYXRlKCZlcnJvciwgaW5fdXJsKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UubmF2aWdhdGUiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2VfZ2V0Q29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG91dF9jb29raWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgU3RyaW5nIG91dF9jb29raWVzU3RyaW5nID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPmdldENvb2tpZXMoJmVycm9yLCBvdXRfY29va2llcywgJm91dF9jb29raWVzU3RyaW5nKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29va2llcyIsIG91dF9jb29raWVzKTsK
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY29va2llc1N0cmluZyIsIG91dF9jb29raWVzU3Ry
aW5nKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQ
YWdlLmdldENvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZGVsZXRlQ29va2llKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9jb29raWVOYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNvb2tpZU5hbWUi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZG9tYWluID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgImRvbWFpbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+ZGVs
ZXRlQ29va2llKCZlcnJvciwgaW5fY29va2llTmFtZSwgaW5fZG9tYWluKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZGVsZXRlQ29va2ll
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQYWdlX2dldFJlc291cmNlVHJlZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfZnJhbWVUcmVlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+Z2V0UmVzb3VyY2VUcmVlKCZl
cnJvciwgb3V0X2ZyYW1lVHJlZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJm
cmFtZVRyZWUiLCBvdXRfZnJhbWVUcmVlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmdldFJlc291cmNlVHJlZSIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9n
ZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgU3RyaW5nIG91dF9jb250ZW50ID0gIiI7CiAgICBib29sIG91dF9iYXNlNjRF
bmNvZGVkID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXJs
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5nZXRSZXNvdXJjZUNvbnRlbnQoJmVycm9yLCBpbl9m
cmFtZUlkLCBpbl91cmwsICZvdXRfY29udGVudCwgJm91dF9iYXNlNjRFbmNvZGVkKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImNvbnRlbnQiLCBvdXRfY29udGVudCk7CiAgICAg
ICAgcmVzdWx0LT5zZXRCb29sZWFuKCJiYXNlNjRFbmNvZGVkIiwgb3V0X2Jhc2U2NEVuY29kZWQp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uu
Z2V0UmVzb3VyY2VDb250ZW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NlYXJjaEluUmVzb3VyY2UobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgImZyYW1lSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdXJsID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJx
dWVyeSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY2FzZVNlbnNpdGl2ZV92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2Nhc2VTZW5zaXRpdmUgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgImNhc2VTZW5zaXRpdmUiLCAmY2FzZVNlbnNpdGl2ZV92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgYm9vbCBpbl9pc1JlZ2V4ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIs
ICJpc1JlZ2V4IiwgJmlzUmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZWFy
Y2hJblJlc291cmNlKCZlcnJvciwgaW5fZnJhbWVJZCwgaW5fdXJsLCBpbl9xdWVyeSwgY2FzZVNl
bnNpdGl2ZV92YWx1ZUZvdW5kID8gJmluX2Nhc2VTZW5zaXRpdmUgOiAwLCBpc1JlZ2V4X3ZhbHVl
Rm91bmQgPyAmaW5faXNSZWdleCA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLnNlYXJjaEluUmVzb3VyY2UiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OlBhZ2Vfc2VhcmNoSW5SZXNvdXJjZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcmVzdWx0ID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90ZXh0
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9v
bCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYXNl
U2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdl
eCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdleCIsICZpc1JlZ2V4X3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+c2VhcmNoSW5SZXNvdXJjZXMoJmVycm9yLCBp
bl90ZXh0LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAs
IGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2VhcmNoSW5S
ZXNvdXJjZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0RG9jdW1lbnRDb250ZW50KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5faHRtbCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJodG1sIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZXREb2N1bWVudENv
bnRlbnQoJmVycm9yLCBpbl9mcmFtZUlkLCBpbl9odG1sKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2V0RG9jdW1lbnRDb250ZW50Iiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQYWdlX3NldFNjcmVlblNpemVPdmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd2lkdGggPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAid2lkdGgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBpbnQgaW5faGVpZ2h0ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImhlaWdodCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKCZlcnJvciwgaW5f
d2lkdGgsIGluX2hlaWdodCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGlt
ZV9ldmFsdWF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGJvb2wgb3V0X3dhc1Rocm93biA9IGZhbHNlOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9leHByZXNzaW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgImV4cHJlc3Npb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVj
dEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91cCIsICZvYmplY3RHcm91cF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluY2x1ZGVDb21tYW5kTGlu
ZUFQSV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2luY2x1ZGVDb21tYW5kTGluZUFQ
SSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
IiwgJmluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
Ym9vbCBpbl9kb05vdFBhdXNlT25FeGNlcHRpb25zID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsICJkb05vdFBhdXNlT25FeGNlcHRpb25zIiwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBmcmFtZUlkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgImZyYW1lSWQiLCAmZnJhbWVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJyZXR1cm5C
eVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFnZW50
LT5ldmFsdWF0ZSgmZXJyb3IsIGluX2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQg
PyAmaW5fb2JqZWN0R3JvdXAgOiAwLCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/
ICZpbl9pbmNsdWRlQ29tbWFuZExpbmVBUEkgOiAwLCBkb05vdFBhdXNlT25FeGNlcHRpb25zX3Zh
bHVlRm91bmQgPyAmaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucyA6IDAsIGZyYW1lSWRfdmFsdWVG
b3VuZCA/ICZpbl9mcmFtZUlkIDogMCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8gJmluX3Jl
dHVybkJ5VmFsdWUgOiAwLCBvdXRfcmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICBpZiAo
b3V0X3dhc1Rocm93bikKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJ3YXNUaHJvd24i
LCBvdXRfd2FzVGhyb3duKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJSdW50aW1lLmV2YWx1YXRlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2NhbGxGdW5jdGlv
bk9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgYm9vbCBvdXRfd2FzVGhyb3duID0gZmFsc2U7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9i
amVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2Z1bmN0aW9uRGVj
bGFyYXRpb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnVuY3Rpb25EZWNsYXJh
dGlvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgYXJndW1lbnRzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5fYXJndW1lbnRzID0gZ2V0
QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAiYXJndW1lbnRzIiwgJmFyZ3VtZW50c192YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJhbXND
b250YWluZXJQdHIsICJyZXR1cm5CeVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fcnVudGltZUFnZW50LT5jYWxsRnVuY3Rpb25PbigmZXJyb3IsIGluX29iamVjdElk
LCBpbl9mdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHNfdmFsdWVGb3VuZCA/ICZpbl9hcmd1
bWVudHMgOiAwLCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPyAmaW5fcmV0dXJuQnlWYWx1ZSA6
IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIGlmIChvdXRfd2FzVGhyb3du
KQogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIG91dF93YXNUaHJv
d24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlJ1
bnRpbWUuY2FsbEZ1bmN0aW9uT24iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZ2V0UHJvcGVydGllcyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgIm9iamVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBv
d25Qcm9wZXJ0aWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fb3duUHJvcGVydGll
cyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAib3duUHJvcGVydGllcyIsICZvd25Q
cm9wZXJ0aWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3J1bnRpbWVBZ2VudC0+Z2V0UHJvcGVydGll
cygmZXJyb3IsIGluX29iamVjdElkLCBvd25Qcm9wZXJ0aWVzX3ZhbHVlRm91bmQgPyAmaW5fb3du
UHJvcGVydGllcyA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLmdldFByb3BlcnRpZXMiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRp
bWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9ydW50aW1lQWdl
bnQtPnJlbGVhc2VPYmplY3QoJmVycm9yLCBpbl9vYmplY3RJZCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLnJlbGVhc2VPYmplY3Qi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRp
bWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91
cCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX3J1bnRpbWVBZ2VudC0+cmVsZWFzZU9iamVjdEdyb3VwKCZlcnJvciwg
aW5fb2JqZWN0R3JvdXApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUnVudGltZS5yZWxlYXNlT2JqZWN0R3JvdXAiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVf
cnVuKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1
bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFn
ZW50LT5ydW4oJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIlJ1bnRpbWUucnVuIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2VuYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29s
ZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+ZW5hYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDb25zb2xlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9kaXNhYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29uc29sZUFnZW50LT5kaXNhYmxlKCZl
cnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJDb25zb2xlLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfY2xlYXJNZXNzYWdlcyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29s
ZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+Y2xlYXJN
ZXNzYWdlcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX3NldE1v
bml0b3JpbmdYSFJFbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IGdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2Vu
dC0+c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuc2V0TW9u
aXRvcmluZ1hIUkVuYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9kZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJDb25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJ
ZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2VudC0+YWRkSW5zcGVjdGVkTm9kZSgmZXJyb3IsIGlu
X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDb25zb2xlLmFkZEluc3BlY3RlZE5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZW5hYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9u
ZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5l
bmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIk5ldHdvcmsuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2Rpc2FibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdv
cmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmRpc2Fi
bGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIk5ldHdvcmsuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19zZXRVc2VyQWdlbnRPdmVy
cmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXNlckFnZW50ID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInVzZXJBZ2VudCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+c2V0VXNl
ckFnZW50T3ZlcnJpZGUoJmVycm9yLCBpbl91c2VyQWdlbnQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5zZXRVc2VyQWdlbnRPdmVy
cmlkZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6TmV0d29ya19zZXRFeHRyYUhUVFBIZWFkZXJzKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
Ik5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2hlYWRlcnMgPSBnZXRPYmplY3QocGFyYW1zQ29udGFp
bmVyUHRyLCAiaGVhZGVycyIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+c2V0RXh0cmFIVFRQ
SGVhZGVycygmZXJyb3IsIGluX2hlYWRlcnMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5zZXRFeHRyYUhUVFBIZWFkZXJzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpOZXR3b3JrX2dldFJlc3BvbnNlQm9keShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29y
a0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2JvZHkgPSAiIjsKICAgIGJv
b2wgb3V0X2Jhc2U2NEVuY29kZWQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5f
cmVxdWVzdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInJlcXVlc3RJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX25ldHdvcmtBZ2VudC0+Z2V0UmVzcG9uc2VCb2R5KCZlcnJvciwgaW5fcmVxdWVz
dElkLCAmb3V0X2JvZHksICZvdXRfYmFzZTY0RW5jb2RlZCk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJib2R5Iiwgb3V0X2JvZHkpOwogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVh
bigiYmFzZTY0RW5jb2RlZCIsIG91dF9iYXNlNjRFbmNvZGVkKTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmdldFJlc3BvbnNlQm9keSIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDYWNoZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25l
dHdvcmtBZ2VudC0+Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yLCAmb3V0X3Jlc3VsdCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5j
YW5DbGVhckJyb3dzZXJDYWNoZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jbGVhckJyb3dzZXJDYWNoZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3Jr
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+
Y2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtB
Z2VudC0+Y2FuQ2xlYXJCcm93c2VyQ29va2llcygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNhbkNs
ZWFyQnJvd3NlckNvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llcyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3Jr
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+
Y2xlYXJCcm93c2VyQ29va2llcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5jbGVhckJyb3dzZXJDb29raWVzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpOZXR3b3JrX3NldENhY2hlRGlzYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdv
cmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9jYWNoZURp
c2FibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYWNoZURpc2FibGVkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fbmV0d29ya0FnZW50LT5zZXRDYWNoZURpc2FibGVkKCZlcnJvciwgaW5fY2Fj
aGVEaXNhYmxlZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGF0YWJhc2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmVuYWJs
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGF0YWJhc2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZGlz
YWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBvdXRfdGFibGVOYW1lcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJkYXRhYmFzZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+Z2V0RGF0YWJh
c2VUYWJsZU5hbWVzKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgb3V0X3RhYmxlTmFtZXMpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJ0YWJsZU5hbWVzIiwgb3V0X3RhYmxlTmFtZXMp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFi
YXNlLmdldERhdGFiYXNlVGFibGVOYW1lcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZXhlY3V0ZVNRTChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IGJvb2wgb3V0X3N1Y2Nlc3MgPSBmYWxzZTsKICAgIGludCBvdXRfdHJhbnNhY3Rpb25JZCA9IDA7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgaW50IGluX2RhdGFiYXNlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAiZGF0YWJhc2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RhdGFiYXNlQWdlbnQtPmV4ZWN1dGVTUUwoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSwgJm91dF9zdWNjZXNzLCAmb3V0X3RyYW5zYWN0aW9uSWQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEJvb2xlYW4oInN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCBvdXRfdHJhbnNhY3Rpb25JZCk7CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0
ZVNRTCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5lbmFibGUoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIklu
ZGV4ZWREQi5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5kaXNhYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJJbmRleGVkREIuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFz
ZU5hbWVzRm9yRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9yZXF1ZXN0SWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAicmVxdWVzdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJh
bWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5yZXF1ZXN0RGF0YWJhc2VOYW1lc0Zv
ckZyYW1lKCZlcnJvciwgaW5fcmVxdWVzdElkLCBpbl9mcmFtZUlkKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5yZXF1ZXN0RGF0
YWJhc2VOYW1lc0ZvckZyYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBpbnQgaW5fcmVxdWVzdElkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgInJlcXVlc3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9mcmFt
ZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZGF0YWJhc2VOYW1lID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgImRhdGFiYXNlTmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luZGV4ZWREQkFnZW50
LT5yZXF1ZXN0RGF0YWJhc2UoJmVycm9yLCBpbl9yZXF1ZXN0SWQsIGluX2ZyYW1lSWQsIGluX2Rh
dGFiYXNlTmFtZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+ZW5hYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJET01TdG9yYWdlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NU3RvcmFnZV9kaXNhYmxlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21T
dG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTVN0b3Jh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFn
ZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vf
Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfZW50
cmllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5f
c3RvcmFnZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0b3JhZ2VJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+Z2V0RE9NU3RvcmFnZUVudHJpZXMoJmVycm9yLCBpbl9z
dG9yYWdlSWQsIG91dF9lbnRyaWVzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
ZW50cmllcyIsIG91dF9lbnRyaWVzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21T
dG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTVN0b3Jh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3N1Y2Nlc3MgPSBm
YWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fc3RvcmFnZUlkID0gZ2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgInN0b3JhZ2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmlu
ZyBpbl9rZXkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAia2V5IiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5zZXRET01TdG9y
YWdlSXRlbSgmZXJyb3IsIGluX3N0b3JhZ2VJZCwgaW5fa2V5LCBpbl92YWx1ZSwgJm91dF9zdWNj
ZXNzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJzdWNjZXNzIiwgb3V0X3N1
Y2Nlc3MpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTVN0b3JhZ2Uuc2V0RE9NU3RvcmFnZUl0ZW0iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2VfcmVtb3Zl
RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc3VjY2VzcyA9IGZhbHNlOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGludCBpbl9zdG9yYWdlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAic3Rv
cmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2tleSA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJrZXkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21TdG9yYWdlQWdl
bnQtPnJlbW92ZURPTVN0b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3RvcmFnZUlkLCBpbl9rZXksICZv
dXRfc3VjY2Vzcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigic3VjY2VzcyIs
IG91dF9zdWNjZXNzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVtIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQXBwbGljYXRpb25DYWNoZSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRf
ZnJhbWVJZHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9hcHBsaWNh
dGlvbkNhY2hlQWdlbnQtPmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoJmVycm9yLCBvdXRfZnJhbWVJ
ZHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJmcmFtZUlkcyIsIG91dF9mcmFt
ZUlkcyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
QXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+ZW5hYmxlKCZlcnJv
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJB
cHBsaWNhdGlvbkNhY2hlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6QXBwbGljYXRpb25DYWNoZV9nZXRNYW5p
ZmVzdEZvckZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2FjaGUgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfbWFuaWZlc3RVUkwgPSAi
IjsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
LT5nZXRNYW5pZmVzdEZvckZyYW1lKCZlcnJvciwgaW5fZnJhbWVJZCwgJm91dF9tYW5pZmVzdFVS
TCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIG91dF9t
YW5pZmVzdFVSTCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiQXBwbGljYXRpb25DYWNoZS5nZXRNYW5pZmVzdEZvckZyYW1lIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBs
aWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfYXBwbGljYXRpb25DYWNoZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2FwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC0+Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKCZlcnJvciwgaW5f
ZnJhbWVJZCwgb3V0X2FwcGxpY2F0aW9uQ2FjaGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNl
dE9iamVjdCgiYXBwbGljYXRpb25DYWNoZSIsIG91dF9hcHBsaWNhdGlvbkNhY2hlKTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJBcHBsaWNhdGlvbkNh
Y2hlLmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkZpbGVTeXN0ZW1fZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9maWxlU3lzdGVtQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkZpbGVTeXN0ZW0gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkZpbGVTeXN0
ZW0uZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1BZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPmRpc2FibGUo
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkZpbGVTeXN0ZW0uZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5k
aWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9nZXREb2N1bWVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gb3V0X3Jvb3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fZG9tQWdlbnQtPmdldERvY3VtZW50KCZlcnJvciwgb3V0X3Jvb3QpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicm9vdCIsIG91dF9yb290KTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0RG9jdW1lbnQi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTV9yZXF1ZXN0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9t
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldElu
dChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cmVx
dWVzdENoaWxkTm9kZXMoJmVycm9yLCBpbl9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpET01fcXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnF1ZXJ5U2VsZWN0
b3IoJmVycm9yLCBpbl9ub2RlSWQsIGluX3NlbGVjdG9yLCAmb3V0X25vZGVJZCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucXVlcnlTZWxlY3Rv
ciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rv
bUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X25vZGVJ
ZHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25v
ZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAic2VsZWN0b3IiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cXVlcnlTZWxlY3RvckFs
bCgmZXJyb3IsIGluX25vZGVJZCwgaW5fc2VsZWN0b3IsIG91dF9ub2RlSWRzKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVzdWx0LT5zZXRBcnJheSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucXVlcnlTZWxlY3Rv
ckFsbCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVOYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFtZSA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldE5vZGVOYW1l
KCZlcnJvciwgaW5fbm9kZUlkLCBpbl9uYW1lLCAmb3V0X25vZGVJZCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uc2V0Tm9kZU5hbWUiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9zZXROb2RlVmFsdWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGlu
X3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fZG9tQWdlbnQtPnNldE5vZGVWYWx1ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fdmFsdWUpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNl
dE5vZGVWYWx1ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92ZU5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQt
PnJlbW92ZU5vZGUoJmVycm9yLCBpbl9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlbW92ZU5vZGUiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9z
ZXRBdHRyaWJ1dGVWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFt
ZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldEF0dHJpYnV0ZVZhbHVlKCZlcnJv
ciwgaW5fbm9kZUlkLCBpbl9uYW1lLCBpbl92YWx1ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uc2V0QXR0cmlidXRlVmFsdWUiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9zZXRBdHRyaWJ1dGVzQXNUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG5hbWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
U3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibmFtZSIsICZu
YW1lX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5zZXRBdHRyaWJ1dGVzQXNUZXh0KCZl
cnJvciwgaW5fbm9kZUlkLCBpbl90ZXh0LCBuYW1lX3ZhbHVlRm91bmQgPyAmaW5fbmFtZSA6IDAp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9N
LnNldEF0dHJpYnV0ZXNBc1RleHQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGlu
dCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAibmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZW1vdmVBdHRyaWJ1dGUo
JmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlbW92ZUF0dHJpYnV0ZSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X2dldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbGlzdGVuZXJzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdl
bnQtPmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb3V0X2xpc3Rl
bmVycyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImxpc3RlbmVycyIsIG91dF9s
aXN0ZW5lcnMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTS5nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRPdXRlckhU
TUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmlu
ZyBvdXRfb3V0ZXJIVE1MID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+
Z2V0T3V0ZXJIVE1MKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X291dGVySFRNTCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvdXRlckhUTUwiLCBvdXRfb3V0ZXJIVE1MKTsKICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0T3V0
ZXJIVE1MIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01fc2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
b21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIFN0cmluZyBpbl9vdXRlckhUTUwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
b3V0ZXJIVE1MIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldE91dGVySFRNTCgmZXJyb3IsIGlu
X25vZGVJZCwgaW5fb3V0ZXJIVE1MKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRPdXRlckhUTUwiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9wZXJmb3Jt
U2VhcmNoKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBT
dHJpbmcgb3V0X3NlYXJjaElkID0gIiI7CiAgICBpbnQgb3V0X3Jlc3VsdENvdW50ID0gMDsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAicXVlcnkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cGVyZm9ybVNlYXJjaCgmZXJyb3Is
IGluX3F1ZXJ5LCAmb3V0X3NlYXJjaElkLCAmb3V0X3Jlc3VsdENvdW50KTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlYXJjaElkIiwgb3V0X3NlYXJjaElkKTsKICAgICAgICBy
ZXN1bHQtPnNldE51bWJlcigicmVzdWx0Q291bnQiLCBvdXRfcmVzdWx0Q291bnQpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5wZXJmb3JtU2Vh
cmNoIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01fZ2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
ZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbm9k
ZUlkcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fc2VhcmNoSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fZnJvbUluZGV4ID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgImZyb21JbmRleCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGlu
dCBpbl90b0luZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInRvSW5kZXgiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kb21BZ2VudC0+Z2V0U2VhcmNoUmVzdWx0cygmZXJyb3IsIGluX3NlYXJjaElkLCBp
bl9mcm9tSW5kZXgsIGluX3RvSW5kZXgsIG91dF9ub2RlSWRzKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVz
dWx0LT5zZXRBcnJheSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0U2VhcmNoUmVzdWx0cyIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VhcmNoSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21B
Z2VudC0+ZGlzY2FyZFNlYXJjaFJlc3VsdHMoJmVycm9yLCBpbl9zZWFyY2hJZCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZGlzY2FyZFNl
YXJjaFJlc3VsdHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZXF1ZXN0Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJvYmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZXF1ZXN0Tm9kZSgmZXJyb3Is
IGluX29iamVjdElkLCAmb3V0X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0TnVt
YmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVxdWVzdE5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRJbnNw
ZWN0TW9kZUVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IGdldEJvb2xlYW4ocGFyYW1zQ29u
dGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaGln
aGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX2hpZ2hsaWdodENvbmZpZyA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJo
aWdobGlnaHRDb25maWciLCAmaGlnaGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Rv
bUFnZW50LT5zZXRJbnNwZWN0TW9kZUVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkLCBoaWdobGln
aHRDb25maWdfdmFsdWVGb3VuZCA/ICZpbl9oaWdobGlnaHRDb25maWcgOiAwKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRJbnNwZWN0
TW9kZUVuYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRSZWN0KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5feCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJ4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
aW50IGluX3kgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAieSIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGludCBpbl93aWR0aCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ3
aWR0aCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9oZWlnaHQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAiaGVpZ2h0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
Ym9vbCBjb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbl9jb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJjb2xvciIsICZjb2xv
cl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG91dGxpbmVDb2xvcl92
YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9vdXRsaW5l
Q29sb3IgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAib3V0bGluZUNvbG9yIiwgJm91
dGxpbmVDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0UmVjdCgm
ZXJyb3IsIGluX3gsIGluX3ksIGluX3dpZHRoLCBpbl9oZWlnaHQsIGNvbG9yX3ZhbHVlRm91bmQg
PyAmaW5fY29sb3IgOiAwLCBvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9vdXRsaW5lQ29s
b3IgOiAwKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTS5oaWdobGlnaHRSZWN0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0Tm9kZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50
IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9oaWdobGlnaHRD
b25maWcgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAiaGlnaGxpZ2h0Q29uZmlnIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodE5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIGlu
X2hpZ2hsaWdodENvbmZpZyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJET00uaGlnaGxpZ2h0Tm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZGVIaWdobGln
aHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmhpZGVIaWdo
bGlnaHQoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRPTS5oaWRlSGlnaGxpZ2h0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0RnJhbWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZy
YW1lSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRlbnRDb2xvcl92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb250ZW50Q29s
b3IgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAiY29udGVudENvbG9yIiwgJmNvbnRl
bnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRlbnRP
dXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaW5fY29udGVudE91dGxpbmVDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
ICJjb250ZW50T3V0bGluZUNvbG9yIiwgJmNvbnRlbnRPdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodEZyYW1lKCZlcnJvciwgaW5fZnJhbWVJZCwgY29u
dGVudENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29udGVudENvbG9yIDogMCwgY29udGVudE91dGxp
bmVDb2xvcl92YWx1ZUZvdW5kID8gJmluX2NvbnRlbnRPdXRsaW5lQ29sb3IgOiAwKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5oaWdobGln
aHRGcmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RE9NX3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAw
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9wYXRoID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInBhdGgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+cHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKCZlcnJvciwgaW5fcGF0aCwgJm91dF9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0X25vZGVJZCk7CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3Jlc29sdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5n
IGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdy
b3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5yZXNvbHZl
Tm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmpl
Y3RHcm91cCA6IDAsIG91dF9vYmplY3QpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVj
dCgib2JqZWN0Iiwgb3V0X29iamVjdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlc29sdmVOb2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fZ2V0QXR0cmli
dXRlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBvdXRfYXR0cmlidXRlcyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5nZXRBdHRyaWJ1dGVzKCZl
cnJvciwgaW5fbm9kZUlkLCBvdXRfYXR0cmlidXRlcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+
c2V0QXJyYXkoImF0dHJpYnV0ZXMiLCBvdXRfYXR0cmlidXRlcyk7CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmdldEF0dHJpYnV0ZXMiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9tb3ZlVG8obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIGludCBvdXRfbm9kZUlkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl90YXJnZXROb2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAidGFyZ2V0Tm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbnNlcnRC
ZWZvcmVOb2RlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX2luc2VydEJlZm9yZU5v
ZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJpbnNlcnRCZWZvcmVOb2RlSWQiLCAm
aW5zZXJ0QmVmb3JlTm9kZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5tb3ZlVG8o
JmVycm9yLCBpbl9ub2RlSWQsIGluX3RhcmdldE5vZGVJZCwgaW5zZXJ0QmVmb3JlTm9kZUlkX3Zh
bHVlRm91bmQgPyAmaW5faW5zZXJ0QmVmb3JlTm9kZUlkIDogMCwgJm91dF9ub2RlSWQpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0X25vZGVJZCk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLm1vdmVUbyIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RE9NX3NldFRvdWNoRW11bGF0aW9uRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVk
ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
ZG9tQWdlbnQtPnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCgmZXJyb3IsIGluX2VuYWJsZWQpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNl
dFRvdWNoRW11bGF0aW9uRW5hYmxlZCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZW5hYmxlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1NfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9j
c3NBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRNYXRjaGVk
U3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbWF0Y2hlZENTU1J1bGVzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcHNldWRv
RWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG91dF9pbmhlcml0ZWQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2Rl
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGZvcmNlZFBzZXVkb0NsYXNzZXNf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbl9mb3JjZWRQ
c2V1ZG9DbGFzc2VzID0gZ2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAiZm9yY2VkUHNldWRv
Q2xhc3NlcyIsICZmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29s
IGluX2luY2x1ZGVQc2V1ZG8gPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImluY2x1
ZGVQc2V1ZG8iLCAmaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9pbmNsdWRlSW5oZXJpdGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNs
dWRlSW5oZXJpdGVkIiwgJmluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3Nz
QWdlbnQtPmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBmb3JjZWRQ
c2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQgPyAmaW5fZm9yY2VkUHNldWRvQ2xhc3NlcyA6IDAsIGlu
Y2x1ZGVQc2V1ZG9fdmFsdWVGb3VuZCA/ICZpbl9pbmNsdWRlUHNldWRvIDogMCwgaW5jbHVkZUlu
aGVyaXRlZF92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVJbmhlcml0ZWQgOiAwLCBvdXRfbWF0Y2hl
ZENTU1J1bGVzLCBvdXRfcHNldWRvRWxlbWVudHMsIG91dF9pbmhlcml0ZWQpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICBpZiAob3V0X21hdGNoZWRDU1NSdWxlcykKICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJh
eSgibWF0Y2hlZENTU1J1bGVzIiwgb3V0X21hdGNoZWRDU1NSdWxlcyk7CiAgICAgICAgaWYgKG91
dF9wc2V1ZG9FbGVtZW50cykKICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgicHNldWRvRWxl
bWVudHMiLCBvdXRfcHNldWRvRWxlbWVudHMpOwogICAgICAgIGlmIChvdXRfaW5oZXJpdGVkKQog
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJpbmhlcml0ZWQiLCBvdXRfaW5oZXJpdGVkKTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZ2V0
TWF0Y2hlZFN0eWxlc0Zvck5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvdXRfaW5saW5lU3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfc3R5bGVBdHRyaWJ1dGVzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQt
PmdldElubGluZVN0eWxlc0Zvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIG91dF9pbmxpbmVTdHls
ZSwgb3V0X3N0eWxlQXR0cmlidXRlcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIGlmIChvdXRfaW5saW5lU3R5
bGUpCiAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIG91dF9pbmxp
bmVTdHlsZSk7CiAgICAgICAgaWYgKG91dF9zdHlsZUF0dHJpYnV0ZXMpCiAgICAgICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoInN0eWxlQXR0cmlidXRlcyIsIG91dF9zdHlsZUF0dHJpYnV0ZXMpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRJ
bmxpbmVTdHlsZXNGb3JOb2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X2NvbXB1dGVkU3R5bGUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGZvcmNlZFBz
ZXVkb0NsYXNzZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzID0gZ2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAi
Zm9yY2VkUHNldWRvQ2xhc3NlcyIsICZmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2Nzc0FnZW50LT5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJ
ZCwgZm9yY2VkUHNldWRvQ2xhc3Nlc192YWx1ZUZvdW5kID8gJmluX2ZvcmNlZFBzZXVkb0NsYXNz
ZXMgOiAwLCBvdXRfY29tcHV0ZWRTdHlsZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoImNvbXB1dGVkU3R5bGUiLCBvdXRfY29tcHV0ZWRTdHlsZSk7CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmdldENvbXB1dGVkU3R5bGVGb3JO
b2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpDU1NfZ2V0QWxsU3R5bGVTaGVldHMobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2hlYWRlcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0QWxsU3R5bGVTaGVldHMoJmVy
cm9yLCBvdXRfaGVhZGVycyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImhlYWRl
cnMiLCBvdXRfaGVhZGVycyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ1NTLmdldEFsbFN0eWxlU2hlZXRzIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3R5bGVT
aGVldChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlU2hlZXQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zdHlsZVNoZWV0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVTaGVldElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdl
bnQtPmdldFN0eWxlU2hlZXQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsIG91dF9zdHlsZVNoZWV0
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlU2hlZXQiLCBvdXRfc3R5
bGVTaGVldCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiQ1NTLmdldFN0eWxlU2hlZXQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRTdHlsZVNoZWV0VGV4dChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF90
ZXh0ID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3N0eWxlU2hlZXRJZCA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzdHlsZVNoZWV0SWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NB
Z2VudC0+Z2V0U3R5bGVTaGVldFRleHQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsICZvdXRfdGV4
dCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgb3V0X3RleHQpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRT
dHlsZVNoZWV0VGV4dCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFN0eWxlU2hlZXRUZXh0KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
Q1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlU2hl
ZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90ZXh0ID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c2V0
U3R5bGVTaGVldFRleHQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsIGluX3RleHQpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLnNldFN0eWxl
U2hlZXRUZXh0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0UHJvcGVydHlUZXh0KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
dXRfc3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFp
bmVyUHRyLCAic3R5bGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9wcm9w
ZXJ0eUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInByb3BlcnR5SW5kZXgiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdGV4dCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJ0ZXh0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBp
bl9vdmVyd3JpdGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgIm92ZXJ3cml0ZSIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2Nzc0FnZW50LT5zZXRQcm9wZXJ0eVRleHQoJmVycm9yLCBpbl9zdHlsZUlk
LCBpbl9wcm9wZXJ0eUluZGV4LCBpbl90ZXh0LCBpbl9vdmVyd3JpdGUsIG91dF9zdHlsZSk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIG91dF9zdHlsZSk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLnNldFByb3Bl
cnR5VGV4dCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Q1NTX3RvZ2dsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRf
c3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVy
UHRyLCAic3R5bGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9wcm9wZXJ0
eUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInByb3BlcnR5SW5kZXgiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluX2Rpc2FibGUgPSBnZXRCb29sZWFuKHBhcmFt
c0NvbnRhaW5lclB0ciwgImRpc2FibGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+dG9nZ2xlUHJv
cGVydHkoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9wZXJ0eUluZGV4LCBpbl9kaXNhYmxlLCBv
dXRfc3R5bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBvdXRf
c3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkNTUy50b2dnbGVQcm9wZXJ0eSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFJ1bGVTZWxlY3Rvcihsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gb3V0X3J1bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3J1bGVJZCA9IGdldE9iamVjdChwYXJh
bXNDb250YWluZXJQdHIsICJydWxlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VsZWN0b3Ii
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c2V0UnVsZVNlbGVjdG9yKCZlcnJvciwgaW5fcnVsZUlk
LCBpbl9zZWxlY3Rvciwgb3V0X3J1bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVj
dCgicnVsZSIsIG91dF9ydWxlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJDU1Muc2V0UnVsZVNlbGVjdG9yIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfYWRkUnVsZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb3V0X3J1bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKICAgIGludCBpbl9jb250ZXh0Tm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgImNvbnRleHROb2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcg
aW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VsZWN0b3IiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9jc3NBZ2VudC0+YWRkUnVsZSgmZXJyb3IsIGluX2NvbnRleHROb2RlSWQsIGlu
X3NlbGVjdG9yLCBvdXRfcnVsZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJy
dWxlIiwgb3V0X3J1bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkNTUy5hZGRSdWxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVy
dGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBv
dXRfY3NzUHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2Nzc0FnZW50LT5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCZlcnJvciwgb3V0X2Nzc1Byb3Bl
cnRpZXMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwg
b3V0X2Nzc1Byb3BlcnRpZXMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nf
c3RhcnRTZWxlY3RvclByb2ZpbGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2Nzc0FnZW50LT5zdGFydFNlbGVjdG9yUHJvZmlsZXIoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5zdGFydFNlbGVjdG9yUHJv
ZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkNTU19zdG9wU2VsZWN0b3JQcm9maWxlcihsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Byb2ZpbGUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPnN0b3BTZWxlY3RvclBy
b2ZpbGVyKCZlcnJvciwgb3V0X3Byb2ZpbGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgicHJvZmlsZSIsIG91dF9wcm9maWxlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1Muc3RvcFNlbGVjdG9yUHJvZmlsZXIiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlRpbWVsaW5lX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90aW1lbGluZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGluZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBtYXhDYWxsU3RhY2tEZXB0aF92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fbWF4Q2FsbFN0YWNrRGVwdGggPSBnZXRJbnQocGFy
YW1zQ29udGFpbmVyUHRyLCAibWF4Q2FsbFN0YWNrRGVwdGgiLCAmbWF4Q2FsbFN0YWNrRGVwdGhf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RhcnQoJmVycm9yLCBtYXhDYWxs
U3RhY2tEZXB0aF92YWx1ZUZvdW5kID8gJmluX21heENhbGxTdGFja0RlcHRoIDogMCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJUaW1lbGluZS5z
dGFydCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6VGltZWxpbmVfc3RvcChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fdGltZWxpbmVBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiVGltZWxpbmUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RvcCgmZXJyb3IpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiVGltZWxpbmUuc3RvcCIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6VGltZWxpbmVfc2V0SW5jbHVkZU1lbW9yeURldGFpbHMobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlRpbWVsaW5lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBi
b29sIGluX2VuYWJsZWQgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImVuYWJsZWQi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV90aW1lbGluZUFnZW50LT5zZXRJbmNsdWRlTWVtb3J5RGV0YWlscygmZXJy
b3IsIGluX2VuYWJsZWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiVGltZWxpbmUuc2V0SW5jbHVkZU1lbW9yeURldGFpbHMiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRp
b24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRl
YnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQg
PSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhdXNlc1JlY29tcGlsYXRpb24o
JmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigi
cmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuY2F1c2VzUmVjb21waWxhdGlvbiIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVi
dWdnZXJfc3VwcG9ydHNOYXRpdmVCcmVha3BvaW50cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+c3VwcG9ydHNOYXRpdmVCcmVha3BvaW50cygmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dl
ci5zdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9lbmFibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rl
YnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2Vy
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQt
PmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGVidWdnZXIuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9kaXNhYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
ZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5kaXNhYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVh
a3BvaW50c0FjdGl2ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fYWN0aXZlID0gZ2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsICJhY3RpdmUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZSgmZXJyb3IsIGluX2FjdGl2ZSk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50
c0FjdGl2ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJsKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91
dF9icmVha3BvaW50SWQgPSAiIjsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2xvY2F0
aW9ucyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5f
bGluZU51bWJlciA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJsaW5lTnVtYmVyIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCB1cmxfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
U3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAmdXJs
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdXJsUmVnZXhfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VybFJlZ2V4ID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInVybFJlZ2V4IiwgJnVybFJlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgY29sdW1uTnVtYmVyX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGlu
dCBpbl9jb2x1bW5OdW1iZXIgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiY29sdW1uTnVt
YmVyIiwgJmNvbHVtbk51bWJlcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBi
b29sIGNvbmRpdGlvbl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fY29uZGl0aW9u
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbmRpdGlvbiIsICZjb25kaXRpb25f
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludEJ5VXJsKCZl
cnJvciwgaW5fbGluZU51bWJlciwgdXJsX3ZhbHVlRm91bmQgPyAmaW5fdXJsIDogMCwgdXJsUmVn
ZXhfdmFsdWVGb3VuZCA/ICZpbl91cmxSZWdleCA6IDAsIGNvbHVtbk51bWJlcl92YWx1ZUZvdW5k
ID8gJmluX2NvbHVtbk51bWJlciA6IDAsIGNvbmRpdGlvbl92YWx1ZUZvdW5kID8gJmluX2NvbmRp
dGlvbiA6IDAsICZvdXRfYnJlYWtwb2ludElkLCBvdXRfbG9jYXRpb25zKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIG91dF9icmVha3BvaW50SWQpOwog
ICAgICAgIGlmIChvdXRfbG9jYXRpb25zKQogICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJs
b2NhdGlvbnMiLCBvdXRfbG9jYXRpb25zKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50QnlVcmwiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2JyZWFrcG9pbnRJZCA9ICIiOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X2FjdHVhbExvY2F0aW9uID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbl9sb2NhdGlvbiA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJsb2NhdGlvbiIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29uZGl0aW9uX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIFN0cmluZyBpbl9jb25kaXRpb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAiY29uZGl0aW9uIiwgJmNvbmRpdGlvbl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5zZXRCcmVha3BvaW50KCZlcnJvciwgaW5fbG9jYXRpb24sIGNvbmRpdGlvbl92YWx1
ZUZvdW5kID8gJmluX2NvbmRpdGlvbiA6IDAsICZvdXRfYnJlYWtwb2ludElkLCBvdXRfYWN0dWFs
TG9jYXRpb24pOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygiYnJlYWtwb2ludElk
Iiwgb3V0X2JyZWFrcG9pbnRJZCk7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoImFjdHVhbExv
Y2F0aW9uIiwgb3V0X2FjdHVhbExvY2F0aW9uKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50IiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
ZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2JyZWFrcG9p
bnRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJicmVha3BvaW50SWQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5yZW1vdmVCcmVha3BvaW50KCZlcnJvciwgaW5fYnJlYWtw
b2ludElkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX2NvbnRpbnVl
VG9Mb2NhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2xvY2F0
aW9uID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgImxvY2F0aW9uIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+Y29udGludWVUb0xvY2F0aW9uKCZlcnJvciwgaW5fbG9jYXRpb24p
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVi
dWdnZXIuY29udGludWVUb0xvY2F0aW9uIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zdGVwT3Zlcihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVi
dWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
c3RlcE92ZXIoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnN0ZXBPdmVyIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zdGVwSW50
byhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVi
dWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJB
Z2VudC0+c3RlcEludG8oJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnN0ZXBJbnRvIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9z
dGVwT3V0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zdGVwT3V0KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zdGVwT3V0IiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dl
cl9wYXVzZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+cGF1c2UoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnBhdXNlIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9y
ZXN1bWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnJlc3VtZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIucmVzdW1lIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9z
ZWFyY2hJbkNvbnRlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9yZXN1bHQgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdElk
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNjcmlwdElkIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3F1ZXJ5ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgInF1ZXJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBjYXNlU2Vuc2l0
aXZlX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fY2FzZVNlbnNpdGl2ZSA9IGdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiY2FzZVNlbnNpdGl2ZSIsICZjYXNlU2Vuc2l0aXZl
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaXNSZWdleF92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBib29sIGluX2lzUmVnZXggPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgImlzUmVnZXgiLCAmaXNSZWdleF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5zZWFyY2hJbkNvbnRlbnQoJmVycm9yLCBpbl9zY3JpcHRJZCwgaW5fcXVlcnksIGNh
c2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA/ICZpbl9jYXNlU2Vuc2l0aXZlIDogMCwgaXNSZWdleF92
YWx1ZUZvdW5kID8gJmluX2lzUmVnZXggOiAwLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpEZWJ1Z2dlcl9jYW5TZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2RlYnVnZ2VyQWdlbnQtPmNhblNldFNjcmlwdFNvdXJjZSgmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dl
ci5jYW5TZXRTY3JpcHRTb3VyY2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFNjcmlwdFNvdXJjZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2NhbGxGcmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2NyaXB0SWQg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0SWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2NyaXB0U291cmNlID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInNjcmlwdFNvdXJjZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgcHJldmlld192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3ByZXZpZXcgPSBnZXRC
b29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInByZXZpZXciLCAmcHJldmlld192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRTY3JpcHRTb3VyY2UoJmVycm9yLCBpbl9zY3Jp
cHRJZCwgaW5fc2NyaXB0U291cmNlLCBwcmV2aWV3X3ZhbHVlRm91bmQgPyAmaW5fcHJldmlldyA6
IDAsIG91dF9jYWxsRnJhbWVzLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgaWYgKG91dF9j
YWxsRnJhbWVzKQogICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjYWxsRnJhbWVzIiwgb3V0
X2NhbGxGcmFtZXMpOwogICAgICAgIGlmIChvdXRfcmVzdWx0KQogICAgICAgICAgICByZXN1bHQt
PnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuc2V0U2NyaXB0U291cmNlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9nZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVn
Z2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X3NjcmlwdFNvdXJjZSA9
ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJzY3JpcHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmdl
dFNjcmlwdFNvdXJjZSgmZXJyb3IsIGluX3NjcmlwdElkLCAmb3V0X3NjcmlwdFNvdXJjZSk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBvdXRfc2NyaXB0
U291cmNlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJEZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX2dldEZ1bmN0aW9u
RGV0YWlscyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9kZXRhaWxzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnVuY3Rpb25JZCA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmdW5jdGlvbklkIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
ZGVidWdnZXJBZ2VudC0+Z2V0RnVuY3Rpb25EZXRhaWxzKCZlcnJvciwgaW5fZnVuY3Rpb25JZCwg
b3V0X2RldGFpbHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAm
JiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgiZGV0YWlscyIs
IG91dF9kZXRhaWxzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJEZWJ1Z2dlci5nZXRGdW5jdGlvbkRldGFpbHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3Nl
dFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3N0YXRlID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0YXRlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+c2V0UGF1c2VPbkV4Y2VwdGlvbnMoJmVycm9yLCBpbl9zdGF0ZSk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRQYXVzZU9u
RXhjZXB0aW9ucyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgYm9vbCBvdXRfd2FzVGhyb3duID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX2NhbGxGcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNhbGxGcmFt
ZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3Ry
aW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVj
dEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wg
aW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIs
ICJpbmNsdWRlQ29tbWFuZExpbmVBUEkiLCAmaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5k
ID0gZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5ldmFsdWF0ZU9uQ2FsbEZyYW1lKCZlcnJvciwgaW5fY2Fs
bEZyYW1lSWQsIGluX2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAmaW5fb2Jq
ZWN0R3JvdXAgOiAwLCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/ICZpbl9pbmNs
dWRlQ29tbWFuZExpbmVBUEkgOiAwLCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPyAmaW5fcmV0
dXJuQnlWYWx1ZSA6IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIGlmIChv
dXRfd2FzVGhyb3duKQogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Rocm93biIs
IG91dF93YXNUaHJvd24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRlYnVnZ2VyLmV2YWx1YXRlT25DYWxsRnJhbWUiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBp
bnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5zZXRET01C
cmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnNldERPTUJyZWFr
cG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5v
ZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFn
ZW50LT5yZW1vdmVET01CcmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVn
Z2VyLnJlbW92ZURPTUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V2ZW50TmFtZSA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJldmVudE5hbWUiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9k
b21EZWJ1Z2dlckFnZW50LT5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCgmZXJyb3IsIGluX2V2
ZW50TmFtZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJET01EZWJ1Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
RGVidWdnZXJfcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV2
ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50KCZlcnJvciwgaW5fZXZlbnROYW1lKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnJlbW92ZUV2ZW50TGlz
dGVuZXJCcmVha3BvaW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRJbnN0cnVtZW50YXRpb25C
cmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V2ZW50TmFtZSA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJldmVudE5hbWUiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1
Z2dlckFnZW50LT5zZXRJbnN0cnVtZW50YXRpb25CcmVha3BvaW50KCZlcnJvciwgaW5fZXZlbnRO
YW1lKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTURlYnVnZ2VyLnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURl
YnVnZ2VyX3JlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV2
ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUluc3RydW1lbnRh
dGlvbkJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NRGVidWdnZXIucmVtb3ZlSW5zdHJ1
bWVudGF0aW9uQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfc2V0WEhSQnJlYWtwb2lu
dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tRGVidWdnZXJBZ2VudC0+c2V0WEhSQnJl
YWtwb2ludCgmZXJyb3IsIGluX3VybCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJET01EZWJ1Z2dlci5zZXRYSFJCcmVha3BvaW50IiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
b21EZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01E
ZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3Ry
aW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9kb21EZWJ1Z2dlckFnZW50LT5yZW1vdmVYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJs
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRP
TURlYnVnZ2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBy
b2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCop
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdl
bnQtPmNhdXNlc1JlY29tcGlsYXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuY2F1c2VzUmVj
b21waWxhdGlvbiIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfaXNTYW1wbGluZyhsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fcHJvZmlsZXJBZ2VudC0+aXNTYW1wbGluZygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5pc1Nh
bXBsaW5nIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX3Byb2ZpbGVyQWdlbnQtPmhhc0hlYXBQcm9maWxlcigmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxl
ci5oYXNIZWFwUHJvZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlKCZl
cnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJQcm9maWxlci5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2Rpc2FibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUo
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIlByb2ZpbGVyLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3N0YXJ0KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5zdGFydCgm
ZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiUHJvZmlsZXIuc3RhcnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3N0b3AobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0b3AoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBy
b2ZpbGVyLnN0b3AiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxl
ckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRf
aGVhZGVycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVy
QWdlbnQtPmdldFByb2ZpbGVIZWFkZXJzKCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICByZXN1bHQtPnNldEFycmF5KCJoZWFkZXJzIiwgb3V0X2hlYWRlcnMpOwogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmdldFByb2Zp
bGVIZWFkZXJzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQ
cm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gb3V0X3Byb2ZpbGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
InR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldFBy
b2ZpbGUoJmVycm9yLCBpbl90eXBlLCBpbl91aWQsIG91dF9wcm9maWxlKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRPYmplY3QoInByb2ZpbGUiLCBvdXRfcHJvZmlsZSk7CiAgICB9CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuZ2V0UHJvZmls
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UHJvZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmls
ZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
InVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnJlbW92ZVByb2ZpbGUoJmVycm9yLCBp
bl90eXBlLCBpbl91aWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUHJvZmlsZXIucmVtb3ZlUHJvZmlsZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfY2xl
YXJQcm9maWxlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
cHJvZmlsZXJBZ2VudC0+Y2xlYXJQcm9maWxlcygmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuY2xlYXJQcm9maWxlcyIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6UHJvZmlsZXJfdGFrZUhlYXBTbmFwc2hvdChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+dGFrZUhlYXBTbmFwc2hvdCgm
ZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiUHJvZmlsZXIudGFrZUhlYXBTbmFwc2hvdCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfY29sbGVjdEdh
cmJhZ2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2Zp
bGVyQWdlbnQtPmNvbGxlY3RHYXJiYWdlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5jb2xsZWN0R2FyYmFnZSIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UHJvZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBy
b2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBpbnQgaW5fb2JqZWN0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAib2Jq
ZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5nZXRPYmplY3RCeUhlYXBPYmplY3RJ
ZCgmZXJyb3IsIGluX29iamVjdElkLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmdldE9iamVjdEJ5SGVhcE9iamVj
dElkIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3dvcmtlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJXb3JrZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGJvb2wgaW5fdmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVl
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkKCZl
cnJvciwgaW5fdmFsdWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiV29ya2VyLnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpX
b3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fbWVzc2FnZSA9IGdldE9iamVjdChwYXJh
bXNDb250YWluZXJQdHIsICJtZXNzYWdlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPnNlbmRN
ZXNzYWdlVG9Xb3JrZXIoJmVycm9yLCBpbl93b3JrZXJJZCwgaW5fbWVzc2FnZSk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJXb3JrZXIuc2VuZE1l
c3NhZ2VUb1dvcmtlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Nvbm5lY3RUb1dvcmtlcihsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
aW50IGluX3dvcmtlcklkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndvcmtlcklkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fd29ya2VyQWdlbnQtPmNvbm5lY3RUb1dvcmtlcigmZXJyb3IsIGluX3dvcmtl
cklkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
Ildvcmtlci5jb25uZWN0VG9Xb3JrZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9kaXNjb25uZWN0RnJvbVdv
cmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgIndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQtPmRpc2Nvbm5lY3RGcm9tV29y
a2VyKCZlcnJvciwgaW5fd29ya2VySWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLmRpc2Nvbm5lY3RGcm9tV29ya2VyIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpXb3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3dv
cmtlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJXb3JrZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUg
PSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29y
a2VyQWdlbnQtPnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzKCZlcnJvciwgaW5fdmFsdWUpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLnNl
dEF1dG9jb25uZWN0VG9Xb3JrZXJzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCiNlbmRp
ZiAvLyBFTkFCTEUoV09SS0VSUykKCgpQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQp7CiAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbChpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpKTsKfQoKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCA9IHRoaXM7CiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiBtZXNzYWdlT2JqZWN0KTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCApOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChkaXNwYXRjaE1hcC5pc0Vt
cHR5KCkpIHsKICAgICAgICBzdGF0aWMgQ2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5zcGVjdG9yX2VuYWJsZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5zcGVjdG9yX2Rp
c2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok1lbW9y
eV9nZXRET01Ob2RlQ291bnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2VfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQYWdlX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlBhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9yZW1vdmVTY3JpcHRUb0V2YWx1YXRl
T25Mb2FkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdl
X3JlbG9hZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFn
ZV9uYXZpZ2F0ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UGFnZV9nZXRDb29raWVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpQYWdlX2RlbGV0ZUNvb2tpZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZVRyZWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZ2V0UmVzb3VyY2VDb250ZW50LAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NlYXJjaEluUmVzb3VyY2Us
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2VhcmNo
SW5SZXNvdXJjZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlBhZ2Vfc2V0RG9jdW1lbnRDb250ZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQYWdlX3NldFNjcmVlblNpemVPdmVycmlkZSwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9ldmFsdWF0ZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9jYWxsRnVuY3Rpb25P
biwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9n
ZXRQcm9wZXJ0aWVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpSdW50aW1lX3JlbGVhc2VPYmplY3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwLAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX3J1biwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9lbmFibGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfZGlzYWJsZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9jbGVhck1lc3Nh
Z2VzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xl
X3NldE1vbml0b3JpbmdYSFJFbmFibGVkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpDb25zb2xlX2FkZEluc3BlY3RlZE5vZGUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZW5hYmxlLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2Rpc2FibGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0VXNlckFnZW50
T3ZlcnJpZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5l
dHdvcmtfc2V0RXh0cmFIVFRQSGVhZGVycywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6TmV0d29ya19nZXRSZXNwb25zZUJvZHksCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ2FjaGUs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2xl
YXJCcm93c2VyQ2FjaGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcywKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jbGVhckJyb3dzZXJDb29raWVzLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX3NldENhY2hl
RGlzYWJsZWQsCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZW5hYmxlLAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9kaXNhYmxlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9nZXREYXRhYmFzZVRh
YmxlTmFtZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRh
dGFiYXNlX2V4ZWN1dGVTUUwsCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6SW5kZXhlZERCX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VOYW1lc0Zv
ckZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRl
eGVkREJfcmVxdWVzdERhdGFiYXNlLAojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdl
X2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
U3RvcmFnZV9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX3Jl
bW92ZURPTVN0b3JhZ2VJdGVtLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVzdHMsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZW5h
YmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZv
ckZyYW1lLAojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9lbmFibGUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkZpbGVTeXN0ZW1fZGlzYWJsZSwKI2VuZGlmIC8v
IEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTV9nZXREb2N1bWVudCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RE9NX3JlcXVlc3RDaGlsZE5vZGVzLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcXVlcnlTZWxlY3RvciwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JBbGwsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXROb2RlTmFt
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldE5v
ZGVWYWx1ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X3JlbW92ZU5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV9zZXRBdHRyaWJ1dGVWYWx1ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3NldEF0dHJpYnV0ZXNBc1RleHQsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9n
ZXRPdXRlckhUTUwsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV9zZXRPdXRlckhUTUwsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9wZXJmb3JtU2VhcmNoLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01fZ2V0U2VhcmNoUmVzdWx0cywKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVxdWVzdE5vZGUsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRJbnNwZWN0
TW9kZUVuYWJsZWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV9oaWdobGlnaHRSZWN0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpET01faGlnaGxpZ2h0Tm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RE9NX2hpZGVIaWdobGlnaHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRGcmFtZSwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3Jlc29s
dmVOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01f
Z2V0QXR0cmlidXRlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX21vdmVUbywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX3NldFRvdWNoRW11bGF0aW9uRW5hYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldElubGluZVN0eWxl
c0Zvck5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNT
U19nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Q1NTX2dldEFsbFN0eWxlU2hlZXRzLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3R5bGVTaGVldCwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldFN0eWxlU2hlZXRUZXh0LAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0U3R5bGVT
aGVldFRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNT
U19zZXRQcm9wZXJ0eVRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkNTU190b2dnbGVQcm9wZXJ0eSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Q1NTX3NldFJ1bGVTZWxlY3RvciwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2FkZFJ1bGUsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc3RhcnRTZWxl
Y3RvclByb2ZpbGVyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0YXJ0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zdG9wLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zZXRJbmNsdWRlTWVtb3J5RGV0YWlscywK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfY2F1c2VzUmVjb21waWxhdGlvbiwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3VwcG9ydHNO
YXRpdmVCcmVha3BvaW50cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RGVidWdnZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpEZWJ1Z2dlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJlYWtwb2lu
dEJ5VXJsLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1
Z2dlcl9zZXRCcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24sCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBPdmVy
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9z
dGVwSW50bywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVi
dWdnZXJfc3RlcE91dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RGVidWdnZXJfcGF1c2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRlYnVnZ2VyX3Jlc3VtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfc2VhcmNoSW5Db250ZW50LAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jYW5TZXRTY3JpcHRTb3VyY2UsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFNj
cmlwdFNvdXJjZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
RGVidWdnZXJfZ2V0U2NyaXB0U291cmNlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9nZXRGdW5jdGlvbkRldGFpbHMsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFBhdXNlT25FeGNlcHRp
b25zLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dl
cl9ldmFsdWF0ZU9uQ2FsbEZyYW1lLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRET01CcmVha3BvaW50LAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9y
ZW1vdmVET01CcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfcmVtb3ZlRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92
ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZVhIUkJy
ZWFrcG9pbnQsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlByb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2lzU2FtcGxpbmcsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2hhc0hlYXBQ
cm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJv
ZmlsZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpQcm9maWxlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQcm9maWxlcl9zdGFydCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UHJvZmlsZXJfc3RvcCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGUsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3JlbW92ZVBy
b2ZpbGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2Zp
bGVyX2NsZWFyUHJvZmlsZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlByb2ZpbGVyX3Rha2VIZWFwU25hcHNob3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRPYmplY3RCeUhl
YXBPYmplY3RJZCwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVO
QUJMRShXT1JLRVJTKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6V29ya2VyX3NldFdvcmtlckluc3BlY3Rpb25FbmFibGVkLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlciwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Nvbm5lY3RU
b1dvcmtlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29y
a2VyX2Rpc2Nvbm5lY3RGcm9tV29ya2VyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpXb3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMsCiNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKCiAgICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9m
KGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
Y29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tpXSk7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdl
KTsKICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
MCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0
ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKICAgIGlmICghbWVzc2FnZU9iamVjdCkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11
c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlk
Iik7CiAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigw
LCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlw
ZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0
LT5nZXQoIm1ldGhvZCIpOwogICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3
YXNuJ3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG1ldGhvZDsK
ICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRo
b2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAu
ZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9k
ICsgIicgd2Fzbid0IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMp
LippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5n
IGludm9jYXRpb25FcnJvcikKewogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JN
ZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlu
dm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0
IiwgcmVzdWx0KTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0
UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBj
b2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKewogICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAp7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7CiAgICBpZiAoIXNfY29t
bW9uRXJyb3JzLnNpemUoKSkgewogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVy
cm9yLCAtMzI3MDApOwogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVz
dCwgLTMyNjAwKTsKICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQs
IC0zMjYwMSk7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0z
MjYwMik7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYw
Myk7CiAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOwog
ICAgfQogICAgQVNTRVJUKGNvZGUgPj0wKTsKICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNf
Y29tbW9uRXJyb3JzLnNpemUoKSk7CiAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsK
ICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAgQVNTRVJU
KGVycm9yKTsKICAgIGlmIChkYXRhKQogICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRh
dGEpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IpOwogICAg
aWYgKGNhbGxJZCkKICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7CiAg
ICBlbHNlCiAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6Om51
bGwoKSk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCmludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldElu
dChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBm
YWxzZTsKCiAgICBpbnQgdmFsdWUgPSAwOwoKICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNz
aW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVk
IHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsK
CiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQp
CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKCF2YWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBtdXN0IGJlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgZWxz
ZQogICAgICAgIGlmICh2YWx1ZUZvdW5kKQogICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7
CiAgICByZXR1cm4gdmFsdWU7Cn0KClN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAg
IEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZh
bHVlRm91bmQgPSBmYWxzZTsKCiAgICBTdHJpbmcgdmFsdWUgPSAiIjsKCiAgICBpZiAoIW9iamVj
dCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkgewogICAgICAgICAgICAvLyBSZXF1aXJlZCBw
YXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgogICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3Qg
Y29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0K
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAg
aWYgKCF2YWx1ZUZvdW5kKQogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3Qg
Zm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAg
fQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIg
JyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnU3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKICAgIGVsc2UKICAgICAgICBpZiAodmFsdWVGb3VuZCkKICAgICAgICAgICAgKnZh
bHVlRm91bmQgPSB0cnVlOwogICAgcmV0dXJuIHZhbHVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91
bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBib29sIHZhbHVlID0gZmFsc2U7
CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAgICAg
ICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KICAg
ICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJh
bXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBl
ICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0
dXJuIHZhbHVlOwogICAgfQoKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFs
dWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9
PSBlbmQpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUg
J0Jvb2xlYW4nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jv
b2xlYW4oJnZhbHVlKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xl
YW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZv
dW5kKQogICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0K
ClBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAg
IEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZh
bHVlRm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAgICBpZiAo
IXZhbHVlRm91bmQpIHsKICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Np
bmcgcGFyYW1zIGNvbnRhaW5lci4KICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQg
cGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwoK
ICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkK
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBh
cmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAoIXZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5
cGUuIEl0IG11c3QgYmUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICBlbHNl
CiAgICAgICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsK
ICAgIHJldHVybiB2YWx1ZTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVl
Rm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghb2JqZWN0
KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBh
cmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBj
b250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9Cgog
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwog
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0
LT5maW5kKG5hbWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAgICAgIGlm
ICghdmFsdWVGb3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91
bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoK
ICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7CiAgICBlbHNlCiAgICAgICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2YWx1ZUZv
dW5kID0gdHJ1ZTsKICAgIHJldHVybiB2YWx1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJl
c3VsdCkKewogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICBpZiAoIXZhbHVlKQogICAgICAgIHJldHVybiBmYWxz
ZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKICAgIGlmICghb2JqZWN0KQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIW9iamVj
dC0+Z2V0U3RyaW5nKCJtZXRob2QiLCByZXN1bHQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAg
ICByZXR1cm4gdHJ1ZTsKfQoKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>