<?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>79153</bug_id>
          
          <creation_ts>2012-02-21 15:23:15 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: remove neural-net-style constructions</short_desc>
          <delta_ts>2012-02-22 07:05:13 -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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">prybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>561275</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 15:23:15 -0800</bug_when>
    <thetext>Generator still has some resemblance to a neural network, meaning that it has some irregular structures that were &quot;trained&quot; to generate the right output for a certain input.

Replace such structures with more regular ones and make sure its uniform for all types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561301</commentid>
    <comment_count>1</comment_count>
      <attachid>128063</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 15:48:37 -0800</bug_when>
    <thetext>Created attachment 128063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561340</commentid>
    <comment_count>2</comment_count>
      <attachid>128072</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:16:24 -0800</bug_when>
    <thetext>Created attachment 128072
old InspectorBackendDispatcher.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561341</commentid>
    <comment_count>3</comment_count>
      <attachid>128073</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:16:58 -0800</bug_when>
    <thetext>Created attachment 128073
old InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561343</commentid>
    <comment_count>4</comment_count>
      <attachid>128074</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:17:18 -0800</bug_when>
    <thetext>Created attachment 128074
old InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561347</commentid>
    <comment_count>5</comment_count>
      <attachid>128075</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:18:25 -0800</bug_when>
    <thetext>Created attachment 128075
new InspectorBackendDispatcher.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561349</commentid>
    <comment_count>6</comment_count>
      <attachid>128076</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:18:45 -0800</bug_when>
    <thetext>Created attachment 128076
new InspctorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561352</commentid>
    <comment_count>7</comment_count>
      <attachid>128077</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-21 16:19:15 -0800</bug_when>
    <thetext>Created attachment 128077
new InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561824</commentid>
    <comment_count>8</comment_count>
      <attachid>128063</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-02-22 03:56:42 -0800</bug_when>
    <thetext>Comment on attachment 128063
Patch

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

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.cpp:533
&gt; +    String* sourceMapURLParam = sourceMapURL.isNull() ? 0 : &amp; sourceMapURL;

style nit: remove extra space between &amp; and sourceMapURL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561919</commentid>
    <comment_count>9</comment_count>
      <attachid>128197</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-02-22 06:15:33 -0800</bug_when>
    <thetext>Created attachment 128197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561951</commentid>
    <comment_count>10</comment_count>
      <attachid>128197</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-02-22 07:05:03 -0800</bug_when>
    <thetext>Comment on attachment 128197
Patch

Clearing flags on attachment: 128197

Committed r108496: &lt;http://trac.webkit.org/changeset/108496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561952</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-02-22 07:05:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128063</attachid>
            <date>2012-02-21 15:48:37 -0800</date>
            <delta_ts>2012-02-22 06:15:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79153-20120222034835.patch</filename>
            <type>text/plain</type>
            <size>39083</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY4ZmZkZWM3NDkyMjlh
N2NkY2M5MzM2MThhNTc4M2U4ZGFkYTRmMy4uMDNlNDAxYzY1Yjg0NGVmYTUxNTUxNGIzNWFkMThl
YzI3NzVjNmVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMi0wMi0yMSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogcmVtb3ZlIG5ldXJhbC1uZXQtc3R5bGUgY29u
c3RydWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzkxNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDUGFyYW1UeXBlIGNsYXNzIHJlbW92ZWQgY29tcGxldGVseSwgc29tZSAoInZpcnR1YWwiKSBt
ZXRob2RzIGFyZQorICAgICAgICByZW1vdmVkLiBUeXBlTW9kZWwgbm90aW9uIGlzIGFkZGVkIGlu
c3RlYWQgd2l0aCBzb21lIG1pbm9yIGhlbHBlcgorICAgICAgICBjbGFzc2VzIGFuZCBtZXRob2Rz
LgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAg
ICAgIChEb21haW5OYW1lRml4ZXMpOgorICAgICAgICAoUmF3VHlwZXMuQmFzZVR5cGUpOgorICAg
ICAgICAoUmF3VHlwZXMuU3RyaW5nKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3
X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVz
LkludC5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuTnVtYmVyKToKKyAg
ICAgICAgKFJhd1R5cGVzLk51bWJlci5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3
VHlwZXMuQm9vbCk6CisgICAgICAgIChSYXdUeXBlcy5Cb29sLmdldF9yYXdfdHlwZV9tb2RlbCk6
CisgICAgICAgIChSYXdUeXBlcy5PYmplY3QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0Lmdl
dF9yYXdfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3
VHlwZXMuQW55LmdldF9yYXdfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJheSk6
CisgICAgICAgIChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAo
cmVwbGFjZV9yaWdodF9zaGlmdCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsKToK
KyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlSZWZlcmVuY2UpOgorICAgICAgICAo
Q29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVJlZmVyZW5jZS5fX2luaXRfXyk6CisgICAgICAgIChD
b21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UmVmZXJlbmNlLmdldF9yZXR1cm5fdmFyX3R5cGUpOgor
ICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2RlbC5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZp
eCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLmdldF9vdXRwdXRfdG9fcmF3X2V4
cHJlc3Npb24pOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2RlbC5nZXRfb3V0cHV0X3Bh
cmFtZXRlcl90eXBlKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuZ2V0X3NldF9y
ZXR1cm5fY29uZGl0aW9uKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2lu
dGVyKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyLl9faW5pdF9f
KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyLmdldF9yZXR1cm5f
dmFyX3R5cGUpOgorICAgICAgICAoVHlwZU1vZGVsKToKKyAgICAgICAgKFR5cGVNb2RlbC5SZWZQ
dHJCYXNlZCk6CisgICAgICAgIChUeXBlTW9kZWwuUmVmUHRyQmFzZWQuX19pbml0X18pOgorICAg
ICAgICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9vcHRpb25hbCk6CisgICAgICAgIChUeXBl
TW9kZWwuUmVmUHRyQmFzZWQuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAg
ICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQpOgorICAg
ICAgICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9w
YXR0ZXJuKToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtKToKKyAgICAgICAgKFR5cGVNb2RlbC5F
bnVtLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbCk6Cisg
ICAgICAgIChUeXBlTW9kZWwuRW51bS5nZXRfb3B0aW9uYWwuRW51bU9wdGlvbmFsKToKKyAgICAg
ICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbC5FbnVtT3B0aW9uYWwuZ2V0X29wdGlvbmFs
KToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbC5FbnVtT3B0aW9uYWwuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoVHlwZU1vZGVsLkVudW0uZ2V0
X2lucHV0X3BhcmFtX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlTW9kZWwuRW51bS5nZXRfZXZl
bnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAgICAgIChUeXBlTW9kZWwuRW51bS5n
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9kZWwuVmFsdWVU
eXBlKToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuX19pbml0X18pOgorICAgICAgICAo
VHlwZU1vZGVsLlZhbHVlVHlwZS5nZXRfb3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1vZGVsLlZh
bHVlVHlwZS5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9k
ZWwuVmFsdWVUeXBlLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAg
ICAgIChUeXBlTW9kZWwuVmFsdWVUeXBlLlZhbHVlT3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5WYWx1ZU9wdGlvbmFsLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNb2Rl
bC5WYWx1ZVR5cGUuVmFsdWVPcHRpb25hbC5nZXRfb3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5WYWx1ZU9wdGlvbmFsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVs
KToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuVmFsdWVPcHRpb25hbC5nZXRfaW5wdXRf
cGFyYW1fdHlwZV90ZXh0KToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuVmFsdWVPcHRp
b25hbC5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAgICAgIChUeXBl
TW9kZWwuaW5pdF9jbGFzcyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190
eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRp
bmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoVHlwZUJp
bmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGluZyk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF90eXBl
X21vZGVsKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8p
OgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5nZXRfdHlw
ZV9tb2RlbCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25f
LmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKGdldF90eXBlX21vZGVsKToK
KyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKFBsYWlu
T2JqZWN0QmluZGluZyk6CisgICAgICAgIChQbGFpbk9iamVjdEJpbmRpbmcuZ2V0X3R5cGVfbW9k
ZWwpOgorICAgICAgICAoQWRIb2NUeXBlQ29udGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
Z2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nKToKKyAg
ICAgICAgKEFycmF5QmluZGluZy5nZXRfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlQmlu
ZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5y
ZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAo
UmF3VHlwZUJpbmRpbmcuZ2V0X3R5cGVfbW9kZWwpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5cGVfdGV4dCk6CisgICAgICAg
IChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUuZ2V0X2NfcGFyYW1fdHlwZV90
ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuQ29tYmluZWRNb2RlLmdldF9jX3Bh
cmFtX3R5cGVfdGV4dCk6CisgICAgICAgIChHZW5lcmF0b3IuZ28pOgorICAgICAgICAoR2VuZXJh
dG9yLnByb2Nlc3NfZXZlbnQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZCk6
CisgICAgICAgIChHZW5lcmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MpOgor
ICAgICAgICAoR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jLkFkSG9j
VHlwZUNvbnRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNl
U291cmNlKToKKwogMjAxMi0wMi0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW2NyYXNoXSB1cG9uIHN0eWxlIG1vZGlmaWNh
dGlvbiBhZnRlciBuYXZpZ2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IGEwNWY0MmMyMzRkMmIyNDhkMDE0YmQwNTdj
MjYyM2Y4OTQ5NDBiNDMuLjBiYzdhMjU0YmM4YmI4ZDUyMTljMTkwYTM3MGMxM2U2YTFhNmM0MjAg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CkBAIC0xODEsMTggKzE4MSw2IEBAIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBz
a2lwX2pzX2JpbmRfZG9tYWlucyA9IHNldChbIlJ1bnRpbWUiLCAiRE9NRGVidWdnZXIiXSkKIAog
Ci1jbGFzcyBDUGFyYW1UeXBlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUs
IHNldHRlcl9mb3JtYXQ9IiVzIik6Ci0gICAgICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAg
c2VsZi5zZXR0ZXJfZm9ybWF0ID0gc2V0dGVyX2Zvcm1hdAotCi0gICAgZGVmIGdldF90ZXh0KHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KLSAgICBkZWYgZ2V0X3NldHRlcl9mb3Jt
YXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNldHRlcl9mb3JtYXQKLQotCiBjbGFzcyBS
YXdUeXBlcyhvYmplY3QpOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZ2V0KGpzb25fdHlw
ZSk6CkBAIC0yMzcsMTQgKzIyNSw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAg
IG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCiAKICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgotICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFyYW1fdHlwZQotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlv
bmFsKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBAY2xhc3NtZXRob2QK
ICAgICAgICAgZGVmIHJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgogICAg
ICAgICAgICAgaWYgbm90IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CiAgICAgICAg
ICAgICAgICAgUmF3VHlwZXMudHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xz
KQpAQCAtMjc0LDEzICsyNTQsNiBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogCiAKICAgICBj
bGFzcyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVm
IGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCBvciBwYXJhbV90eXBlID09IFBhcmFt
VHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgotICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Jl
Zl9jX3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cGxhaW5fY190eXBlCi0KICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2dl
dHRlcl9uYW1lKCk6CiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKQEAgLTMxNSw4ICsyODgs
OSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1f
cmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKIAotICAgICAg
ICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiU3RyaW5nIikKLSAgICAgICAgX3JlZl9jX3R5
cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcmIikKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6CisgICAgICAgICAgICByZXR1cm4gVHlw
ZU1vZGVsLlN0cmluZwogCiAgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKICAgICAgICAgQHN0YXRp
Y21ldGhvZApAQCAtMzU1LDcgKzMyOSw5IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKICAgICAgICAgICAgIHJl
dHVybiAiaW50IgogCi0gICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgi
aW50IikKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21v
ZGVsKCk6CisgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAogCiAgICAgY2xhc3MgTnVt
YmVyKEJhc2VUeXBlKToKICAgICAgICAgQHN0YXRpY21ldGhvZApAQCAtMzkwLDE5ICszNjYsMTEg
QEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jh
d19jX3R5cGVfdGV4dCgpOgogICAgICAgICAgICAgcmV0dXJuICJkb3VibGUiCiAKLSAgICAgICAg
ZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQorICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAg
IHJldHVybiBUeXBlTW9kZWwuTnVtYmVyCiAKICAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKLSAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFy
YW1fdHlwZSwgb3B0aW9uYWwpOgotICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5
cGUuRVZFTlQ6Ci0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCi0KICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CiAgICAgICAgICAgICBy
ZXR1cm4gIkJvb2xlYW4iCkBAIC00MTgsMTAgKzM4Niw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVj
dCk6CiAgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCiAKICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0
X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKICAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0
aG9kUGFyYW1zOgogICAgICAgICAgICAgICAgIG5hbWUgPSAiQm9vbGVhbiIKQEAgLTQ0MSwxNyAr
NDA1LDExIEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfYXJyYXlf
aXRlbV9yYXdfY190eXBlX3RleHQoKToKICAgICAgICAgICAgIHJldHVybiAiYm9vbCIKIAotICAg
ICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9vbCIpCi0gICAgICAgIF9yZWZfY190
eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3QiLCAiKiVzIikKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6CisgICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKIAogICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6Ci0g
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBh
cmFtX3R5cGUsIG9wdGlvbmFsKToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1U
eXBlLkVWRU5UIG9yIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLQogICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAg
IHJldHVybiAiT2JqZWN0IgpAQCAtNDY3LDEwICs0MjUsNiBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCiAKICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0
X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVybiAiIgogCkBAIC00
OTAsMTcgKzQ0NCwxMSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIkluc3Bl
Y3Rvck9iamVjdCIKIAotICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4iKQotICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2Rl
bC5PYmplY3QKIAogICAgIGNsYXNzIEFueShCYXNlVHlwZSk6Ci0gICAgICAgIEBjbGFzc21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBhcmFt
X3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcmVmX2NfdHlwZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLQogICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCkBA
IC01MTYsMTAgKzQ2NCw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKIAogICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZW5lcmF0
ZV92YWxpZGF0ZV9tZXRob2Qod3JpdGVyKToKICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJz
dGF0aWMgdm9pZCBhc3NlcnRBbnkoSW5zcGVjdG9yVmFsdWUqKVxuIikKICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ7XG4iKQpAQCAtNTQyLDE5ICs0ODYsMTEgQEAgY2xhc3MgUmF3VHlwZXMo
b2JqZWN0KToKICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgog
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JWYWx1ZSIKIAotICAgICAgICBfcGxhaW5fY190
eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCi0gICAgICAgIF9yZWZf
Y190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKKyAgICAg
ICAgICAgIHJldHVybiBUeXBlTW9kZWwuQW55CiAKICAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6
Ci0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMs
IHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFy
YW1UeXBlLk9VVFBVVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUK
LSAgICAgICAgICAgIGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKLQogICAgICAgICBAc3RhdGljbWV0
aG9kCiAgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAgIHJldHVybiAi
QXJyYXkiCkBAIC01NzAsMTAgKzUwNiw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4gIm9iamVjdCIKIAogICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgotICAgICAgICAgICAgcmV0dXJu
IFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfb3V0cHV0X2Fy
Z3VtZW50X3ByZWZpeCgpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAKQEAgLTU5MywxNSArNTI1
LDE3MSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2FycmF5X2l0
ZW1fcmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFycmF5
IgogCi0gICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IikKLSAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiIpCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9y
YXdfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BcnJheQorCisK
K2RlZiByZXBsYWNlX3JpZ2h0X3NoaWZ0KGlucHV0X3N0cik6CisgICAgcmV0dXJuIGlucHV0X3N0
ci5yZXBsYWNlKCI+PiIsICI+ID4iKQorCisKK2NsYXNzIENvbW1hbmRSZXR1cm5QYXNzTW9kZWw6
CisgICAgY2xhc3MgQnlSZWZlcmVuY2U6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJf
dHlwZSwgc2V0X2NvbmRpdGlvbik6CisgICAgICAgICAgICBzZWxmLnZhcl90eXBlID0gdmFyX3R5
cGUKKyAgICAgICAgICAgIHNlbGYuc2V0X2NvbmRpdGlvbiA9IHNldF9jb25kaXRpb24KKworICAg
ICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X291
dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24o
KToKKyAgICAgICAgICAgIHJldHVybiAiJXMiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFy
YW1ldGVyX3R5cGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlwZSArICIm
IgorCisgICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5zZXRfY29uZGl0aW9uCisKKyAgICBjbGFzcyBCeVBvaW50ZXI6Cisg
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSk6CisgICAgICAgICAgICBzZWxmLnZh
cl90eXBlID0gdmFyX3R5cGUKKworICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAg
ICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzIgorCisg
ICAgICAgIGRlZiBnZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYudmFyX3R5cGUgKyAiKiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKworY2xhc3MgVHlwZU1vZGVsOgorICAgIGNsYXNzIFJlZlB0ckJhc2VkOgorICAgICAg
ICBkZWYgX19pbml0X18oc2VsZiwgY2xhc3NfbmFtZSk6CisgICAgICAgICAgICBzZWxmLmNsYXNz
X25hbWUgPSBjbGFzc19uYW1lCisgICAgICAgICAgICBzZWxmLm9wdGlvbmFsID0gRmFsc2UKKwor
ICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0ID0gVHlw
ZU1vZGVsLlJlZlB0ckJhc2VkKHNlbGYuY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIHJlc3VsdC5v
cHRpb25hbCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBkZWYg
Z2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxm
Lm9wdGlvbmFsOgorICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSAiJXMiCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSBOb25lCisgICAgICAg
ICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVJlZmVyZW5jZShyZXBsYWNlX3Jp
Z2h0X3NoaWZ0KCJSZWZQdHI8JXM+IiAlIHNlbGYuY2xhc3NfbmFtZSksIHNldF9jb25kaXRpb24p
CisKKyAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gcmVwbGFjZV9yaWdodF9zaGlmdCgiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi5j
bGFzc19uYW1lKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9ldmVu
dF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzIgor
CisgICAgY2xhc3MgRW51bToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfdHlwZV9u
YW1lKToKKyAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gYmFzZV90eXBlX25hbWUgKyAiOjpF
bnVtIgorCisgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoYmFzZV9zZWxmKToKKyAgICAgICAgICAg
IGNsYXNzIEVudW1PcHRpb25hbDoKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAg
ICAgICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKGNscyk6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMKKworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAg
ICAgIyBGSVhNRTogdG8gYmUgcmVwbGFjZWQgd2l0aCBPcHRPdXRwdXQgbW9kZWwuCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihiYXNl
X3NlbGYudHlwZV9uYW1lKQorCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsgIioiCisKKyAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VE9ETyIpCisgICAgICAgICAgICByZXR1cm4gRW51bU9wdGlvbmFsCisKKyAgICAgICAgZGVmIGdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIENv
bW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQorCisgICAgICAg
IGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYudHlwZV9uYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgIHJldHVybiAi
JXMiCisKKyAgICBjbGFzcyBWYWx1ZVR5cGU6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
eXBlX25hbWUsIGlzX2hlYXZ5KToKKyAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9u
YW1lCisgICAgICAgICAgICBzZWxmLmlzX2hlYXZ5ID0gaXNfaGVhdnkKKworICAgICAgICBkZWYg
Z2V0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuVmFsdWVPcHRpb25h
bChzZWxmKQorCisgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihz
ZWxmLnR5cGVfbmFtZSkKKworICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChz
ZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfaGVhdnk6CisgICAgICAgICAgICAgICAgcmV0
dXJuICJjb25zdCAlcyYiICUgc2VsZi50eXBlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAg
ICAgICAgICAgIHJldHVybiAiJXMiCiAKKyAgICAgICAgY2xhc3MgVmFsdWVPcHRpb25hbDoKKyAg
ICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlKToKKyAgICAgICAgICAgICAgICBzZWxm
LmJhc2UgPSBiYXNlCisKKyAgICAgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3Jl
dHVybl9wYXNzX21vZGVsKHNlbGYpOgorICAgICAgICAgICAgICAgICMgRklYTUU6IHRvIGJlIHJl
cGxhY2VkIHdpdGggT3B0T3V0cHV0IG1vZGVsLgorICAgICAgICAgICAgICAgIHJldHVybiBDb21t
YW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihzZWxmLmJhc2UudHlwZV9uYW1lKQorCisgICAg
ICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gImNvbnN0ICVzKiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCisKKyAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVy
X2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2xhc3MoY2xzKToKKyAgICAgICAgY2xzLkJv
b2wgPSBjbHMuVmFsdWVUeXBlKCJib29sIiwgRmFsc2UpCisgICAgICAgIGNscy5JbnQgPSBjbHMu
VmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKKyAgICAgICAgY2xzLk51bWJlciA9IGNscy5WYWx1ZVR5
cGUoImRvdWJsZSIsIEZhbHNlKQorICAgICAgICBjbHMuU3RyaW5nID0gY2xzLlZhbHVlVHlwZSgi
U3RyaW5nIiwgVHJ1ZSkKKyAgICAgICAgY2xzLk9iamVjdCA9IGNscy5SZWZQdHJCYXNlZCgiSW5z
cGVjdG9yT2JqZWN0IikKKyAgICAgICAgY2xzLkFycmF5ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNw
ZWN0b3JBcnJheSIpCisgICAgICAgIGNscy5BbnkgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3BlY3Rv
clZhbHVlIikKKworVHlwZU1vZGVsLmluaXRfY2xhc3MoKQogCi1jbGFzcyBQYXJhbVR5cGUob2Jq
ZWN0KToKLSAgICBJTlBVVCA9ICJpbnB1dCIKLSAgICBPVVRQVVQgPSAib3V0cHV0IgotICAgIEVW
RU5UID0gImV2ZW50IgotICAgIFRZUEVfQlVJTERFUl9PVVRQVVQgPSAidHlwZUJ1aWxkZXJPdXRw
dXQiCiAKICMgQ29sbGVjdGlvbiBvZiBJbnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0aG9kcyB0aGF0
IGFyZSBsaWtlbHkgdG8gYmUgb3ZlcmxvYWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3MuCiAjIFdlIG11
c3QgZXhwbGljaXRseSBpbXBvcnQgYWxsIG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0aGV5IHdvbid0
IGJlIGF2YWlsYWJsZSB0byB1c2VyLgpAQCAtNzI2LDcgKzgxNCw3IEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICBkZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJs
ZSwgY29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNs
YXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKLSAgICAgICAgICAgIGZ1
bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9ICIiCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UgPSBhZF9ob2NfdHlwZV9jb250ZXh0LmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3By
ZWZpeAogICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBl
X2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZApAQCAtODMzLDIxICs5MjEsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
KyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKIAog
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUgKyAiOjpFbnVtIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQo
Y2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuZ2V0X2luX2NfdHlwZV90
ZXh0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0i
CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMpIgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJUeXBlQnVpbGRlcjo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
JXMpIgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkVudW0oaGVscGVyLmZ1bGxfbmFtZV9wcmVm
aXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVudW1CaW5kaW5nCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IGlmIGhlbHBlci5pc19hZF9ob2M6CkBAIC04NzgsMTQgKzk2NiwxNCBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmlu
ZwogCiAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZU1vZGVsLlN0cmluZworCisgICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQogCiAgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUo
KS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJh
eV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCiAKQEAgLTkzNiwxNiArMTAyNCwxNiBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LlN0cmluZwogCiAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlZhbHVlVHlwZSgiJXMlcyIgJSAoaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpLCBUcnVl
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5f
Y190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwg
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2Nf
dHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5n
ZXRfaW5fY190eXBlX3RleHQoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5
cGVkZWZTdHJpbmcKIApAQCAtMTIyMSwxMCArMTMwOSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9m
b3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFs
dWUiCiAKICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+IgotCi0gICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoY2xzKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKIApAQCAtMTIzNiw2ICsxMzIwLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAogCisgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlJlZlB0ckJhc2VkKGhlbHBlci5m
dWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKKwog
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19u
YW1lLCByZXNvbHZlX2NvbnRleHQsIGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVf
cHJlZml4KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUg
PSBwcm9wZXJ0eV9uYW1lCkBAIC0xMjQzLDYgKzEzMzEsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlX2NvbnRleHQgPSByZXNv
bHZlX2NvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkX2hvY190eXBl
X2xpc3QgPSBhZF9ob2NfdHlwZV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9IHBhcmVudF9mdWxsX25hbWVfcHJlZml4ICsg
Y2xhc3NfbmFtZSArICI6OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRh
aW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfdHlwZV9uYW1lX2ZpeChzZWxmKToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBOYW1lRml4OgpAQCAtMTI4MiwxMCArMTM3MSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQi
KQogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBl
KFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKLQotICAgICAgICAgICAgICAg
ICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVt
X2NfdHlwZV90ZXh0KGNscyk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJl
ZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCiAKQEAg
LTEyOTcsNiArMTM4MiwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAg
ICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5PYmplY3QKKwogICAgICAgICAgICAgICAgIHJl
dHVybiBQbGFpbk9iamVjdEJpbmRpbmcKICAgICAgICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUi
XSA9PSAiYXJyYXkiOgogICAgICAgICAgICAgaWYgIml0ZW1zIiBpbiBqc29uX3R5cGFibGU6CkBA
IC0xMzA1LDYgKzEzOTQsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAg
ICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgogICAgICAgICAgICAgICAgICAgICBjb250YWluZXJf
ZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKyAgICAgICAgICAgICAgICAg
ICAgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+Igog
CiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF90eXBlX25hbWVfZml4KCk6CkBAIC0xMzc5LDEyICsxNDY5LDggQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfYXJyYXlf
aXRlbV9jX3R5cGVfdGV4dCgpICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTwlcyA+ID4iICUgY2xzLnJlc29sdmVfZGF0
YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoKQotCi0gICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiVHlwZUJ1aWxkZXI6OkFycmF5PCVzID4iICUgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90
eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIlR5cGVCdWlsZGVyOjpBcnJheTwl
cz4iICUgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1f
Y190eXBlX3RleHQoKSkKIAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgpAQCAtMTM5NCw2ICsxNDgwLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5CiAKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2Fy
cmF5X2l0ZW1fY190eXBlX3RleHQoKSkKKwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJp
bmRpbmcKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2gg
dG8gcmF3IHR5cGUuCkBAIC0xNDIzLDkgKzE1MTMsNiBAQCBjbGFzcyBSYXdUeXBlQmluZGluZzoK
ICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoc2VsZik6CiAgICAgICAgIHJldHVybiBz
ZWxmLnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQogCi0gICAgZGVmIGdl
dF9pbl9jX3R5cGVfdGV4dChzZWxmLCBvcHRpb25hbCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJh
d190eXBlXy5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90
ZXh0KCkKLQogICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgp
CiAKQEAgLTE0MzUsNiArMTUyMiw5IEBAIGNsYXNzIFJhd1R5cGVCaW5kaW5nOgogICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXwog
CisgICAgZGVmIGdldF90eXBlX21vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdf
dHlwZV8uZ2V0X3Jhd190eXBlX21vZGVsKCkKKwogCiBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0
YSk6CkBAIC0yMzU5LDcgKzI0NDksNyBAQCBjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgogICAg
IGNsYXNzIFN0cmljdFBhcmFtZXRlck1vZGU6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAg
ICAgZGVmIGdldF9jX3BhcmFtX3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcpOgotICAgICAgICAgICAg
cmV0dXJuIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5
cGVfdGV4dCgpCiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKQEAgLTIz
NzIsNyArMjQ2Miw3IEBAIGNsYXNzIE1ldGhvZEdlbmVyYXRlTW9kZXM6CiAgICAgY2xhc3MgUmF3
UGFyYW1ldGVyTW9kZToKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2Nf
cGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gdHlwZV9i
aW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZ
UEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisgICAgICAgICAgICByZXR1cm4g
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdl
dF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKQogCiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZh
bHVlX3JlZik6CkBAIC0yMzgxLDggKzI0NzEsOCBAQCBjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVz
OgogICAgIGNsYXNzIENvbWJpbmVkTW9kZToKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdf
dHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZh
bHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190
eXBlX3RleHQoRmFsc2UpKQorICAgICAgICAgICAgcmV0dXJuIGdldF9hbm5vdGF0ZWRfdHlwZV90
ZXh0KHR5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfcmF3X3R5cGVfbW9kZWwo
KS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksCisgICAgICAgICAgICAgICAgdHlwZV9iaW5k
aW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpKQogCiAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CkBAIC0yNDcxLDcgKzI1NjEsNyBAQCBj
bGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRl
cmZhY2VfbGlzdC5hcHBlbmQoIiAgICBwdWJsaWM6XG4iKQogICAgICAgICAgICAgaWYgImNvbW1h
bmRzIiBpbiBqc29uX2RvbWFpbjoKICAgICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGlu
IGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
cHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25h
bWUpCisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9j
b21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25h
bWUpCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5h
cHBlbmQoIlxuICAgIHByb3RlY3RlZDpcbiIpCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAgICAgdmlydHVhbCB+JXMoKSB7IH1c
biIgJSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIH07XG5cbiIpCkBAIC0yNTI4LDI0ICsy
NjE4LDI4IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIGZvciBqc29uX3BhcmFtZXRl
ciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICByYXdfdHlw
ZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQor
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5
cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRlciwgZXZlbnRfbmFtZSwgZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCiAKLSAgICAgICAgICAgICAgICBqc29uX29w
dGlvbmFsID0gIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJb
Im9wdGlvbmFsIl0KKyAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGlu
Zy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQorICAgICAgICAgICAgICAgIHJhd190eXBlX2JpbmRpbmcg
PSBSYXdUeXBlQmluZGluZyhyYXdfdHlwZSkKIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsX21h
c2sgPSByYXdfdHlwZS5pc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpCi0gICAgICAgICAg
ICAgICAgY190eXBlID0gcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQs
IGpzb25fb3B0aW9uYWwpCisgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcGFy
YW1ldGVyLmdldCgib3B0aW9uYWwiKSkKIAogICAgICAgICAgICAgICAgIHNldHRlcl90eXBlID0g
cmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0g
b3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAotCi0gICAgICAgICAgICAgICAgcGFyYW1f
dHlwZV9iaW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9j
KGpzb25fcGFyYW1ldGVyLCBldmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3Jp
dGVyKQorICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0
X3R5cGVfbW9kZWwoKQorICAgICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVf
YmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgp
CisgICAgICAgICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0
X29wdGlvbmFsKCkKIAotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90
YXRlZF90eXBlX3RleHQoY190eXBlLmdldF90ZXh0KCksIHBhcmFtX3R5cGVfYmluZGluZy5nZXRf
aW5fY190eXBlX3RleHQoanNvbl9vcHRpb25hbCkpCisgICAgICAgICAgICAgICAgYW5ub3RhdGVk
X3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRf
cGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgp
KQogCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5u
b3RhdGVkX3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKIAotICAgICAgICAgICAgICAgIHNldHRlcl9h
cmd1bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5nZXRfZXZlbnRf
c2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
ICAgICBpZiByYXdfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJhd190eXBlX2Jp
bmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNldHRlcl9hcmd1
bWVudAogCiAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+
c2V0JXMoXCIlc1wiLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0
dGVyX2FyZ3VtZW50KQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpAQCAtMjU2Niw3ICsy
NjYwLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgZG9tYWluX25hbWUsIGV2ZW50
X25hbWUsIGpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LCAiLCAiKSkpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFp
bl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKKyAgICBkZWYgcHJvY2Vzc19jb21tYW5kKGpzb25f
Y29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ludGVyZmFjZV9u
YW1lKToKICAgICAgICAganNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQog
ICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBr
JXNfJXNDbWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQogICAgICAg
ICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lKSkKQEAgLTI1OTUsMjEgKzI2ODksMjggQEAgY2xhc3MgR2VuZXJhdG9yOgog
ICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0K
ICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUo
anNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQogCi0gICAgICAgICAgICAgICAgdmFyX3R5cGUg
PSBwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5JTlBVVCwgTm9uZSkK
LSAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZSA9IHZhcl90eXBlCiAgICAgICAgICAg
ICAgICAgZ2V0dGVyX25hbWUgPSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQogCiAg
ICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikK
KworICAgICAgICAgICAgICAgIG5vbl9vcHRpb25hbF90eXBlX21vZGVsID0gcGFyYW1fcmF3X3R5
cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdl
dF9vcHRpb25hbCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
dHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsCisKICAgICAgICAgICAgICAgICBp
ZiBvcHRpb25hbDoKICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFs
dWVGb3VuZCA9IGZhbHNlO1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMg
aW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpz
b25fcGFyYW1fbmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0
ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwu
Z2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpz
b25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9u
YW1lKSkKICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmlu
XyVzIDogMCIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBQYXNzUmVm
UHRyCiAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29u
c3QgJXMqIgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNvZGUg
PSAoIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIlc1wiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFy
X3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJh
bV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uX29wdGlvbmFsX3R5cGVf
bW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBl
KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlvbmFsIHJlZnB0ci12YWx1ZXMg
YXMgTm9uTnVsbFBhc3NSZWZQdHIKICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1fcmF3X3R5
cGUuaXNfaGVhdnlfdmFsdWUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJh
bV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgogICAgICAgICAgICAgICAgICAgICBlbHNlOgpA
QCAtMjYxNyw3ICsyNzE4LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAg
bWV0aG9kX2luX2NvZGUgKz0gY29kZQogICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1f
bGlzdC5hcHBlbmQocGFyYW0pCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdl
bnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzIGluXyVzIiAlIChmb3JtYWxfcGFyYW1fdHlw
ZV9wYXR0ZXJuICUgZm9ybWFsX3BhcmFtX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1l
KSkKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlz
dC5hcHBlbmQoIiwgJXMgaW5fJXMiICUgKGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gJSBub25f
b3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9y
ZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lKSkKIAogICAgICAgICAgICAgICAgIGpz
X2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldF9qc19iaW5kX3R5cGUoKQogICAgICAgICAg
ICAgICAgIGpzX3BhcmFtX3RleHQgPSAie1wibmFtZVwiOiBcIiVzXCIsIFwidHlwZVwiOiBcIiVz
XCIsIFwib3B0aW9uYWxcIjogJXN9IiAlICgKQEAgLTI2MzcsMzUgKzI3MzgsNDcgQEAgY2xhc3Mg
R2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpzb25fcmV0
dXJuWyJuYW1lIl0KIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIm9wdGlvbmFsIiBpbiBq
c29uX3JldHVybiBhbmQganNvbl9yZXR1cm5bIm9wdGlvbmFsIl0KKyAgICAgICAgICAgICAgICBv
cHRpb25hbCA9IGJvb2woanNvbl9yZXR1cm4uZ2V0KCJvcHRpb25hbCIpKQogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dl
bmVyYXRlX2FkX2hvYyhqc29uX3JldHVybiwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1l
LCBhZF9ob2NfdHlwZV93cml0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuX3R5cGVfYmluZGlu
ZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3JldHVy
biwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGFn
ZW50X2ludGVyZmFjZV9uYW1lICsgIjo6IikKIAogICAgICAgICAgICAgICAgIHJhd190eXBlID0g
cmV0dXJuX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQogICAgICAgICAgICAgICAg
IHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKICAgICAgICAgICAgICAg
ICBpbml0aWFsaXplciA9IHJhd190eXBlLmdldF9jX2luaXRpYWxpemVyKCkKLSAgICAgICAgICAg
ICAgICB2YXJfdHlwZSA9IHJhd190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLk9VVFBV
VCwgTm9uZSkKIAotICAgICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xu
IiAlICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikK
KyAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlw
ZV9tb2RlbCgpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
ICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCisKKyAgICAgICAgICAg
ICAgICByYXdfdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwo
KQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByYXdf
dHlwZV9tb2RlbCA9IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCisKKyAgICAgICAgICAg
ICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190
eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zh
cl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQogICAgICAgICAgICAgICAg
IHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgp
LmdldF9hcmd1bWVudF9wcmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKICAgICAgICAgICAgICAg
ICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNl
dHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQogICAgICAgICAg
ICAgICAgIGlmIG9wdGlvbmFsOgogICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0
IG9wdGlvbmFsIHByb3Blcmx5LiBQcm9iYWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0
ZXIgc2hvdWxkIGJlIGluIGVhY2ggY2FzZS4KICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTog
cmVmYWN0b3IgdGhpcyBjb25kaXRpb247IGl0J3MgYSBoYWNrIG5vdy4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgb3IgdmFyX3R5cGUuZ2V0X3Rl
eHQoKS5zdGFydHN3aXRoKCJSZWZQdHI8Iik6CisgICAgICAgICAgICAgICAgICAgIHZhcl90eXBl
X3RleHQgPSByYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKQorICAgICAgICAgICAgICAgICAgICBp
ZiB2YXJfdHlwZV90ZXh0ID09ICJib29sIiBvciB2YXJfdHlwZV90ZXh0LnN0YXJ0c3dpdGgoIlJl
ZlB0cjwiKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91
dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCiAgICAgICAgICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgLy8gRklY
TUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS5cbiIgKyBjb29rCiAKLSAgICAgICAgICAgICAgICBt
ZXRob2Rfb3V0X2NvZGUgKz0gY29kZQotICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1f
bGlzdC5hcHBlbmQocGFyYW0pCisgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRf
YW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBl
LmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3BhcmFt
ZXRlcl90eXBlKCkpCiAKLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5v
dGF0ZWRfdHlwZV90ZXh0KHZhcl90eXBlLmdldF90ZXh0KCkgKyByYXdfdHlwZS5nZXRfb3V0cHV0
X3Bhc3NfbW9kZWwoKS5nZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdHlwZV9i
aW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChvcHRpb25hbCkpCisgICAgICAgICAgICAgICAgcGFy
YW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgIGlm
IG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gIm9wdF8iICsgcGFy
YW1fbmFtZQogCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJm
YWNlX2xpc3QuYXBwZW5kKCIsICVzIG91dF8lcyIgJSAoYW5ub3RhdGVkX3R5cGUsIGpzb25fcmV0
dXJuX25hbWUpKQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVy
ZmFjZV9saXN0LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUp
KQogICAgICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKIAorICAg
ICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSBjb2RlCisgICAgICAgICAgICAgICAgYWdl
bnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKwogICAgICAgICAgICAgICAgIGJhY2tl
bmRfanNfcmVwbHlfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVybl9uYW1l
KQogCiAgICAgICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10iICUgam9pbihiYWNrZW5kX2pz
X3JlcGx5X3BhcmFtX2xpc3QsICIsICIpCkBAIC0yNjg2LDEyICsyNzk5LDEzIEBAIGNsYXNzIEdl
bmVyYXRvcjoKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCIpID0gMDtcbiIpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJlc29sdmVf
dHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jKGpzb25fcGFyYW0sIG1ldGhvZF9uYW1lLCBkb21haW5f
bmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyKToKKyAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5l
cmF0ZV9hZF9ob2MoanNvbl9wYXJhbSwgbWV0aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV93cml0ZXIsIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6CiAgICAg
ICAgIHBhcmFtX25hbWUgPSBqc29uX3BhcmFtWyJuYW1lIl0KICAgICAgICAgYWRfaG9jX3R5cGVf
bGlzdCA9IFtdCiAKICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKICAgICAgICAgICAg
IGNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgorICAgICAg
ICAgICAgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZl
X25hbWVfcHJlZml4X3BhcmFtCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAg
ICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeCgpOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGNkZWY1ZGUxYmEwY2JjMTlj
MDgwZjQzNTU0ZTViYTI3YTc0NDYxZDkuLjQ5MjNjYTU5YzBhMTA2ZjdlNzBhNGY5ZTk5NGY4NmU4
ZTlhMjc3NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNj
cmlwdAogICAgIC8vIERvbid0IHNlbmQgc2NyaXB0IGNvbnRlbnQgdG8gdGhlIGZyb250IGVuZCB1
bnRpbCBpdCdzIHJlYWxseSBuZWVkZWQuCiAgICAgY29uc3QgYm9vbCogaXNDb250ZW50U2NyaXB0
ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250ZW50U2NyaXB0IDogMDsK
ICAgICBTdHJpbmcgc291cmNlTWFwVVJMID0gc291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7
Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElkLCBzY3JpcHQudXJsLCBzY3Jp
cHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQu
ZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCk7CisgICAgU3RyaW5nKiBz
b3VyY2VNYXBVUkxQYXJhbSA9IHNvdXJjZU1hcFVSTC5pc051bGwoKSA/IDAgOiAmIHNvdXJjZU1h
cFVSTDsKKyAgICBtX2Zyb250ZW5kLT5zY3JpcHRQYXJzZWQoc2NyaXB0SWQsIHNjcmlwdC51cmws
IHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNj
cmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMUGFyYW0pOwogCiAg
ICAgbV9zY3JpcHRzLnNldChzY3JpcHRJZCwgc2NyaXB0KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128072</attachid>
            <date>2012-02-21 16:16:24 -0800</date>
            <delta_ts>2012-02-21 16:16:24 -0800</delta_ts>
            <desc>old InspectorBackendDispatcher.h</desc>
            <filename>InspectorBackendDispatcher.base.h</filename>
            <type>text/plain</type>
            <size>30847</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKI2Rl
ZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCgpuYW1lc3BhY2UgV2Vi
Q29yZSB7CgpjbGFzcyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpjbGFz
cyBJbnNwZWN0b3JBcnJheTsKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwoKdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CgpjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjog
cHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKcHVibGljOgog
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCk7CiAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQoKICAgIGNsYXNzIEluc3Bl
Y3RvckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nKikgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JD
b21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBNZW1vcnlDb21tYW5kSGFuZGxl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGdldERPTU5vZGVDb3VudChFcnJv
clN0cmluZyosIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1l
bW9yeTo6RE9NR3JvdXAgPiA+Ki8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2RvbUdyb3Vw
cywgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6OlN0cmluZ1N0YXRpc3RpY3M+Ki8g
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9zdHJpbmdzKSA9IDA7CgogICAgcHJvdGVjdGVk
OgogICAgICAgIHZpcnR1YWwgfk1lbW9yeUNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKICAg
IGNsYXNzIFBhZ2VDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc2NyaXB0U291cmNlLCAv
KmNvbnN0IFR5cGVCdWlsZGVyOjpQYWdlOjpTY3JpcHRJZGVudGlmaWVyJiovIFN0cmluZyogb3V0
X2lkZW50aWZpZXIpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5faWRlbnRpZmllcikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiBp
bl9pZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBpbl9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl91cmwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0
cmluZyosIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkNvb2tpZSA+ID4qLyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfY29va2llcywgLypjb25z
dCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRfY29va2llc1N0cmluZykgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2Nvb2tp
ZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fZG9tYWluKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyosIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9m
cmFtZVRyZWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBjb25zdCBTdHJpbmcmIGluX3Vy
bCwgLypjb25zdCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRfY29udGVudCwgLypib29sKi8gYm9vbCog
b3V0X2Jhc2U2NEVuY29kZWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNv
dXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBpbl91cmwsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIGNvbnN0IGJvb2wqIGluX2Nhc2VTZW5z
aXRpdmUsIGNvbnN0IGJvb2wqIGluX2lzUmVnZXgsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoID4gPiovIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5S
ZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IGJvb2wq
IGluX2Nhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGluX2lzUmVnZXgsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaFJlc3VsdCA+ID4qLyBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNldERvY3VtZW50Q29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBpbl9odG1sKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFNjcmVlblNpemVPdmVycmlkZShFcnJvclN0cmluZyosIGludCBpbl93aWR0aCwgaW50IGluX2hl
aWdodCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0
cmluZyosIGJvb2wgaW5fcmVzdWx0KSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1
YWwgflBhZ2VDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBSdW50aW1lQ29t
bWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZShF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBp
bl9vYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25z
dCBib29sKiBpbl9kb05vdFBhdXNlT25FeGNlcHRpb25zLCBjb25zdCBTdHJpbmcqIGluX2ZyYW1l
SWQsIGNvbnN0IGJvb2wqIGluX3JldHVybkJ5VmFsdWUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRf
cmVzdWx0LCAvKmNvbnN0IGJvb2wqIGNvbnN0Ki8gYm9vbCogb3V0X3dhc1Rocm93bikgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgaW5fZnVuY3Rpb25EZWNsYXJhdGlvbiwg
Y29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5fYXJndW1lbnRzLCBjb25zdCBib29sKiBp
bl9yZXR1cm5CeVZhbHVlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4qLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Jlc3VsdCwgLypjb25zdCBi
b29sKiBjb25zdCovIGJvb2wqIG91dF93YXNUaHJvd24pID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0SWQs
IGNvbnN0IGJvb2wqIGluX293blByb3BlcnRpZXMsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvciA+ID4qLyBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX29iamVjdElkKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0R3JvdXApID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuKEVycm9yU3RyaW5nKikgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5S
dW50aW1lQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgogICAgY2xhc3MgQ29uc29sZUNvbW1h
bmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChFcnJvclN0cmlu
ZyosIGJvb2wgaW5fZW5hYmxlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBhZGRJbnNwZWN0
ZWROb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCBhZGRJbnNwZWN0ZWRIZWFwT2JqZWN0KEVycm9yU3RyaW5nKiwgaW50IGluX2hlYXBPYmpl
Y3RJZCkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5Db25zb2xlQ29tbWFu
ZEhhbmRsZXIoKSB7IH0KICAgIH07CgogICAgY2xhc3MgTmV0d29ya0NvbW1hbmRIYW5kbGVyIHsK
ICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRVc2VyQWdlbnRPdmVycmlkZShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fdXNlckFnZW50KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRU
UEhlYWRlcnMoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5f
aGVhZGVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3JlcXVlc3RJZCwgLypjb25zdCBTdHJpbmcmKi8gU3Ry
aW5nKiBvdXRfYm9keSwgLypib29sKi8gYm9vbCogb3V0X2Jhc2U2NEVuY29kZWQpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FuQ2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcqLCAvKmJv
b2wqLyBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJv
d3NlckNhY2hlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjYW5DbGVh
ckJyb3dzZXJDb29raWVzKEVycm9yU3RyaW5nKiwgLypib29sKi8gYm9vbCogb3V0X3Jlc3VsdCkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKEVycm9yU3RyaW5n
KikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDYWNoZURpc2FibGVkKEVycm9yU3RyaW5n
KiwgYm9vbCBpbl9jYWNoZURpc2FibGVkKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZp
cnR1YWwgfk5ldHdvcmtDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQogICAgY2xhc3MgRGF0YWJhc2VDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6
CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nID4gPiovIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG91dF90YWJsZU5hbWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgLypib29sKi8gYm9vbCogb3V0X3N1Y2Nlc3MsIC8qaW50Ki8gaW50KiBvdXRfdHJh
bnNhY3Rpb25JZCkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5EYXRhYmFz
ZUNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQkNvbW1h
bmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKEVy
cm9yU3RyaW5nKiwgaW50IGluX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyosIGlu
dCBpbl9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBp
bl9kYXRhYmFzZU5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGEoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgaW5fZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGluX29iamVjdFN0b3Jl
TmFtZSwgY29uc3QgU3RyaW5nJiBpbl9pbmRleE5hbWUsIGludCBpbl9za2lwQ291bnQsIGludCBp
bl9wYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2tleVJhbmdlKSA9
IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkluZGV4ZWREQkNvbW1hbmRIYW5k
bGVyKCkgeyB9CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
Y2xhc3MgRE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRET01TdG9y
YWdlRW50cmllcyhFcnJvclN0cmluZyosIGludCBpbl9zdG9yYWdlSWQsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5ID4gPiovIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9lbnRyaWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nKiwgaW50IGluX3N0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9rZXksIGNvbnN0IFN0cmluZyYgaW5fdmFsdWUsIC8qYm9vbCovIGJvb2wq
IG91dF9zdWNjZXNzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJ
dGVtKEVycm9yU3RyaW5nKiwgaW50IGluX3N0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBpbl9rZXks
IC8qYm9vbCovIGJvb2wqIG91dF9zdWNjZXNzKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAg
IHZpcnR1YWwgfkRPTVN0b3JhZ2VDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFz
cyBBcHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZp
cnR1YWwgdm9pZCBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3RyaW5nKiwgLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJh
bWVXaXRoTWFuaWZlc3QgPiA+Ki8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2ZyYW1lSWRz
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fZnJhbWVJZCwgLypjb25zdCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRfbWFuaWZl
c3RVUkwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+Ki8gUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIG91dF9hcHBsaWNhdGlvbkNhY2hlKSA9IDA7CgogICAgcHJvdGVj
dGVkOgogICAgICAgIHZpcnR1YWwgfkFwcGxpY2F0aW9uQ2FjaGVDb21tYW5kSGFuZGxlcigpIHsg
fQogICAgfTsKCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBjbGFzcyBGaWxlU3lzdGVtQ29t
bWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJy
b3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcq
KSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkZpbGVTeXN0ZW1Db21tYW5k
SGFuZGxlcigpIHsgfQogICAgfTsKCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBj
bGFzcyBET01Db21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lk
IGdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9yb290KSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJ
ZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nKiwg
aW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgLyppbnQqLyBpbnQqIG91
dF9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcXVlcnlTZWxlY3RvckFsbChFcnJv
clN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fc2VsZWN0b3IsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50ID4gPiovIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4mIG91dF9ub2RlSWRzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVOYW1lKEVy
cm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9uYW1lLCAvKmludCov
IGludCogb3V0X25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUo
RXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9k
ZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3Ry
aW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9uYW1lLCBjb25zdCBTdHJpbmcm
IGluX3ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQo
RXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0
IFN0cmluZyogaW5fbmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBdHRyaWJ1
dGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX25hbWUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3Ry
aW5nKiwgaW50IGluX25vZGVJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6RE9NOjpFdmVudExpc3RlbmVyID4gPiovIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4m
IG91dF9saXN0ZW5lcnMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0T3V0ZXJIVE1MKEVy
cm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgLypjb25zdCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRf
b3V0ZXJIVE1MKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldE91dGVySFRNTChFcnJvclN0
cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fb3V0ZXJIVE1MKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5LCAvKmNvbnN0IFN0cmluZyYqLyBTdHJpbmcqIG91dF9zZWFyY2hJZCwgLypp
bnQqLyBpbnQqIG91dF9yZXN1bHRDb3VudCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRT
ZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWFyY2hJZCwgaW50
IGluX2Zyb21JbmRleCwgaW50IGluX3RvSW5kZXgsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8aW50ID4gPiovIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9ub2RlSWRzKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9zZWFyY2hJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0Tm9kZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0SWQsIC8qaW50Ki8g
aW50KiBvdXRfbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2Rl
RW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgaW5fZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIGluX2hpZ2hsaWdodENvbmZpZykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IGluX3gsIGludCBpbl95LCBpbnQgaW5f
d2lkdGgsIGludCBpbl9oZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9j
b2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX291dGxpbmVDb2xvcikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nKiwgaW50IGlu
X25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX2hpZ2hsaWdodENvbmZp
ZykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGlu
X2NvbnRlbnRDb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2NvbnRlbnRP
dXRsaW5lQ29sb3IpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9wYXRoLCAvKmludCovIGludCog
b3V0X25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBvdXRfb2JqZWN0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEF0
dHJpYnV0ZXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZyA+ID4qLyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfYXR0
cmlidXRlcykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oRXJyb3JTdHJpbmcqLCBp
bnQgaW5fbm9kZUlkLCBpbnQgaW5fdGFyZ2V0Tm9kZUlkLCBjb25zdCBpbnQqIGluX2luc2VydEJl
Zm9yZU5vZGVJZCwgLyppbnQqLyBpbnQqIG91dF9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9lbmFi
bGVkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHVuZG8oRXJyb3JTdHJpbmcqKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIHJlZG8oRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIG1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nKikgPSAwOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgICB2aXJ0dWFsIH5ET01Db21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBj
bGFzcyBDU1NDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShF
cnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zv
ck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBjb25zdCBib29sKiBpbl9pbmNsdWRlUHNl
dWRvLCBjb25zdCBib29sKiBpbl9pbmNsdWRlSW5oZXJpdGVkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGUgPiA+Ki8gUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgb3V0X21hdGNoZWRDU1NSdWxlcywgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzID4gPiovIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG91dF9wc2V1ZG9FbGVtZW50cywgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5ID4gPiovIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIG91dF9pbmhlcml0ZWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgb3V0X2lubGluZVN0eWxlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTU3R5bGU+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9hdHRyaWJ1dGVzU3R5bGUp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JT
dHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBpbl9m
b3JjZWRQc2V1ZG9DbGFzc2VzLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVC
dWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA+ID4qLyBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBvdXRfY29tcHV0ZWRTdHlsZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBn
ZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlciA+ID4qLyBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+JiBvdXRfaGVhZGVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBn
ZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zdHlsZVNoZWV0SWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4qLyBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3N0eWxlU2hlZXQpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3N0
eWxlU2hlZXRJZCwgLypjb25zdCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRfdGV4dCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIGluX3RleHQpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIGluX3N0eWxlSWQsIGludCBpbl9wcm9wZXJ0eUluZGV4LCBjb25z
dCBTdHJpbmcmIGluX3RleHQsIGJvb2wgaW5fb3ZlcndyaXRlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9zdHls
ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBpbl9zdHlsZUlkLCBpbnQgaW5fcHJvcGVy
dHlJbmRleCwgYm9vbCBpbl9kaXNhYmxlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTU3R5bGU+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9zdHlsZSkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fcnVsZUlkLCBjb25zdCBTdHJpbmcmIGluX3NlbGVjdG9y
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgb3V0X3J1bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShF
cnJvclN0cmluZyosIGludCBpbl9jb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3NlbGVj
dG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgb3V0X3J1bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nID4gPiovIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9jc3NQcm9w
ZXJ0aWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihF
cnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmls
ZXIoRXJyb3JTdHJpbmcqLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQ
cm9maWxlPiovIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfcHJvZmlsZSkgPSAwOwoKICAg
IHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5DU1NDb21tYW5kSGFuZGxlcigpIHsgfQogICAg
fTsKCiAgICBjbGFzcyBUaW1lbGluZUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGluX21heENhbGxT
dGFja0RlcHRoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoRXJyb3JTdHJpbmcqKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEluY2x1ZGVNZW1vcnlEZXRhaWxzKEVycm9yU3Ry
aW5nKiwgYm9vbCBpbl9lbmFibGVkKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1
YWwgflRpbWVsaW5lQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBEZWJ1Z2dlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1
YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2F1c2VzUmVjb21waWxhdGlvbihFcnJvclN0cmlu
ZyosIC8qYm9vbCovIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
c3VwcG9ydHNOYXRpdmVCcmVha3BvaW50cyhFcnJvclN0cmluZyosIC8qYm9vbCovIGJvb2wqIG91
dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyosIGJvb2wg
aW5fYWN0aXZlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChF
cnJvclN0cmluZyosIGludCBpbl9saW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGluX3VybCwgY29u
c3QgU3RyaW5nKiBpbl91cmxSZWdleCwgY29uc3QgaW50KiBpbl9jb2x1bW5OdW1iZXIsIGNvbnN0
IFN0cmluZyogaW5fY29uZGl0aW9uLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkJiovIFN0cmluZyogb3V0X2JyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uID4gPiovIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIG91dF9sb2NhdGlvbnMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBpbl9sb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBpbl9jb25kaXRpb24sIC8qY29uc3QgVHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmKi8gU3RyaW5nKiBvdXRfYnJlYWtwb2lu
dElkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X2FjdHVhbExvY2F0aW9uKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGlu
X2JyZWFrcG9pbnRJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRp
b24oRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbG9jYXRp
b24pID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RlcE92ZXIoRXJyb3JTdHJpbmcqKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIHN0ZXBJbnRvKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBzdGVwT3V0KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCBwYXVzZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1l
KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5LCBjb25zdCBib29sKiBpbl9jYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpbl9pc1Jl
Z2V4LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpT
ZWFyY2hNYXRjaCA+ID4qLyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfcmVzdWx0KSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGNhblNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIC8q
Ym9vbCovIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
aXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JpcHRTb3VyY2UsIGNvbnN0IGJvb2wqIGluX3ByZXZpZXcsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWUg
PiA+Ki8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2NhbGxGcmFtZXMsIC8qUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+Ki8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9yZXN1bHQp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9zY3JpcHRJZCwgLypjb25zdCBTdHJpbmcmKi8gU3RyaW5nKiBvdXRf
c2NyaXB0U291cmNlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnVuY3Rpb25JZCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiovIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBvdXRfZGV0YWlscykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXVz
ZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc3RhdGUpID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaW5fZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5faW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBjb25zdCBib29sKiBpbl9yZXR1cm5CeVZhbHVlLCAvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgb3V0X3Jlc3VsdCwgLypjb25zdCBib29sKiBjb25zdCovIGJvb2wqIG91dF93YXNUaHJvd24p
ID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+RGVidWdnZXJDb21tYW5kSGFu
ZGxlcigpIHsgfQogICAgfTsKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRE9NRGVidWdnZXJDb21t
YW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIHNldERPTUJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3R5cGUp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmlu
ZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fdHlwZSkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9ldmVu
dE5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtw
b2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGluX2V2ZW50TmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRYSFJCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl91cmwpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgaW5fdXJsKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1
YWwgfkRPTURlYnVnZ2VyQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgIGNsYXNzIFByb2ZpbGVyQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZp
cnR1YWwgdm9pZCBjYXVzZXNSZWNvbXBpbGF0aW9uKEVycm9yU3RyaW5nKiwgLypib29sKi8gYm9v
bCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBpc1NhbXBsaW5nKEVycm9y
U3RyaW5nKiwgLypib29sKi8gYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCBoYXNIZWFwUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCAvKmJvb2wqLyBib29sKiBvdXRfcmVz
dWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IHN0b3AoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFByb2ZpbGVI
ZWFkZXJzKEVycm9yU3RyaW5nKiwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3JPYmplY3QgPiA+Ki8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2hlYWRlcnMpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fdHlwZSwgaW50IGluX3VpZCwgLypQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
LyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Byb2ZpbGUpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHlw
ZSwgaW50IGluX3VpZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhclByb2ZpbGVzKEVy
cm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEVy
cm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R2FyYmFnZShFcnJv
clN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0QnlIZWFwT2JqZWN0
SWQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0
R3JvdXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piov
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfcmVzdWx0KSA9IDA7CgogICAgcHJvdGVjdGVk
OgogICAgICAgIHZpcnR1YWwgflByb2ZpbGVyQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07Cgoj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykK
ICAgIGNsYXNzIFdvcmtlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGlu
X3ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBpbl9tZXNzYWdlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RUb1dvcmtlcihF
cnJvclN0cmluZyosIGludCBpbl93b3JrZXJJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNjb25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyosIGludCBpbl93b3JrZXJJZCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvY29ubmVjdFRvV29ya2VycyhFcnJvclN0cmluZyos
IGJvb2wgaW5fdmFsdWUpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+V29y
a2VyQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
CgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoQXBwbGljYXRpb25DYWNoZUNvbW1hbmRI
YW5kbGVyKiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckFnZW50KENTU0NvbW1hbmRIYW5kbGVyKiBjc3NBZ2VudCkgPSAwOwogICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQWdlbnQoQ29uc29sZUNvbW1hbmRIYW5kbGVyKiBjb25zb2xlQWdlbnQpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERPTUNvbW1hbmRIYW5kbGVyKiBkb21B
Z2VudCkgPSAwOwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQWdlbnQoRE9NRGVidWdnZXJDb21tYW5kSGFuZGxlciogZG9tRGVidWdnZXJB
Z2VudCkgPSAwOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoRE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyKiBkb21TdG9y
YWdlQWdlbnQpID0gMDsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQWdlbnQoRGF0YWJhc2VDb21tYW5kSGFuZGxlciogZGF0YWJhc2VBZ2VudCkgPSAw
OwojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChEZWJ1Z2dlckNvbW1hbmRI
YW5kbGVyKiBkZWJ1Z2dlckFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyQWdlbnQoRmlsZVN5c3RlbUNvbW1hbmRIYW5kbGVyKiBmaWxlU3lzdGVtQWdlbnQpID0gMDsK
I2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbmRleGVkREJDb21tYW5kSGFuZGxl
ciogaW5kZXhlZERCQWdlbnQpID0gMDsKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvckNvbW1hbmRIYW5kbGVy
KiBpbnNwZWN0b3JBZ2VudCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoTWVt
b3J5Q29tbWFuZEhhbmRsZXIqIG1lbW9yeUFnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJBZ2VudChOZXR3b3JrQ29tbWFuZEhhbmRsZXIqIG5ldHdvcmtBZ2VudCkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoUGFnZUNvbW1hbmRIYW5kbGVyKiBwYWdlQWdlbnQp
ID0gMDsKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckFnZW50KFByb2ZpbGVyQ29tbWFuZEhhbmRsZXIqIHByb2ZpbGVyQWdlbnQpID0gMDsK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckFnZW50KFJ1bnRpbWVDb21tYW5kSGFuZGxlciogcnVudGltZUFnZW50KSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChUaW1lbGluZUNvbW1hbmRIYW5kbGVyKiB0aW1l
bGluZUFnZW50KSA9IDA7CiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJBZ2VudChXb3JrZXJDb21tYW5kSGFuZGxlciogd29ya2VyQWdlbnQpID0gMDsKI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQoKCiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgpID0g
MDsKCiAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7CiAgICAgICAgUGFyc2VFcnJvciA9IDAsCiAg
ICAgICAgSW52YWxpZFJlcXVlc3QsCiAgICAgICAgTWV0aG9kTm90Rm91bmQsCiAgICAgICAgSW52
YWxpZFBhcmFtcywKICAgICAgICBJbnRlcm5hbEVycm9yLAogICAgICAgIFNlcnZlckVycm9yLAog
ICAgICAgIExhc3RFbnRyeSwKICAgIH07CgogICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNv
bnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihj
b25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0ID0gMDsK
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKICAg
IHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5n
KiByZXN1bHQpOwoKICAgIGVudW0gTWV0aG9kTmFtZXMgewogICAgICAgIGtJbnNwZWN0b3JfZW5h
YmxlQ21kLAogICAgICAgIGtJbnNwZWN0b3JfZGlzYWJsZUNtZCwKICAgICAgICBrTWVtb3J5X2dl
dERPTU5vZGVDb3VudENtZCwKICAgICAgICBrUGFnZV9lbmFibGVDbWQsCiAgICAgICAga1BhZ2Vf
ZGlzYWJsZUNtZCwKICAgICAgICBrUGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkQ21kLAog
ICAgICAgIGtQYWdlX3JlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWRDbWQsCiAgICAgICAga1Bh
Z2VfcmVsb2FkQ21kLAogICAgICAgIGtQYWdlX25hdmlnYXRlQ21kLAogICAgICAgIGtQYWdlX2dl
dENvb2tpZXNDbWQsCiAgICAgICAga1BhZ2VfZGVsZXRlQ29va2llQ21kLAogICAgICAgIGtQYWdl
X2dldFJlc291cmNlVHJlZUNtZCwKICAgICAgICBrUGFnZV9nZXRSZXNvdXJjZUNvbnRlbnRDbWQs
CiAgICAgICAga1BhZ2Vfc2VhcmNoSW5SZXNvdXJjZUNtZCwKICAgICAgICBrUGFnZV9zZWFyY2hJ
blJlc291cmNlc0NtZCwKICAgICAgICBrUGFnZV9zZXREb2N1bWVudENvbnRlbnRDbWQsCiAgICAg
ICAga1BhZ2Vfc2V0U2NyZWVuU2l6ZU92ZXJyaWRlQ21kLAogICAgICAgIGtQYWdlX3NldFNob3dQ
YWludFJlY3RzQ21kLAogICAgICAgIGtSdW50aW1lX2V2YWx1YXRlQ21kLAogICAgICAgIGtSdW50
aW1lX2NhbGxGdW5jdGlvbk9uQ21kLAogICAgICAgIGtSdW50aW1lX2dldFByb3BlcnRpZXNDbWQs
CiAgICAgICAga1J1bnRpbWVfcmVsZWFzZU9iamVjdENtZCwKICAgICAgICBrUnVudGltZV9yZWxl
YXNlT2JqZWN0R3JvdXBDbWQsCiAgICAgICAga1J1bnRpbWVfcnVuQ21kLAogICAgICAgIGtDb25z
b2xlX2VuYWJsZUNtZCwKICAgICAgICBrQ29uc29sZV9kaXNhYmxlQ21kLAogICAgICAgIGtDb25z
b2xlX2NsZWFyTWVzc2FnZXNDbWQsCiAgICAgICAga0NvbnNvbGVfc2V0TW9uaXRvcmluZ1hIUkVu
YWJsZWRDbWQsCiAgICAgICAga0NvbnNvbGVfYWRkSW5zcGVjdGVkTm9kZUNtZCwKICAgICAgICBr
Q29uc29sZV9hZGRJbnNwZWN0ZWRIZWFwT2JqZWN0Q21kLAogICAgICAgIGtOZXR3b3JrX2VuYWJs
ZUNtZCwKICAgICAgICBrTmV0d29ya19kaXNhYmxlQ21kLAogICAgICAgIGtOZXR3b3JrX3NldFVz
ZXJBZ2VudE92ZXJyaWRlQ21kLAogICAgICAgIGtOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnND
bWQsCiAgICAgICAga05ldHdvcmtfZ2V0UmVzcG9uc2VCb2R5Q21kLAogICAgICAgIGtOZXR3b3Jr
X2NhbkNsZWFyQnJvd3NlckNhY2hlQ21kLAogICAgICAgIGtOZXR3b3JrX2NsZWFyQnJvd3NlckNh
Y2hlQ21kLAogICAgICAgIGtOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNvb2tpZXNDbWQsCiAgICAg
ICAga05ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llc0NtZCwKICAgICAgICBrTmV0d29ya19zZXRD
YWNoZURpc2FibGVkQ21kLAojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICAgICAga0RhdGFi
YXNlX2VuYWJsZUNtZCwKICAgICAgICBrRGF0YWJhc2VfZGlzYWJsZUNtZCwKICAgICAgICBrRGF0
YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVzQ21kLAogICAgICAgIGtEYXRhYmFzZV9leGVjdXRl
U1FMQ21kLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKCiAgICAgICAga0luZGV4ZWREQl9lbmFibGVDbWQsCiAgICAgICAga0luZGV4
ZWREQl9kaXNhYmxlQ21kLAogICAgICAgIGtJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlTmFtZXNG
b3JGcmFtZUNtZCwKICAgICAgICBrSW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZUNtZCwKICAgICAg
ICBrSW5kZXhlZERCX3JlcXVlc3REYXRhQ21kLAojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCgogICAgICAgIGtET01TdG9yYWdlX2VuYWJsZUNtZCwKICAgICAgICBrRE9NU3RvcmFn
ZV9kaXNhYmxlQ21kLAogICAgICAgIGtET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzQ21k
LAogICAgICAgIGtET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtQ21kLAogICAgICAgIGtET01T
dG9yYWdlX3JlbW92ZURPTVN0b3JhZ2VJdGVtQ21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hl
X2dldEZyYW1lc1dpdGhNYW5pZmVzdHNDbWQsCiAgICAgICAga0FwcGxpY2F0aW9uQ2FjaGVfZW5h
YmxlQ21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWVDbWQs
CiAgICAgICAga0FwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lQ21k
LAojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgICAgICBrRmlsZVN5c3RlbV9lbmFibGVDbWQs
CiAgICAgICAga0ZpbGVTeXN0ZW1fZGlzYWJsZUNtZCwKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCiAgICAgICAga0RPTV9nZXREb2N1bWVudENtZCwKICAgICAgICBrRE9NX3JlcXVlc3RD
aGlsZE5vZGVzQ21kLAogICAgICAgIGtET01fcXVlcnlTZWxlY3RvckNtZCwKICAgICAgICBrRE9N
X3F1ZXJ5U2VsZWN0b3JBbGxDbWQsCiAgICAgICAga0RPTV9zZXROb2RlTmFtZUNtZCwKICAgICAg
ICBrRE9NX3NldE5vZGVWYWx1ZUNtZCwKICAgICAgICBrRE9NX3JlbW92ZU5vZGVDbWQsCiAgICAg
ICAga0RPTV9zZXRBdHRyaWJ1dGVWYWx1ZUNtZCwKICAgICAgICBrRE9NX3NldEF0dHJpYnV0ZXNB
c1RleHRDbWQsCiAgICAgICAga0RPTV9yZW1vdmVBdHRyaWJ1dGVDbWQsCiAgICAgICAga0RPTV9n
ZXRFdmVudExpc3RlbmVyc0Zvck5vZGVDbWQsCiAgICAgICAga0RPTV9nZXRPdXRlckhUTUxDbWQs
CiAgICAgICAga0RPTV9zZXRPdXRlckhUTUxDbWQsCiAgICAgICAga0RPTV9wZXJmb3JtU2VhcmNo
Q21kLAogICAgICAgIGtET01fZ2V0U2VhcmNoUmVzdWx0c0NtZCwKICAgICAgICBrRE9NX2Rpc2Nh
cmRTZWFyY2hSZXN1bHRzQ21kLAogICAgICAgIGtET01fcmVxdWVzdE5vZGVDbWQsCiAgICAgICAg
a0RPTV9zZXRJbnNwZWN0TW9kZUVuYWJsZWRDbWQsCiAgICAgICAga0RPTV9oaWdobGlnaHRSZWN0
Q21kLAogICAgICAgIGtET01faGlnaGxpZ2h0Tm9kZUNtZCwKICAgICAgICBrRE9NX2hpZGVIaWdo
bGlnaHRDbWQsCiAgICAgICAga0RPTV9oaWdobGlnaHRGcmFtZUNtZCwKICAgICAgICBrRE9NX3B1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZENtZCwKICAgICAgICBrRE9NX3Jlc29sdmVOb2RlQ21kLAog
ICAgICAgIGtET01fZ2V0QXR0cmlidXRlc0NtZCwKICAgICAgICBrRE9NX21vdmVUb0NtZCwKICAg
ICAgICBrRE9NX3NldFRvdWNoRW11bGF0aW9uRW5hYmxlZENtZCwKICAgICAgICBrRE9NX3VuZG9D
bWQsCiAgICAgICAga0RPTV9yZWRvQ21kLAogICAgICAgIGtET01fbWFya1VuZG9hYmxlU3RhdGVD
bWQsCiAgICAgICAga0NTU19lbmFibGVDbWQsCiAgICAgICAga0NTU19kaXNhYmxlQ21kLAogICAg
ICAgIGtDU1NfZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGVDbWQsCiAgICAgICAga0NTU19nZXRJbmxp
bmVTdHlsZXNGb3JOb2RlQ21kLAogICAgICAgIGtDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGVD
bWQsCiAgICAgICAga0NTU19nZXRBbGxTdHlsZVNoZWV0c0NtZCwKICAgICAgICBrQ1NTX2dldFN0
eWxlU2hlZXRDbWQsCiAgICAgICAga0NTU19nZXRTdHlsZVNoZWV0VGV4dENtZCwKICAgICAgICBr
Q1NTX3NldFN0eWxlU2hlZXRUZXh0Q21kLAogICAgICAgIGtDU1Nfc2V0UHJvcGVydHlUZXh0Q21k
LAogICAgICAgIGtDU1NfdG9nZ2xlUHJvcGVydHlDbWQsCiAgICAgICAga0NTU19zZXRSdWxlU2Vs
ZWN0b3JDbWQsCiAgICAgICAga0NTU19hZGRSdWxlQ21kLAogICAgICAgIGtDU1NfZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllc0NtZCwKICAgICAgICBrQ1NTX3N0YXJ0U2VsZWN0b3JQcm9maWxlckNt
ZCwKICAgICAgICBrQ1NTX3N0b3BTZWxlY3RvclByb2ZpbGVyQ21kLAogICAgICAgIGtUaW1lbGlu
ZV9zdGFydENtZCwKICAgICAgICBrVGltZWxpbmVfc3RvcENtZCwKICAgICAgICBrVGltZWxpbmVf
c2V0SW5jbHVkZU1lbW9yeURldGFpbHNDbWQsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAgICAga0RlYnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRpb25DbWQsCiAgICAgICAga0Rl
YnVnZ2VyX3N1cHBvcnRzTmF0aXZlQnJlYWtwb2ludHNDbWQsCiAgICAgICAga0RlYnVnZ2VyX2Vu
YWJsZUNtZCwKICAgICAgICBrRGVidWdnZXJfZGlzYWJsZUNtZCwKICAgICAgICBrRGVidWdnZXJf
c2V0QnJlYWtwb2ludHNBY3RpdmVDbWQsCiAgICAgICAga0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRC
eVVybENtZCwKICAgICAgICBrRGVidWdnZXJfc2V0QnJlYWtwb2ludENtZCwKICAgICAgICBrRGVi
dWdnZXJfcmVtb3ZlQnJlYWtwb2ludENtZCwKICAgICAgICBrRGVidWdnZXJfY29udGludWVUb0xv
Y2F0aW9uQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zdGVwT3ZlckNtZCwKICAgICAgICBrRGVidWdn
ZXJfc3RlcEludG9DbWQsCiAgICAgICAga0RlYnVnZ2VyX3N0ZXBPdXRDbWQsCiAgICAgICAga0Rl
YnVnZ2VyX3BhdXNlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9yZXN1bWVDbWQsCiAgICAgICAga0Rl
YnVnZ2VyX3NlYXJjaEluQ29udGVudENtZCwKICAgICAgICBrRGVidWdnZXJfY2FuU2V0U2NyaXB0
U291cmNlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRTY3JpcHRTb3VyY2VDbWQsCiAgICAgICAg
a0RlYnVnZ2VyX2dldFNjcmlwdFNvdXJjZUNtZCwKICAgICAgICBrRGVidWdnZXJfZ2V0RnVuY3Rp
b25EZXRhaWxzQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRQYXVzZU9uRXhjZXB0aW9uc0NtZCwK
ICAgICAgICBrRGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZUNtZCwKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoK
ICAgICAgICBrRE9NRGVidWdnZXJfc2V0RE9NQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVi
dWdnZXJfcmVtb3ZlRE9NQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfc2V0RXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RPTURlYnVnZ2VyX3JlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9zZXRJbnN0cnVtZW50
YXRpb25CcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9yZW1vdmVJbnN0cnVtZW50
YXRpb25CcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50
Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50Q21kLAojZW5kaWYg
Ly8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgogICAgICAgIGtQcm9maWxlcl9jYXVzZXNSZWNvbXBpbGF0aW9uQ21kLAogICAgICAg
IGtQcm9maWxlcl9pc1NhbXBsaW5nQ21kLAogICAgICAgIGtQcm9maWxlcl9oYXNIZWFwUHJvZmls
ZXJDbWQsCiAgICAgICAga1Byb2ZpbGVyX2VuYWJsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfZGlz
YWJsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfc3RhcnRDbWQsCiAgICAgICAga1Byb2ZpbGVyX3N0
b3BDbWQsCiAgICAgICAga1Byb2ZpbGVyX2dldFByb2ZpbGVIZWFkZXJzQ21kLAogICAgICAgIGtQ
cm9maWxlcl9nZXRQcm9maWxlQ21kLAogICAgICAgIGtQcm9maWxlcl9yZW1vdmVQcm9maWxlQ21k
LAogICAgICAgIGtQcm9maWxlcl9jbGVhclByb2ZpbGVzQ21kLAogICAgICAgIGtQcm9maWxlcl90
YWtlSGVhcFNuYXBzaG90Q21kLAogICAgICAgIGtQcm9maWxlcl9jb2xsZWN0R2FyYmFnZUNtZCwK
ICAgICAgICBrUHJvZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWRDbWQsCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICAgICAg
a1dvcmtlcl9zZXRXb3JrZXJJbnNwZWN0aW9uRW5hYmxlZENtZCwKICAgICAgICBrV29ya2VyX3Nl
bmRNZXNzYWdlVG9Xb3JrZXJDbWQsCiAgICAgICAga1dvcmtlcl9jb25uZWN0VG9Xb3JrZXJDbWQs
CiAgICAgICAga1dvcmtlcl9kaXNjb25uZWN0RnJvbVdvcmtlckNtZCwKICAgICAgICBrV29ya2Vy
X3NldEF1dG9jb25uZWN0VG9Xb3JrZXJzQ21kLAojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgog
ICAgfTsKCiAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZE5hbWVzW107Cn07Cgp9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcl9oKQoKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128073</attachid>
            <date>2012-02-21 16:16:58 -0800</date>
            <delta_ts>2012-02-21 16:16:58 -0800</delta_ts>
            <desc>old InspectorFrontend.h</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>20006</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIKI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgojaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7CgpjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CgovLyBCb3RoIEluc3BlY3Rvck9iamVjdCBhbmQgSW5zcGVjdG9y
QXJyYXkgbWF5IG9yIG1heSBub3QgYmUgZGVjbGFyZWQgYXQgdGhpcyBwb2ludCBhcyBkZWZpbmVk
IGJ5IEVOQUJMRURfSU5TUEVDVE9SLgovLyBEb3VibGUtY2hlY2sgd2UgaGF2ZSB0aGVtIGF0IGxl
YXN0IGFzIGZvcndhcmQgZGVjbGFyYXRpb24uCmNsYXNzIEluc3BlY3RvckFycmF5OwpjbGFzcyBJ
bnNwZWN0b3JPYmplY3Q7Cgp0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKCiNpZiBFTkFCTEUo
SU5TUEVDVE9SKQoKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgewpwdWJsaWM6CiAgICBJbnNwZWN0
b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKCgogICAgY2xhc3MgSW5zcGVj
dG9yIHsKICAgIHB1YmxpYzoKICAgICAgICBJbnNwZWN0b3IoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAg
ICAgICB2b2lkIGluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihp
bnQgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRp
ZERlc3Ryb3lXb3JrZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAm
bV9pbnNwZWN0b3I7IH0KCiAgICBjbGFzcyBNZW1vcnkgewogICAgcHVibGljOgogICAgICAgIE1l
bW9yeShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQoKICAgIGNsYXNzIFBhZ2Ug
ewogICAgcHVibGljOgogICAgICAgIFBhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVk
KGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoZG91YmxlIHRp
bWVzdGFtcCk7CiAgICAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSk7
CiAgICAgICAgdm9pZCBmcmFtZURldGFjaGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJu
ICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1lIHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50
aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAmbV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29u
c29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVk
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgbWVzc2FnZVJl
cGVhdENvdW50VXBkYXRlZChpbnQgY291bnQpOwogICAgICAgIHZvaWQgbWVzc2FnZXNDbGVhcmVk
KCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIENvbnNvbGUqIGNvbnNvbGUoKSB7IHJldHVybiAmbV9jb25zb2xlOyB9CgogICAgY2xhc3Mg
TmV0d29yayB7CiAgICBwdWJsaWM6CiAgICAgICAgTmV0d29yayhJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgcmVxdWVzdFdp
bGxCZVNlbnQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlk
JiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVu
dFVSTCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpDb25zb2xlOjpDYWxsRnJhbWUgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gc3RhY2tUcmFjZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNw
b25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAg
ICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAgICAgICAgdm9p
ZCByZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29y
azo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1l
c3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0
cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZvaWQgZGF0
YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGlu
dCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoLypjb25z
dCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoLypjb25z
dCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCwgY29uc3QgYm9v
bCogY29uc3QgY2FuY2VsZWQpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21NZW1vcnlD
YWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8g
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2Fk
ZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6Oklu
aXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRXaWxsU2Vu
ZEhhbmRzaGFrZVJlcXVlc3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElk
JiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
Ki8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQo
Lypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDbG9z
ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTmV0d29yayogbmV0d29yaygpIHsgcmV0
dXJuICZtX25ldHdvcms7IH0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRGF0
YWJhc2UgewogICAgcHVibGljOgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFz
ZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rp
b25TdWNjZWVkZWQoaW50IHRyYW5zYWN0aW9uSWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nID4gPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5hbWVz
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3RvclZhbHVlID4gPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2Fj
dGlvbkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHNxbEVycm9yKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0YWJhc2U7IH0K
CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICBjbGFzcyBJbmRleGVkREIgewogICAgcHVibGljOgogICAgICAgIEluZGV4ZWREQihJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAg
ICAgIHZvaWQgZGF0YWJhc2VOYW1lc0xvYWRlZChkb3VibGUgcmVxdWVzdElkLCAvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6U2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1l
cz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJh
c2VOYW1lcyk7CiAgICAgICAgdm9pZCBkYXRhYmFzZUxvYWRlZChpbnQgcmVxdWVzdElkLCAvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVz
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMp
OwogICAgICAgIHZvaWQgb2JqZWN0U3RvcmVEYXRhTG9hZGVkKGludCByZXF1ZXN0SWQsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVu
dHJ5ID4gPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG9iamVjdFN0b3JlRGF0YUVudHJp
ZXMsIGJvb2wgaGFzTW9yZSk7CiAgICAgICAgdm9pZCBpbmRleERhdGFMb2FkZWQoaW50IHJlcXVl
c3RJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhl
ZERCOjpEYXRhRW50cnkgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5kZXhEYXRh
RW50cmllcywgYm9vbCBoYXNNb3JlKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5kZXhlZERCKiBpbmRleGVkZGIoKSB7IHJldHVybiAm
bV9pbmRleGVkZGI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNs
YXNzIERPTVN0b3JhZ2UgewogICAgcHVibGljOgogICAgICAgIERPTVN0b3JhZ2UoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lk
IGFkZERPTVN0b3JhZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET01TdG9yYWdlOjpFbnRy
eT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9pZCB1
cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdlKCkg
eyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgewog
ICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXNVcGRhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQm
Ki8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQg
c3RhdHVzKTsKICAgICAgICB2b2lkIG5ldHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGlu
ZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uY2FjaGUoKSB7IHJldHVybiAmbV9hcHBs
aWNhdGlvbmNhY2hlOyB9CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRmlsZVN5
c3RlbSB7CiAgICBwdWJsaWM6CiAgICAgICAgRmlsZVN5c3RlbShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBGaWxlU3lzdGVtKiBmaWxlc3lzdGVt
KCkgeyByZXR1cm4gJm1fZmlsZXN5c3RlbTsgfQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RF
TSkKICAgIGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb2N1
bWVudFVwZGF0ZWQoKTsKICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpET006Ok5vZGUgPiA+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmli
dXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICAgICB2b2lkIGlubGluZVN0eWxlSW52YWxpZGF0ZWQoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxpbnQgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gbm9kZUlkcyk7CiAgICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKTsKICAgICAgICB2b2lkIGNoaWxkTm9k
ZUNvdW50VXBkYXRlZChpbnQgbm9kZUlkLCBpbnQgY2hpbGROb2RlQ291bnQpOwogICAgICAgIHZv
aWQgY2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZpb3VzTm9kZUlk
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbm9kZSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJl
bnROb2RlSWQsIGludCBub2RlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBET00qIGRvbSgpIHsgcmV0dXJuICZtX2RvbTsgfQoKICAg
IGNsYXNzIENTUyB7CiAgICBwdWJsaWM6CiAgICAgICAgQ1NTKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZWRpYVF1ZXJ5
UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoLypjb25zdCBU
eXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0SWQmKi8gY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBDU1MqIGNzcygpIHsgcmV0dXJuICZtX2NzczsgfQoKICAgIGNsYXNzIFRpbWVsaW5lIHsK
ICAgIHB1YmxpYzoKICAgICAgICBUaW1lbGluZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZXZlbnRSZWNvcmRlZCgvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBUaW1lbGluZSogdGltZWxpbmUoKSB7IHJldHVy
biAmbV90aW1lbGluZTsgfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xh
c3MgRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERlYnVnZ2VyKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBnbG9i
YWxPYmplY3RDbGVhcmVkKCk7CiAgICAgICAgdm9pZCBzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OlNjcmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRM
aW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNv
bnN0IFN0cmluZyYgc291cmNlTWFwVVJMKTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFy
c2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAg
ICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGxvY2F0aW9uKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JlYXNv
bicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IHBhdXNlZC4KICAgICAgICBzdHJ1Y3Qg
UmVhc29uIHsKICAgICAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgICAgIFhIUiA9IDUs
CiAgICAgICAgICAgICAgICBET00gPSA2MCwKICAgICAgICAgICAgICAgIEV2ZW50TGlzdGVuZXIg
PSA2MSwKICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiA9IDYyLAogICAgICAgICAgICAgICAgT3Ro
ZXIgPSAyNSwKICAgICAgICAgICAgfTsKICAgICAgICB9OyAvLyBzdHJ1Y3QgUmVhc29uCgogICAg
ICAgIHZvaWQgcGF1c2VkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWUgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
Y2FsbEZyYW1lcywgLypSZWFzb246OkVudW0qLyBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAgIHZvaWQgcmVzdW1lZCgpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEZWJ1
Z2dlciogZGVidWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NRGVidWdnZXIoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAg
ICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NRGVi
dWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7IH0KCiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAgICAgIFByb2ZpbGVyKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBhZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFk
ZXIpOwogICAgICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1bmsoaW50IHVpZCwgY29uc3QgU3Ry
aW5nJiBjaHVuayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFwU25hcHNob3QoaW50IHVpZCk7CiAg
ICAgICAgdm9pZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpOwogICAgICAg
IHZvaWQgcmVzZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQgcmVwb3J0SGVhcFNuYXBzaG90UHJv
Z3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVyKiBwcm9maWxlcigpIHsgcmV0dXJu
ICZtX3Byb2ZpbGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNp
ZiBFTkFCTEUoV09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJsaWM6CiAgICAgICAg
V29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5n
JiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lkIHdvcmtlclRlcm1p
bmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3Jr
ZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAg
ICAgICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyBy
ZXR1cm4gJm1fd29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpwcml2YXRlOgog
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIEluc3BlY3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9yeSBtX21lbW9yeTsKICAgIFBhZ2Ug
bV9wYWdlOwogICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBDb25zb2xlIG1fY29uc29sZTsKICAg
IE5ldHdvcmsgbV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIERhdGFiYXNl
IG1fZGF0YWJhc2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICBJbmRleGVkREIgbV9pbmRleGVkZGI7CiNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIERPTVN0b3JhZ2UgbV9kb21zdG9yYWdlOwogICAgQXBw
bGljYXRpb25DYWNoZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CiAgICBGaWxlU3lzdGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RF
TSkKICAgIERPTSBtX2RvbTsKICAgIENTUyBtX2NzczsKICAgIFRpbWVsaW5lIG1fdGltZWxpbmU7
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERlYnVnZ2VyIG1fZGVidWdnZXI7
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICBQcm9maWxlciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIFdvcmtlciBtX3dvcmtlcjsKI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQp9OwoKI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCgp9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128074</attachid>
            <date>2012-02-21 16:17:18 -0800</date>
            <delta_ts>2012-02-21 16:17:18 -0800</delta_ts>
            <desc>old InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.base.cpp</filename>
            <type>text/plain</type>
            <size>43934</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2lmIEVOQUJMRShJTlNQRUNU
T1IpCgojaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgojaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgLCBtX2luZGV4ZWRkYihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVtKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwg
bV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoj
aWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJZCwgY29u
c3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJ
bnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAg
ICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJ
bnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNwZWN0TWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsKICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQgaWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkluc3BlY3Rv
ci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7CiAgICBk
aWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3JrZXJNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3Rv
cjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNwZWN0b3Iu
ZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1w
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50RmlyZWRN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZpcmVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRp
bWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBsb2FkRXZl
bnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFtZU5hdmln
YXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZyYW1l
TmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5hdmlnYXRl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFtZSIsIGZy
YW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJhbWVOYXZp
Z2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OlBhZ2U6OmZyYW1lRGV0YWNoZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJ
ZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGZyYW1lRGV0YWNoZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZy
YW1lRGV0YWNoZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmZyYW1lRGV0YWNo
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgZnJhbWVEZXRhY2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGZyYW1l
RGV0YWNoZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkNvbnNvbGU6Om1lc3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OkNvbnNvbGVNZXNzYWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlQWRkZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIG1lc3NhZ2VBZGRlZE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIkNvbnNvbGUubWVzc2FnZUFkZGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoIm1lc3NhZ2UiLCBtZXNzYWdlKTsKICAgIG1lc3NhZ2VBZGRl
ZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VBZGRlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Q29uc29sZTo6bWVzc2FnZVJlcGVhdENv
dW50VXBkYXRlZChpbnQgY291bnQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJDb25zb2xlLm1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldE51bWJlcigiY291bnQiLCBjb3VudCk7CiAgICBtZXNzYWdlUmVwZWF0
Q291bnRVcGRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwog
ICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZVJlcGVhdENvdW50VXBk
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
Q29uc29sZTo6bWVzc2FnZXNDbGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZXNDbGVhcmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBt
ZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3Nh
Z2VzQ2xlYXJlZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2Fn
ZXNDbGVhcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0V2lsbEJlU2VudCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklk
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRv
dWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlh
dG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNhbGxGcmFtZSA+ID4q
LyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZWRpcmVjdFJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
V2lsbEJlU2VudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVz
dFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RX
aWxsQmVTZW50Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJl
cXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9h
ZGVySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1l
bnRVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAo
c3RhY2tUcmFjZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwg
c3RhY2tUcmFjZSk7CiAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgicmVkaXJlY3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
cmVxdWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2Vu
dE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0
d29yazo6cmVxdWVzdFNlcnZlZEZyb21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsK
ICAgIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0
U2VydmVkRnJvbUNhY2hlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpOZXR3b3JrOjpyZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8q
Y29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9h
ZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6RW51bSovIGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2Up
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgdHlwZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVz
cG9uc2UiLCByZXNwb25zZSk7CiAgICByZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQocmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6ZGF0YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91Ymxl
IHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBkYXRhUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJOZXR3b3JrLmRhdGFSZWNlaXZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigiZGF0YUxlbmd0aCIsIGRhdGFMZW5ndGgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1i
ZXIoImVuY29kZWREYXRhTGVuZ3RoIiwgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgZGF0YVJlY2Vp
dmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGF0YVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpsb2FkaW5nRmluaXNo
ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBsb2FkaW5nRmluaXNoZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsu
bG9hZGluZ0ZpbmlzaGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigi
dGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6bG9hZGluZ0ZhaWxlZCgvKmNvbnN0IFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRv
dWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25z
dCBjYW5jZWxlZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9hZGluZ0ZhaWxlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZhaWxlZCIpOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZXJyb3JUZXh0IiwgZXJyb3JUZXh0KTsKICAgIGlm
IChjYW5jZWxlZCkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImNhbmNlbGVkIiwg
KmNhbmNlbGVkKTsKICAgIGxvYWRpbmdGYWlsZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIs
IHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChsb2Fk
aW5nRmFpbGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypj
b25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmlu
ZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c291cmNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0U2VydmVkRnJvbU1l
bW9yeUNhY2hlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29y
ay5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoImxvYWRlcklkIiwgbG9hZGVySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
ImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
InRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgiaW5p
dGlhdG9yIiwgaW5pdGlhdG9yKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNvdXJj
ZSIsIHJlc291cmNlKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChyZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRX
aWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVx
dWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRXaWxsU2VuZEhhbmRz
aGFrZVJlcXVlc3QiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
cmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1l
c3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3Qi
LCByZXF1ZXN0KTsKICAgIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1
cmwpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tldENyZWF0ZWRNZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldENyZWF0ZWRNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElk
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNv
Y2tldENsb3NlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHdlYlNvY2tldENsb3NlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgd2ViU29ja2V0Q2xvc2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
TmV0d29yay53ZWJTb2NrZXRDbG9zZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgd2ViU29ja2V0Q2xvc2VkTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQod2ViU29ja2V0Q2xvc2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRh
dGFiYXNlOjphZGREYXRhYmFzZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpE
YXRhYmFzZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFkZERhdGFiYXNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBhZGREYXRhYmFzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwg
IkRhdGFiYXNlLmFkZERhdGFiYXNlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoImRhdGFiYXNlIiwgZGF0YWJhc2UpOwogICAgYWRkRGF0YWJhc2VNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChhZGREYXRhYmFzZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0YWJhc2U6OnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGlu
dCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZyA+
ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb2x1bW5OYW1lcywgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JWYWx1ZSA+ID4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbFRyYW5z
YWN0aW9uU3VjY2VlZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
cWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFi
YXNlLnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIiwgY29sdW1uTmFtZXMpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXRBcnJheSgidmFsdWVzIiwgdmFsdWVzKTsKICAgIHNxbFRyYW5zYWN0aW9uU3Vj
Y2VlZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWRNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNl
OjpzcWxUcmFuc2FjdGlvbkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHNxbEVycm9yKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxU
cmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFz
ZS5zcWxUcmFuc2FjdGlvbkZhaWxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJ0cmFuc2FjdGlvbklkIiwgdHJhbnNhY3Rpb25JZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiLCBzcWxFcnJvcik7CiAgICBzcWxUcmFuc2FjdGlvbkZh
aWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkluZGV4ZWRE
Qjo6ZGF0YWJhc2VOYW1lc0xvYWRlZChkb3VibGUgcmVxdWVzdElkLCAvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkluZGV4ZWREQjo6U2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1lcz4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1l
cykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2VOYW1lc0xvYWRlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YWJhc2VOYW1lc0xvYWRlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkluZGV4ZWREQi5kYXRhYmFzZU5hbWVzTG9hZGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInJlcXVlc3RJZCIs
IHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic2VjdXJpdHlPcmlnaW5X
aXRoRGF0YWJhc2VOYW1lcyIsIHNlY3VyaXR5T3JpZ2luV2l0aERhdGFiYXNlTmFtZXMpOwogICAg
ZGF0YWJhc2VOYW1lc0xvYWRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRhdGFiYXNlTmFtZXNM
b2FkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkluZGV4ZWREQjo6ZGF0YWJhc2VMb2FkZWQoaW50IHJlcXVlc3RJZCwgLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpJbmRleGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZUxvYWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgZGF0YWJhc2VMb2FkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJJbmRleGVkREIuZGF0YWJhc2VMb2FkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0T2JqZWN0KCJkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMiLCBkYXRhYmFzZVdpdGhPYmpl
Y3RTdG9yZXMpOwogICAgZGF0YWJhc2VMb2FkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIs
IHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkYXRh
YmFzZUxvYWRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6SW5kZXhlZERCOjpvYmplY3RTdG9yZURhdGFMb2FkZWQoaW50IHJlcXVlc3RJZCwgLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpEYXRh
RW50cnkgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gb2JqZWN0U3RvcmVEYXRhRW50
cmllcywgYm9vbCBoYXNNb3JlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RT
dG9yZURhdGFMb2FkZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIG9i
amVjdFN0b3JlRGF0YUxvYWRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkluZGV4ZWRE
Qi5vYmplY3RTdG9yZURhdGFMb2FkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoIm9iamVjdFN0b3JlRGF0YUVudHJpZXMiLCBvYmplY3RTdG9yZURhdGFFbnRyaWVzKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaGFzTW9yZSIsIGhhc01vcmUpOwogICAgb2Jq
ZWN0U3RvcmVEYXRhTG9hZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQob2JqZWN0U3RvcmVEYXRh
TG9hZGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpJbmRleGVkREI6OmluZGV4RGF0YUxvYWRlZChpbnQgcmVxdWVzdElkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkRhdGFFbnRyeSA+ID4q
LyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbmRleERhdGFFbnRyaWVzLCBib29sIGhhc01v
cmUpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluZGV4RGF0YUxvYWRlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaW5kZXhEYXRhTG9hZGVkTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5kZXhlZERCLmluZGV4RGF0YUxvYWRlZCIpOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiaW5kZXhEYXRhRW50cmllcyIsIGluZGV4RGF0
YUVudHJpZXMpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJoYXNNb3JlIiwgaGFzTW9y
ZSk7CiAgICBpbmRleERhdGFMb2FkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbmRleERhdGFM
b2FkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTVN0b3JhZ2U6OmFkZERPTVN0
b3JhZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET01TdG9yYWdlOjpFbnRyeT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYWRkRE9NU3RvcmFnZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgYWRkRE9NU3RvcmFnZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2Uu
YWRkRE9NU3RvcmFnZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJzdG9yYWdlIiwgc3RvcmFnZSk7CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoYWRkRE9NU3RvcmFnZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6RE9NU3RvcmFnZTo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlk
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cGRhdGVET01TdG9yYWdlTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NU3RvcmFnZS51cGRhdGVET01TdG9yYWdlIik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJ
ZCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRE9N
U3RvcmFnZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6QXBwbGljYXRpb25DYWNoZTo6YXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoLypjb25z
dCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGludCBzdGF0dXMpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkFwcGxpY2F0aW9uQ2FjaGUuYXBwbGljYXRpb25D
YWNoZVN0YXR1c1VwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm1h
bmlmZXN0VVJMIiwgbWFuaWZlc3RVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0
YXR1cyIsIHN0YXR1cyk7CiAgICBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpBcHBsaWNhdGlvbkNhY2hl
OjpuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLm5ldHdvcmtTdGF0ZVVwZGF0ZWQiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImlzTm93T25saW5lIiwgaXNOb3dPbmxp
bmUpOwogICAgbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG5ldHdv
cmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCgojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6RE9NOjpkb2N1bWVudFVwZGF0ZWQoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkb2N1bWVudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGRvY3VtZW50VXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5kb2N1
bWVudFVwZGF0ZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRvY3Vt
ZW50VXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RE9NOjpzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlID4gPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRDaGls
ZE5vZGVzTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRDaGlsZE5v
ZGVzTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMiKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJ
ZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAgIHNldENo
aWxkTm9kZXNNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZU1v
ZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGludCBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0
cmlidXRlUmVtb3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0
cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRyaWJ1dGVS
ZW1vdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJ
ZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwog
ICAgYXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZVJlbW92
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRP
TTo6aW5saW5lU3R5bGVJbnZhbGlkYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PGludCA+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmlubGluZVN0eWxlSW52YWxpZGF0ZWQiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlSWRzIiwgbm9kZUlkcyk7CiAg
ICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5saW5lU3R5
bGVJbnZhbGlkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6RE9NOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiBjaGFyYWN0ZXJEYXRhKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGFyYWN0
ZXJEYXRhTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNo
YXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5jaGFy
YWN0ZXJEYXRhTW9kaWZpZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJjaGFy
YWN0ZXJEYXRhIiwgY2hhcmFjdGVyRGF0YSk7CiAgICBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6Y2hpbGROb2RlQ291bnRV
cGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCkKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gY2hpbGROb2RlQ291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJET00uY2hpbGROb2RlQ291bnRVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCBjaGlsZE5vZGVDb3VudCk7CiAgICBjaGls
ZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVDb3VudFVw
ZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6Y2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZpb3VzTm9k
ZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbm9kZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGRO
b2RlSW5zZXJ0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxk
Tm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoaWxkTm9kZUlu
c2VydGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInBhcmVu
dE5vZGVJZCIsIHBhcmVudE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicHJl
dmlvdXNOb2RlSWQiLCBwcmV2aW91c05vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnROb2RlSWQs
IGludCBub2RlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxkTm9kZVJlbW92
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9kZVJlbW92
ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlUmVtb3ZlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJlbnROb2RlSWQiLCBw
YXJlbnROb2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJ
ZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY2hpbGROb2Rl
UmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6Q1NTOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkNTUy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIpOwogICAgaWYgKG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNTUzo6c3R5bGVTaGVldENo
YW5nZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0SWQmKi8gY29uc3QgU3Ry
aW5nJiBzdHlsZVNoZWV0SWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0eWxlU2hl
ZXRDaGFuZ2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzdHlsZVNo
ZWV0Q2hhbmdlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkNTUy5zdHlsZVNoZWV0Q2hh
bmdlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzdHlsZVNo
ZWV0SWQiLCBzdHlsZVNoZWV0SWQpOwogICAgc3R5bGVTaGVldENoYW5nZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChzdHlsZVNoZWV0Q2hhbmdlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6VGltZWxpbmU6OmV2ZW50UmVjb3JkZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVjb3JkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVu
dFJlY29yZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBldmVudFJl
Y29yZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiVGltZWxpbmUuZXZlbnRSZWNvcmRl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZWNvcmQiLCBy
ZWNvcmQpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFy
YW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGV2ZW50UmVj
b3JkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpnbG9iYWxPYmplY3RD
bGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2xvYmFsT2JqZWN0Q2xlYXJl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZ2xvYmFsT2JqZWN0Q2xl
YXJlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLmdsb2JhbE9iamVjdENs
ZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGdsb2JhbE9iamVj
dENsZWFyZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRlYnVnZ2VyOjpzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OlNjcmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1u
LCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNl
TWFwVVJMKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQYXJzZWRNZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElkKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigic3RhcnRDb2x1bW4iLCBzdGFydENvbHVtbik7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigiZW5kTGluZSIsIGVuZExpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuZENv
bHVtbiIsIGVuZENvbHVtbik7CiAgICBpZiAoaXNDb250ZW50U2NyaXB0KQogICAgICAgIHBhcmFt
c09iamVjdC0+c2V0Qm9vbGVhbigiaXNDb250ZW50U2NyaXB0IiwgKmlzQ29udGVudFNjcmlwdCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic291cmNlTWFwVVJMIiwgc291cmNlTWFwVVJM
KTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdFBhcnNlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdn
ZXI6OnNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
c2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0RmFpbGVk
VG9QYXJzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0RmFp
bGVkVG9QYXJzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdEZh
aWxlZFRvUGFyc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
dXJsIiwgdXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBz
Y3JpcHRTb3VyY2UpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0
YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5lIiwgZXJyb3JM
aW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvck1lc3NhZ2UiLCBlcnJvck1l
c3NhZ2UpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNj
cmlwdEZhaWxlZFRvUGFyc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpicmVha3BvaW50UmVzb2x2ZWQoLypjb25zdCBUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRl
YnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBicmVha3BvaW50SWQpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoImxvY2F0aW9uIiwgbG9jYXRpb24pOwogICAgYnJlYWtwb2ludFJlc29s
dmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYnJlYWtwb2ludFJlc29sdmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6cGF1c2Vk
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpD
YWxsRnJhbWUgPiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgLypS
ZWFzb246OkVudW0qLyBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhdXNlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGF1c2VkTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiLCAiRGVidWdnZXIucGF1c2VkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheSgiY2FsbEZyYW1lcyIsIGNhbGxGcmFtZXMpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlYXNvbiIsIHJlYXNvbik7CiAgICBpZiAoZGF0YSkKICAgICAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgiZGF0YSIsIGRhdGEpOwogICAgcGF1c2VkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQocGF1c2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6cmVzdW1lZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VtZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
c3VtZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5yZXN1bWVkIik7CiAg
ICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXN1bWVkTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpQcm9maWxlcjo6YWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gaGVhZGVyKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGRQcm9maWxl
SGVhZGVyTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRQcm9maWxl
SGVhZGVyTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIuYWRkUHJvZmlsZUhl
YWRlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJoZWFkZXIi
LCBoZWFkZXIpOwogICAgYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFk
ZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OlByb2ZpbGVyOjphZGRIZWFwU25hcHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBT
dHJpbmcmIGNodW5rKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGRIZWFwU25hcHNo
b3RDaHVua01lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkSGVhcFNu
YXBzaG90Q2h1bmtNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQcm9maWxlci5hZGRIZWFw
U25hcHNob3RDaHVuayIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJ1aWQiLCB1aWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImNodW5rIiwgY2h1bmsp
OwogICAgYWRkSGVhcFNuYXBzaG90Q2h1bmtNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGRIZWFw
U25hcHNob3RDaHVua01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6UHJvZmlsZXI6OmZpbmlzaEhlYXBTbmFwc2hvdChpbnQgdWlkKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGZpbmlzaEhlYXBTbmFwc2hvdE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIlByb2ZpbGVyLmZpbmlzaEhlYXBTbmFwc2hvdCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ1aWQiLCB1aWQpOwogICAgZmluaXNoSGVhcFNu
YXBzaG90TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZmluaXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6c2V0
UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmlsaW5nKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiUHJvZmlsZXIuc2V0UmVjb3JkaW5nUHJvZmlsZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0Qm9vbGVhbigiaXNQcm9maWxpbmciLCBpc1Byb2ZpbGluZyk7CiAgICBzZXRS
ZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc2V0UmVjb3JkaW5nUHJvZmls
ZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJv
ZmlsZXI6OnJlc2V0UHJvZmlsZXMoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNl
dFByb2ZpbGVzTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNldFBy
b2ZpbGVzTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIucmVzZXRQcm9maWxl
cyIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzZXRQcm9maWxlc01l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmls
ZXI6OnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90YWwpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXBvcnRIZWFwU25hcHNob3RQcm9n
cmVzc01lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLnJlcG9ydEhlYXBTbmFw
c2hvdFByb2dyZXNzIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
ImRvbmUiLCBkb25lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0b3RhbCIsIHRvdGFs
KTsKICAgIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykK
CnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oldvcmtlcjo6d29ya2VyQ3JlYXRlZChpbnQgd29ya2Vy
SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGluc3BlY3RvckNvbm5lY3RlZCkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gd29ya2VyQ3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgd29ya2VyQ3JlYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIldvcmtlci53b3JrZXJDcmVhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXROdW1iZXIoIndvcmtlcklkIiwgd29ya2VySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoInVybCIsIHVybCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImluc3BlY3Rv
ckNvbm5lY3RlZCIsIGluc3BlY3RvckNvbm5lY3RlZCk7CiAgICB3b3JrZXJDcmVhdGVkTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQod29ya2VyQ3JlYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjp3b3JrZXJUZXJtaW5hdGVkKGludCB3
b3JrZXJJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd29ya2VyVGVybWluYXRlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd29ya2VyVGVybWluYXRlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci53b3JrZXJUZXJtaW5hdGVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIndvcmtlcklkIiwgd29ya2Vy
SWQpOwogICAgd29ya2VyVGVybWluYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFy
YW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdvcmtlclRl
cm1pbmF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Oldvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihpbnQgd29ya2VySWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiLCAiV29ya2VyLmRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigid29ya2VySWQiLCB3b3JrZXJJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgZGlzcGF0
Y2hNZXNzYWdlRnJvbVdvcmtlck1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRpc3BhdGNoTWVzc2Fn
ZUZyb21Xb3JrZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6Oldvcmtlcjo6ZGlzY29ubmVjdGVkRnJvbVdvcmtlcigpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRpc2Nvbm5lY3RlZEZyb21Xb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGRpc2Nvbm5lY3RlZEZyb21Xb3JrZXJNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJXb3JrZXIuZGlzY29ubmVjdGVkRnJvbVdvcmtlciIpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGlzY29ubmVjdGVkRnJvbVdvcmtlck1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKCn0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128075</attachid>
            <date>2012-02-21 16:18:25 -0800</date>
            <delta_ts>2012-02-21 16:18:25 -0800</delta_ts>
            <desc>new InspectorBackendDispatcher.h</desc>
            <filename>InspectorBackendDispatcher.h</filename>
            <type>text/plain</type>
            <size>30281</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKI2Rl
ZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCgpuYW1lc3BhY2UgV2Vi
Q29yZSB7CgpjbGFzcyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpjbGFz
cyBJbnNwZWN0b3JBcnJheTsKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwoKdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CgpjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjog
cHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKcHVibGljOgog
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCk7CiAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQoKICAgIGNsYXNzIEluc3Bl
Y3RvckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nKikgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JD
b21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBNZW1vcnlDb21tYW5kSGFuZGxl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGdldERPTU5vZGVDb3VudChFcnJv
clN0cmluZyosIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpET01Hcm91cD4gPiYqLyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfZG9tR3JvdXBzLCAv
KlJlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpTdHJpbmdTdGF0aXN0aWNzPiYqLyBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3N0cmluZ3MpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgdmlydHVhbCB+TWVtb3J5Q29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgogICAgY2xhc3Mg
UGFnZUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRTb3VyY2UsIC8qVHlwZUJ1
aWxkZXI6OlBhZ2U6OlNjcmlwdElkZW50aWZpZXIqKi8gU3RyaW5nKiBvdXRfaWRlbnRpZmllcikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9pZGVudGlmaWVyKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIHJlbG9hZChFcnJvclN0cmluZyosIGNvbnN0IGJvb2wqIGluX2lnbm9yZUNhY2hl
LCBjb25zdCBTdHJpbmcqIGluX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWQpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgbmF2aWdhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3VybCkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgLypSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+ID4mKi8gUmVm
UHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2Nvb2tpZXMsIFN0cmluZyogb3V0X2Nvb2tpZXNTdHJp
bmcpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9jb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGluX2RvbWFpbikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCAvKlJl
ZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+JiovIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBvdXRfZnJhbWVUcmVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdl
dFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiBpbl91cmwsIFN0cmluZyogb3V0X2NvbnRlbnQsIGJvb2wqIG91dF9iYXNl
NjRFbmNvZGVkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaW5fdXJs
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBjb25zdCBib29sKiBpbl9jYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sKiBpbl9pc1JlZ2V4LCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+JiovIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91
dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IGJvb2wqIGluX2Nhc2VTZW5z
aXRpdmUsIGNvbnN0IGJvb2wqIGluX2lzUmVnZXgsIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoUmVzdWx0PiA+JiovIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRD
b250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGluX2h0bWwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0U2NyZWVuU2l6ZU92ZXJy
aWRlKEVycm9yU3RyaW5nKiwgaW50IGluX3dpZHRoLCBpbnQgaW5faGVpZ2h0KSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9y
ZXN1bHQpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+UGFnZUNvbW1hbmRI
YW5kbGVyKCkgeyB9CiAgICB9OwoKICAgIGNsYXNzIFJ1bnRpbWVDb21tYW5kSGFuZGxlciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBpbl9leHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGluX29iamVjdEdyb3VwLCBj
b25zdCBib29sKiBpbl9pbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGluX2RvTm90
UGF1c2VPbkV4Y2VwdGlvbnMsIGNvbnN0IFN0cmluZyogaW5fZnJhbWVJZCwgY29uc3QgYm9vbCog
aW5fcmV0dXJuQnlWYWx1ZSwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mKi8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9yZXN1bHQsIGJvb2wqIG9wdF9v
dXRfd2FzVGhyb3duKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwgY29uc3QgU3RyaW5nJiBpbl9m
dW5jdGlvbkRlY2xhcmF0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBpbl9hcmd1
bWVudHMsIGNvbnN0IGJvb2wqIGluX3JldHVybkJ5VmFsdWUsIC8qUmVmUHRyPFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiovIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRf
cmVzdWx0LCBib29sKiBvcHRfb3V0X3dhc1Rocm93bikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwg
Y29uc3QgYm9vbCogaW5fb3duUHJvcGVydGllcywgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+ID4mKi8gUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlT2JqZWN0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX29iamVjdEdyb3VwKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJ1bihF
cnJvclN0cmluZyopID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+UnVudGlt
ZUNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKICAgIGNsYXNzIENvbnNvbGVDb21tYW5kSGFu
ZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmlu
ZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBi
b29sIGluX2VuYWJsZWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkSW5zcGVjdGVkTm9k
ZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkSW5zcGVjdGVkSGVhcE9iamVjdChFcnJvclN0cmluZyosIGludCBpbl9oZWFwT2JqZWN0SWQp
ID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+Q29uc29sZUNvbW1hbmRIYW5k
bGVyKCkgeyB9CiAgICB9OwoKICAgIGNsYXNzIE5ldHdvcmtDb21tYW5kSGFuZGxlciB7CiAgICBw
dWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0VXNlckFnZW50T3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGluX3VzZXJBZ2VudCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRyYUhUVFBIZWFk
ZXJzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX2hlYWRl
cnMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBpbl9yZXF1ZXN0SWQsIFN0cmluZyogb3V0X2JvZHksIGJvb2wqIG91
dF9iYXNlNjRFbmNvZGVkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3Nl
ckNhY2hlKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBjbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FuQ2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyosIGJvb2wqIG91dF9y
ZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcyhFcnJv
clN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FjaGVEaXNhYmxlZChFcnJv
clN0cmluZyosIGJvb2wgaW5fY2FjaGVEaXNhYmxlZCkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgICB2aXJ0dWFsIH5OZXR3b3JrQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNzIERhdGFiYXNlQ29tbWFuZEhhbmRsZXIgewogICAg
cHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyosIGludCBpbl9kYXRh
YmFzZUlkLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiovIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIG91dF90YWJsZU5hbWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSwgYm9vbCogb3V0X3N1Y2Nlc3MsIGludCogb3V0X3RyYW5zYWN0aW9uSWQpID0g
MDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+RGF0YWJhc2VDb21tYW5kSGFuZGxl
cigpIHsgfQogICAgfTsKCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAgICBjbGFzcyBJbmRleGVkREJDb21tYW5kSGFuZGxlciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShFcnJvclN0cmluZyosIGlu
dCBpbl9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcqLCBpbnQgaW5fcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaW5fZGF0YWJhc2VOYW1l
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiwgaW50
IGluX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBjb25zdCBTdHJpbmcmIGlu
X2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0
cmluZyYgaW5faW5kZXhOYW1lLCBpbnQgaW5fc2tpcENvdW50LCBpbnQgaW5fcGFnZVNpemUsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9rZXlSYW5nZSkgPSAwOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgICB2aXJ0dWFsIH5JbmRleGVkREJDb21tYW5kSGFuZGxlcigpIHsgfQogICAg
fTsKCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIERPTVN0b3Jh
Z2VDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fc3RvcmFnZUlkLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiA+JiovIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4mIG91dF9lbnRyaWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldERPTVN0b3JhZ2VJ
dGVtKEVycm9yU3RyaW5nKiwgaW50IGluX3N0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBpbl9rZXks
IGNvbnN0IFN0cmluZyYgaW5fdmFsdWUsIGJvb2wqIG91dF9zdWNjZXNzKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nKiwgaW50IGluX3N0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBpbl9rZXksIGJvb2wqIG91dF9zdWNjZXNzKSA9IDA7Cgog
ICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkRPTVN0b3JhZ2VDb21tYW5kSGFuZGxlcigp
IHsgfQogICAgfTsKCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIgewog
ICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVy
cm9yU3RyaW5nKiwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpBcHBs
aWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4gPiYqLyBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBvdXRfZnJhbWVJZHMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBTdHJpbmcqIG91dF9tYW5pZmVz
dFVSTCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJh
bWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIC8qUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYqLyBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgb3V0X2FwcGxpY2F0aW9uQ2FjaGUpID0gMDsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgdmlydHVhbCB+QXBwbGljYXRpb25DYWNoZUNvbW1hbmRIYW5kbGVyKCkgeyB9CiAg
ICB9OwoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVTeXN0ZW1Db21tYW5k
SGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0
cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0g
MDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+RmlsZVN5c3RlbUNvbW1hbmRIYW5k
bGVyKCkgeyB9CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNz
IERPTUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
RG9jdW1lbnQoRXJyb3JTdHJpbmcqLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiYq
LyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Jvb3QpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIHF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBpbnQgaW5f
bm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3NlbGVjdG9yLCBpbnQqIG91dF9ub2RlSWQpID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgcXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyosIGludCBp
bl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fc2VsZWN0b3IsIC8qUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxpbnQ+ID4mKi8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X25vZGVJZHMpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqLCBpbnQgaW5f
bm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX25hbWUsIGludCogb3V0X25vZGVJZCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlk
LCBjb25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3Qg
U3RyaW5nJiBpbl9uYW1lLCBjb25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlk
LCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IFN0cmluZyogaW5fbmFtZSkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIGluX25hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgLypSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpET006OkV2ZW50TGlzdGVuZXI+ID4m
Ki8gUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2xpc3RlbmVycykgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBTdHJp
bmcqIG91dF9vdXRlckhUTUwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0T3V0ZXJIVE1M
KEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9vdXRlckhUTUwp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFN0cmluZyogb3V0X3NlYXJjaElkLCBpbnQqIG91dF9yZXN1
bHRDb3VudCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWFyY2hJZCwgaW50IGluX2Zyb21JbmRleCwgaW50
IGluX3RvSW5kZXgsIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4mKi8gUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgb3V0X25vZGVJZHMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NlYXJj
aElkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwgaW50KiBvdXRfbm9kZUlkKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgaW5f
ZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2hpZ2hsaWdodENvbmZp
ZykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwg
aW50IGluX3gsIGludCBpbl95LCBpbnQgaW5fd2lkdGgsIGludCBpbl9oZWlnaHQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9jb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIGluX291dGxpbmVDb2xvcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGln
aHROb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIGluX2hpZ2hsaWdodENvbmZpZykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoaWdo
bGlnaHRGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2NvbnRlbnRDb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIGluX2NvbnRlbnRPdXRsaW5lQ29sb3IpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl9wYXRoLCBpbnQqIG91dF9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcqIGlu
X29iamVjdEdyb3VwLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYqLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X29iamVjdCkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgLypS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiYqLyBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBvdXRfYXR0cmlidXRlcykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oRXJy
b3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBpbnQgaW5fdGFyZ2V0Tm9kZUlkLCBjb25zdCBpbnQq
IGluX2luc2VydEJlZm9yZU5vZGVJZCwgaW50KiBvdXRfbm9kZUlkKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIHNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgaW5f
ZW5hYmxlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB1bmRvKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCByZWRvKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyopID0gMDsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+RE9NQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07Cgog
ICAgY2xhc3MgQ1NTQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldE1hdGNoZWRTdHls
ZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogaW5fZm9yY2VkUHNldWRvQ2xhc3NlcywgY29uc3QgYm9vbCogaW5faW5jbHVk
ZVBzZXVkbywgY29uc3QgYm9vbCogaW5faW5jbHVkZUluaGVyaXRlZCwgLypSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+ID4mKi8gUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgb3B0X291dF9tYXRjaGVkQ1NTUnVsZXMsIC8qUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPiA+JiovIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG9wdF9vdXRfcHNldWRvRWxlbWVudHMsIC8qUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5PiA+JiovIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIG9wdF9vdXRfaW5oZXJpdGVkKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlk
LCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mKi8gUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIG9wdF9vdXRfaW5saW5lU3R5bGUsIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiYqLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3B0X291dF9hdHRyaWJ1dGVz
U3R5bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUo
RXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+JiovIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG91dF9jb21wdXRlZFN0eWxlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+ID4mKi8gUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgb3V0X2hlYWRlcnMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
U3R5bGVTaGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc3R5bGVTaGVldElkLCAv
KlJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mKi8gUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG91dF9zdHlsZVNoZWV0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zdHlsZVNo
ZWV0SWQsIFN0cmluZyogb3V0X3RleHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5
bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3N0eWxlU2hlZXRJZCwg
Y29uc3QgU3RyaW5nJiBpbl90ZXh0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBpbl9z
dHlsZUlkLCBpbnQgaW5fcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiBpbl90ZXh0LCBib29s
IGluX292ZXJ3cml0ZSwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiovIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfc3R5bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgaW5fc3R5bGVJZCwgaW50IGluX3Byb3BlcnR5SW5kZXgsIGJvb2wgaW5fZGlzYWJsZSwg
LypSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiovIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBvdXRfc3R5bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVj
dG9yKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3J1bGVJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT4mKi8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9ydWxlKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fY29udGV4dE5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT4mKi8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9ydWxlKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCAv
KlJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiovIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIG91dF9jc3NQcm9wZXJ0aWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
U2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RvcFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpTZWxlY3RvclByb2ZpbGU+JiovIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfcHJv
ZmlsZSkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5DU1NDb21tYW5kSGFu
ZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBUaW1lbGluZUNvbW1hbmRIYW5kbGVyIHsKICAg
IHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcqLCBjb25zdCBp
bnQqIGluX21heENhbGxTdGFja0RlcHRoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0b3Ao
RXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEluY2x1ZGVNZW1vcnlE
ZXRhaWxzKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9lbmFibGVkKSA9IDA7CgogICAgcHJvdGVjdGVk
OgogICAgICAgIHZpcnR1YWwgflRpbWVsaW5lQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07Cgoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBEZWJ1Z2dlckNvbW1hbmRI
YW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2F1c2VzUmVjb21waWxh
dGlvbihFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgc3VwcG9ydHNOYXRpdmVCcmVha3BvaW50cyhFcnJvclN0cmluZyosIGJvb2wqIG91dF9y
ZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyosIGJvb2wgaW5f
YWN0aXZlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJv
clN0cmluZyosIGludCBpbl9saW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGluX3VybCwgY29uc3Qg
U3RyaW5nKiBpbl91cmxSZWdleCwgY29uc3QgaW50KiBpbl9jb2x1bW5OdW1iZXIsIGNvbnN0IFN0
cmluZyogaW5fY29uZGl0aW9uLCAvKlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
KiovIFN0cmluZyogb3V0X2JyZWFrcG9pbnRJZCwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+ID4mKi8gUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgb3B0X291dF9sb2NhdGlvbnMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJl
YWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBpbl9s
b2NhdGlvbiwgY29uc3QgU3RyaW5nKiBpbl9jb25kaXRpb24sIC8qVHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQqKi8gU3RyaW5nKiBvdXRfYnJlYWtwb2ludElkLCAvKlJlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiYqLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgb3V0X2FjdHVhbExvY2F0aW9uKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2JyZWFrcG9pbnRJZCkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbG9jYXRpb24pID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RlcE92ZXIoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHN0ZXBJbnRvKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdGVw
T3V0KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBwYXVzZShFcnJvclN0
cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBjb25zdCBib29s
KiBpbl9jYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpbl9pc1JlZ2V4LCAvKlJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+JiovIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FuU2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdFNvdXJjZSwgY29uc3Qg
Ym9vbCogaW5fcHJldmlldywgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+JiovIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG9wdF9v
dXRfY2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG9wdF9vdXRfcmVzdWx0KSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fc2NyaXB0SWQsIFN0cmluZyogb3V0X3NjcmlwdFNvdXJjZSkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX2Z1bmN0aW9uSWQsIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
RnVuY3Rpb25EZXRhaWxzPiYqLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X2RldGFpbHMp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGluX3N0YXRlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGV2
YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2NhbGxGcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIGluX2V4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0
R3JvdXAsIGNvbnN0IGJvb2wqIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCog
aW5fcmV0dXJuQnlWYWx1ZSwgLypSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mKi8gUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9yZXN1bHQsIGJvb2wqIG9wdF9v
dXRfd2FzVGhyb3duKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkRlYnVn
Z2VyQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERP
TURlYnVnZ2VyQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3Ry
aW5nJiBpbl90eXBlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZURPTUJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3R5cGUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2V2ZW50TmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEluc3RydW1l
bnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2V2ZW50TmFt
ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3Bv
aW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9ldmVudE5hbWUpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgaW5fdXJsKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3VybCkgPSAwOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgICB2aXJ0dWFsIH5ET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICBjbGFzcyBQcm9maWxlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1Ymxp
YzoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2F1c2VzUmVjb21waWxhdGlvbihFcnJvclN0cmluZyos
IGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgaXNTYW1wbGluZyhF
cnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
aGFzSGVhcFByb2ZpbGVyKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKEVycm9yU3Ry
aW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0
cmluZyosIC8qUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JPYmplY3Q+ID4mKi8g
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2hlYWRlcnMpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHlwZSwgaW50
IGluX3VpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9wcm9maWxlKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVByb2ZpbGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGluX3R5cGUsIGludCBpbl91aWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcm9m
aWxlcyhFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgdGFrZUhlYXBTbmFw
c2hvdChFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEdhcmJh
Z2UoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdEJ5SGVh
cE9iamVjdElkKEVycm9yU3RyaW5nKiwgaW50IGluX29iamVjdElkLCBjb25zdCBTdHJpbmcqIGlu
X29iamVjdEdyb3VwLCAvKlJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYqLyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Jlc3VsdCkgPSAwOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgICB2aXJ0dWFsIH5Qcm9maWxlckNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9
OwoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktF
UlMpCiAgICBjbGFzcyBXb3JrZXJDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAg
dmlydHVhbCB2b2lkIHNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9v
bCBpbl92YWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2Vy
KEVycm9yU3RyaW5nKiwgaW50IGluX3dvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgaW5fbWVzc2FnZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9Xb3Jr
ZXIoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzY29ubmVjdEZyb21Xb3JrZXIoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJp
bmcqLCBib29sIGluX3ZhbHVlKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwg
fldvcmtlckNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEFwcGxpY2F0aW9uQ2FjaGVDb21t
YW5kSGFuZGxlciogYXBwbGljYXRpb25DYWNoZUFnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJBZ2VudChDU1NDb21tYW5kSGFuZGxlciogY3NzQWdlbnQpID0gMDsKICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckFnZW50KENvbnNvbGVDb21tYW5kSGFuZGxlciogY29uc29sZUFnZW50
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChET01Db21tYW5kSGFuZGxlciog
ZG9tQWdlbnQpID0gMDsKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckFnZW50KERPTURlYnVnZ2VyQ29tbWFuZEhhbmRsZXIqIGRvbURlYnVn
Z2VyQWdlbnQpID0gMDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAg
IHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERPTVN0b3JhZ2VDb21tYW5kSGFuZGxlciogZG9t
U3RvcmFnZUFnZW50KSA9IDA7CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckFnZW50KERhdGFiYXNlQ29tbWFuZEhhbmRsZXIqIGRhdGFiYXNlQWdlbnQp
ID0gMDsKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoRGVidWdnZXJDb21t
YW5kSGFuZGxlciogZGVidWdnZXJBZ2VudCkgPSAwOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckFnZW50KEZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlciogZmlsZVN5c3RlbUFnZW50KSA9
IDA7CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgojaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5kZXhlZERCQ29tbWFuZEhh
bmRsZXIqIGluZGV4ZWREQkFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JDb21tYW5kSGFu
ZGxlciogaW5zcGVjdG9yQWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50
KE1lbW9yeUNvbW1hbmRIYW5kbGVyKiBtZW1vcnlBZ2VudCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQWdlbnQoTmV0d29ya0NvbW1hbmRIYW5kbGVyKiBuZXR3b3JrQWdlbnQpID0gMDsK
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFBhZ2VDb21tYW5kSGFuZGxlciogcGFnZUFn
ZW50KSA9IDA7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJBZ2VudChQcm9maWxlckNvbW1hbmRIYW5kbGVyKiBwcm9maWxlckFnZW50KSA9
IDA7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJBZ2VudChSdW50aW1lQ29tbWFuZEhhbmRsZXIqIHJ1bnRpbWVBZ2VudCkgPSAw
OwogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoVGltZWxpbmVDb21tYW5kSGFuZGxlciog
dGltZWxpbmVBZ2VudCkgPSAwOwojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQWdlbnQoV29ya2VyQ29tbWFuZEhhbmRsZXIqIHdvcmtlckFnZW50KSA9IDA7CiNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgogICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQo
KSA9IDA7CgogICAgZW51bSBDb21tb25FcnJvckNvZGUgewogICAgICAgIFBhcnNlRXJyb3IgPSAw
LAogICAgICAgIEludmFsaWRSZXF1ZXN0LAogICAgICAgIE1ldGhvZE5vdEZvdW5kLAogICAgICAg
IEludmFsaWRQYXJhbXMsCiAgICAgICAgSW50ZXJuYWxFcnJvciwKICAgICAgICBTZXJ2ZXJFcnJv
ciwKICAgICAgICBMYXN0RW50cnksCiAgICB9OwoKICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJv
cihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdCA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7
CiAgICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0
cmluZyogcmVzdWx0KTsKCiAgICBlbnVtIE1ldGhvZE5hbWVzIHsKICAgICAgICBrSW5zcGVjdG9y
X2VuYWJsZUNtZCwKICAgICAgICBrSW5zcGVjdG9yX2Rpc2FibGVDbWQsCiAgICAgICAga01lbW9y
eV9nZXRET01Ob2RlQ291bnRDbWQsCiAgICAgICAga1BhZ2VfZW5hYmxlQ21kLAogICAgICAgIGtQ
YWdlX2Rpc2FibGVDbWQsCiAgICAgICAga1BhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENt
ZCwKICAgICAgICBrUGFnZV9yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkQ21kLAogICAgICAg
IGtQYWdlX3JlbG9hZENtZCwKICAgICAgICBrUGFnZV9uYXZpZ2F0ZUNtZCwKICAgICAgICBrUGFn
ZV9nZXRDb29raWVzQ21kLAogICAgICAgIGtQYWdlX2RlbGV0ZUNvb2tpZUNtZCwKICAgICAgICBr
UGFnZV9nZXRSZXNvdXJjZVRyZWVDbWQsCiAgICAgICAga1BhZ2VfZ2V0UmVzb3VyY2VDb250ZW50
Q21kLAogICAgICAgIGtQYWdlX3NlYXJjaEluUmVzb3VyY2VDbWQsCiAgICAgICAga1BhZ2Vfc2Vh
cmNoSW5SZXNvdXJjZXNDbWQsCiAgICAgICAga1BhZ2Vfc2V0RG9jdW1lbnRDb250ZW50Q21kLAog
ICAgICAgIGtQYWdlX3NldFNjcmVlblNpemVPdmVycmlkZUNtZCwKICAgICAgICBrUGFnZV9zZXRT
aG93UGFpbnRSZWN0c0NtZCwKICAgICAgICBrUnVudGltZV9ldmFsdWF0ZUNtZCwKICAgICAgICBr
UnVudGltZV9jYWxsRnVuY3Rpb25PbkNtZCwKICAgICAgICBrUnVudGltZV9nZXRQcm9wZXJ0aWVz
Q21kLAogICAgICAgIGtSdW50aW1lX3JlbGVhc2VPYmplY3RDbWQsCiAgICAgICAga1J1bnRpbWVf
cmVsZWFzZU9iamVjdEdyb3VwQ21kLAogICAgICAgIGtSdW50aW1lX3J1bkNtZCwKICAgICAgICBr
Q29uc29sZV9lbmFibGVDbWQsCiAgICAgICAga0NvbnNvbGVfZGlzYWJsZUNtZCwKICAgICAgICBr
Q29uc29sZV9jbGVhck1lc3NhZ2VzQ21kLAogICAgICAgIGtDb25zb2xlX3NldE1vbml0b3JpbmdY
SFJFbmFibGVkQ21kLAogICAgICAgIGtDb25zb2xlX2FkZEluc3BlY3RlZE5vZGVDbWQsCiAgICAg
ICAga0NvbnNvbGVfYWRkSW5zcGVjdGVkSGVhcE9iamVjdENtZCwKICAgICAgICBrTmV0d29ya19l
bmFibGVDbWQsCiAgICAgICAga05ldHdvcmtfZGlzYWJsZUNtZCwKICAgICAgICBrTmV0d29ya19z
ZXRVc2VyQWdlbnRPdmVycmlkZUNtZCwKICAgICAgICBrTmV0d29ya19zZXRFeHRyYUhUVFBIZWFk
ZXJzQ21kLAogICAgICAgIGtOZXR3b3JrX2dldFJlc3BvbnNlQm9keUNtZCwKICAgICAgICBrTmV0
d29ya19jYW5DbGVhckJyb3dzZXJDYWNoZUNtZCwKICAgICAgICBrTmV0d29ya19jbGVhckJyb3dz
ZXJDYWNoZUNtZCwKICAgICAgICBrTmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29raWVzQ21kLAog
ICAgICAgIGtOZXR3b3JrX2NsZWFyQnJvd3NlckNvb2tpZXNDbWQsCiAgICAgICAga05ldHdvcmtf
c2V0Q2FjaGVEaXNhYmxlZENtZCwKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgICAgIGtE
YXRhYmFzZV9lbmFibGVDbWQsCiAgICAgICAga0RhdGFiYXNlX2Rpc2FibGVDbWQsCiAgICAgICAg
a0RhdGFiYXNlX2dldERhdGFiYXNlVGFibGVOYW1lc0NtZCwKICAgICAgICBrRGF0YWJhc2VfZXhl
Y3V0ZVNRTENtZCwKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCgogICAgICAgIGtJbmRleGVkREJfZW5hYmxlQ21kLAogICAgICAgIGtJ
bmRleGVkREJfZGlzYWJsZUNtZCwKICAgICAgICBrSW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5h
bWVzRm9yRnJhbWVDbWQsCiAgICAgICAga0luZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VDbWQsCiAg
ICAgICAga0luZGV4ZWREQl9yZXF1ZXN0RGF0YUNtZCwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKICAgICAgICBrRE9NU3RvcmFnZV9lbmFibGVDbWQsCiAgICAgICAga0RPTVN0
b3JhZ2VfZGlzYWJsZUNtZCwKICAgICAgICBrRE9NU3RvcmFnZV9nZXRET01TdG9yYWdlRW50cmll
c0NtZCwKICAgICAgICBrRE9NU3RvcmFnZV9zZXRET01TdG9yYWdlSXRlbUNtZCwKICAgICAgICBr
RE9NU3RvcmFnZV9yZW1vdmVET01TdG9yYWdlSXRlbUNtZCwKICAgICAgICBrQXBwbGljYXRpb25D
YWNoZV9nZXRGcmFtZXNXaXRoTWFuaWZlc3RzQ21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hl
X2VuYWJsZUNtZCwKICAgICAgICBrQXBwbGljYXRpb25DYWNoZV9nZXRNYW5pZmVzdEZvckZyYW1l
Q21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZUNtZCwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAga0ZpbGVTeXN0ZW1fZW5hYmxl
Q21kLAogICAgICAgIGtGaWxlU3lzdGVtX2Rpc2FibGVDbWQsCiNlbmRpZiAvLyBFTkFCTEUoRklM
RV9TWVNURU0pCgogICAgICAgIGtET01fZ2V0RG9jdW1lbnRDbWQsCiAgICAgICAga0RPTV9yZXF1
ZXN0Q2hpbGROb2Rlc0NtZCwKICAgICAgICBrRE9NX3F1ZXJ5U2VsZWN0b3JDbWQsCiAgICAgICAg
a0RPTV9xdWVyeVNlbGVjdG9yQWxsQ21kLAogICAgICAgIGtET01fc2V0Tm9kZU5hbWVDbWQsCiAg
ICAgICAga0RPTV9zZXROb2RlVmFsdWVDbWQsCiAgICAgICAga0RPTV9yZW1vdmVOb2RlQ21kLAog
ICAgICAgIGtET01fc2V0QXR0cmlidXRlVmFsdWVDbWQsCiAgICAgICAga0RPTV9zZXRBdHRyaWJ1
dGVzQXNUZXh0Q21kLAogICAgICAgIGtET01fcmVtb3ZlQXR0cmlidXRlQ21kLAogICAgICAgIGtE
T01fZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlQ21kLAogICAgICAgIGtET01fZ2V0T3V0ZXJIVE1M
Q21kLAogICAgICAgIGtET01fc2V0T3V0ZXJIVE1MQ21kLAogICAgICAgIGtET01fcGVyZm9ybVNl
YXJjaENtZCwKICAgICAgICBrRE9NX2dldFNlYXJjaFJlc3VsdHNDbWQsCiAgICAgICAga0RPTV9k
aXNjYXJkU2VhcmNoUmVzdWx0c0NtZCwKICAgICAgICBrRE9NX3JlcXVlc3ROb2RlQ21kLAogICAg
ICAgIGtET01fc2V0SW5zcGVjdE1vZGVFbmFibGVkQ21kLAogICAgICAgIGtET01faGlnaGxpZ2h0
UmVjdENtZCwKICAgICAgICBrRE9NX2hpZ2hsaWdodE5vZGVDbWQsCiAgICAgICAga0RPTV9oaWRl
SGlnaGxpZ2h0Q21kLAogICAgICAgIGtET01faGlnaGxpZ2h0RnJhbWVDbWQsCiAgICAgICAga0RP
TV9wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmRDbWQsCiAgICAgICAga0RPTV9yZXNvbHZlTm9kZUNt
ZCwKICAgICAgICBrRE9NX2dldEF0dHJpYnV0ZXNDbWQsCiAgICAgICAga0RPTV9tb3ZlVG9DbWQs
CiAgICAgICAga0RPTV9zZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWRDbWQsCiAgICAgICAga0RPTV91
bmRvQ21kLAogICAgICAgIGtET01fcmVkb0NtZCwKICAgICAgICBrRE9NX21hcmtVbmRvYWJsZVN0
YXRlQ21kLAogICAgICAgIGtDU1NfZW5hYmxlQ21kLAogICAgICAgIGtDU1NfZGlzYWJsZUNtZCwK
ICAgICAgICBrQ1NTX2dldE1hdGNoZWRTdHlsZXNGb3JOb2RlQ21kLAogICAgICAgIGtDU1NfZ2V0
SW5saW5lU3R5bGVzRm9yTm9kZUNtZCwKICAgICAgICBrQ1NTX2dldENvbXB1dGVkU3R5bGVGb3JO
b2RlQ21kLAogICAgICAgIGtDU1NfZ2V0QWxsU3R5bGVTaGVldHNDbWQsCiAgICAgICAga0NTU19n
ZXRTdHlsZVNoZWV0Q21kLAogICAgICAgIGtDU1NfZ2V0U3R5bGVTaGVldFRleHRDbWQsCiAgICAg
ICAga0NTU19zZXRTdHlsZVNoZWV0VGV4dENtZCwKICAgICAgICBrQ1NTX3NldFByb3BlcnR5VGV4
dENtZCwKICAgICAgICBrQ1NTX3RvZ2dsZVByb3BlcnR5Q21kLAogICAgICAgIGtDU1Nfc2V0UnVs
ZVNlbGVjdG9yQ21kLAogICAgICAgIGtDU1NfYWRkUnVsZUNtZCwKICAgICAgICBrQ1NTX2dldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXNDbWQsCiAgICAgICAga0NTU19zdGFydFNlbGVjdG9yUHJvZmls
ZXJDbWQsCiAgICAgICAga0NTU19zdG9wU2VsZWN0b3JQcm9maWxlckNtZCwKICAgICAgICBrVGlt
ZWxpbmVfc3RhcnRDbWQsCiAgICAgICAga1RpbWVsaW5lX3N0b3BDbWQsCiAgICAgICAga1RpbWVs
aW5lX3NldEluY2x1ZGVNZW1vcnlEZXRhaWxzQ21kLAojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgogICAgICAgIGtEZWJ1Z2dlcl9jYXVzZXNSZWNvbXBpbGF0aW9uQ21kLAogICAgICAg
IGtEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRzQ21kLAogICAgICAgIGtEZWJ1Z2dl
cl9lbmFibGVDbWQsCiAgICAgICAga0RlYnVnZ2VyX2Rpc2FibGVDbWQsCiAgICAgICAga0RlYnVn
Z2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRCcmVha3Bv
aW50QnlVcmxDbWQsCiAgICAgICAga0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRDbWQsCiAgICAgICAg
a0RlYnVnZ2VyX3JlbW92ZUJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RlYnVnZ2VyX2NvbnRpbnVl
VG9Mb2NhdGlvbkNtZCwKICAgICAgICBrRGVidWdnZXJfc3RlcE92ZXJDbWQsCiAgICAgICAga0Rl
YnVnZ2VyX3N0ZXBJbnRvQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zdGVwT3V0Q21kLAogICAgICAg
IGtEZWJ1Z2dlcl9wYXVzZUNtZCwKICAgICAgICBrRGVidWdnZXJfcmVzdW1lQ21kLAogICAgICAg
IGtEZWJ1Z2dlcl9zZWFyY2hJbkNvbnRlbnRDbWQsCiAgICAgICAga0RlYnVnZ2VyX2NhblNldFNj
cmlwdFNvdXJjZUNtZCwKICAgICAgICBrRGVidWdnZXJfc2V0U2NyaXB0U291cmNlQ21kLAogICAg
ICAgIGtEZWJ1Z2dlcl9nZXRTY3JpcHRTb3VyY2VDbWQsCiAgICAgICAga0RlYnVnZ2VyX2dldEZ1
bmN0aW9uRGV0YWlsc0NtZCwKICAgICAgICBrRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnND
bWQsCiAgICAgICAga0RlYnVnZ2VyX2V2YWx1YXRlT25DYWxsRnJhbWVDbWQsCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAgICAga0RPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RP
TURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RPTURlYnVnZ2VyX3Nl
dEV2ZW50TGlzdGVuZXJCcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9yZW1vdmVF
dmVudExpc3RlbmVyQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfc2V0SW5zdHJ1
bWVudGF0aW9uQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfcmVtb3ZlSW5zdHJ1
bWVudGF0aW9uQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfc2V0WEhSQnJlYWtw
b2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfcmVtb3ZlWEhSQnJlYWtwb2ludENtZCwKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKICAgICAgICBrUHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbkNtZCwKICAg
ICAgICBrUHJvZmlsZXJfaXNTYW1wbGluZ0NtZCwKICAgICAgICBrUHJvZmlsZXJfaGFzSGVhcFBy
b2ZpbGVyQ21kLAogICAgICAgIGtQcm9maWxlcl9lbmFibGVDbWQsCiAgICAgICAga1Byb2ZpbGVy
X2Rpc2FibGVDbWQsCiAgICAgICAga1Byb2ZpbGVyX3N0YXJ0Q21kLAogICAgICAgIGtQcm9maWxl
cl9zdG9wQ21kLAogICAgICAgIGtQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVyc0NtZCwKICAgICAg
ICBrUHJvZmlsZXJfZ2V0UHJvZmlsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfcmVtb3ZlUHJvZmls
ZUNtZCwKICAgICAgICBrUHJvZmlsZXJfY2xlYXJQcm9maWxlc0NtZCwKICAgICAgICBrUHJvZmls
ZXJfdGFrZUhlYXBTbmFwc2hvdENtZCwKICAgICAgICBrUHJvZmlsZXJfY29sbGVjdEdhcmJhZ2VD
bWQsCiAgICAgICAga1Byb2ZpbGVyX2dldE9iamVjdEJ5SGVhcE9iamVjdElkQ21kLAojZW5kaWYg
Ly8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAg
ICAgIGtXb3JrZXJfc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWRDbWQsCiAgICAgICAga1dvcmtl
cl9zZW5kTWVzc2FnZVRvV29ya2VyQ21kLAogICAgICAgIGtXb3JrZXJfY29ubmVjdFRvV29ya2Vy
Q21kLAogICAgICAgIGtXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXJDbWQsCiAgICAgICAga1dv
cmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vyc0NtZCwKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQoKICAgIH07CgogICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOwp9OwoKfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJfaCkKCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128076</attachid>
            <date>2012-02-21 16:18:45 -0800</date>
            <delta_ts>2012-02-21 16:18:45 -0800</delta_ts>
            <desc>new InspctorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>20004</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIKI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgojaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7CgpjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CgovLyBCb3RoIEluc3BlY3Rvck9iamVjdCBhbmQgSW5zcGVjdG9y
QXJyYXkgbWF5IG9yIG1heSBub3QgYmUgZGVjbGFyZWQgYXQgdGhpcyBwb2ludCBhcyBkZWZpbmVk
IGJ5IEVOQUJMRURfSU5TUEVDVE9SLgovLyBEb3VibGUtY2hlY2sgd2UgaGF2ZSB0aGVtIGF0IGxl
YXN0IGFzIGZvcndhcmQgZGVjbGFyYXRpb24uCmNsYXNzIEluc3BlY3RvckFycmF5OwpjbGFzcyBJ
bnNwZWN0b3JPYmplY3Q7Cgp0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKCiNpZiBFTkFCTEUo
SU5TUEVDVE9SKQoKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgewpwdWJsaWM6CiAgICBJbnNwZWN0
b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKCgogICAgY2xhc3MgSW5zcGVj
dG9yIHsKICAgIHB1YmxpYzoKICAgICAgICBJbnNwZWN0b3IoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAg
ICAgICB2b2lkIGluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihp
bnQgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRp
ZERlc3Ryb3lXb3JrZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAm
bV9pbnNwZWN0b3I7IH0KCiAgICBjbGFzcyBNZW1vcnkgewogICAgcHVibGljOgogICAgICAgIE1l
bW9yeShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQoKICAgIGNsYXNzIFBhZ2Ug
ewogICAgcHVibGljOgogICAgICAgIFBhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVk
KGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoZG91YmxlIHRp
bWVzdGFtcCk7CiAgICAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSk7
CiAgICAgICAgdm9pZCBmcmFtZURldGFjaGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJu
ICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1lIHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50
aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAmbV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29u
c29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVk
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgbWVzc2FnZVJl
cGVhdENvdW50VXBkYXRlZChpbnQgY291bnQpOwogICAgICAgIHZvaWQgbWVzc2FnZXNDbGVhcmVk
KCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIENvbnNvbGUqIGNvbnNvbGUoKSB7IHJldHVybiAmbV9jb25zb2xlOyB9CgogICAgY2xhc3Mg
TmV0d29yayB7CiAgICBwdWJsaWM6CiAgICAgICAgTmV0d29yayhJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgcmVxdWVzdFdp
bGxCZVNlbnQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlk
JiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVu
dFVSTCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpDb25zb2xlOjpDYWxsRnJhbWU+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3Bv
bnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKTsKICAg
ICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lk
IHJlc3BvbnNlUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElk
JiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6
TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVz
dGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3Ry
aW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRh
UmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50
IGVuY29kZWREYXRhTGVuZ3RoKTsKICAgICAgICB2b2lkIGxvYWRpbmdGaW5pc2hlZCgvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZCgvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29s
KiBjb25zdCBjYW5jZWxlZCk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNh
Y2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRl
cklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkws
IGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5p
dGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldFdpbGxTZW5k
SGFuZHNoYWtlUmVxdWVzdCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
Ki8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVxdWVzdCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VS
ZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q3JlYXRlZCgv
KmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3Nl
ZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1
cm4gJm1fbmV0d29yazsgfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBEYXRh
YmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRGF0YWJhc2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERhdGFiYXNl
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZSk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlv
blN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxTdHJpbmc+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb2x1bW5OYW1lcywg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT4gPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlv
bkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNx
bEVycm9yKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0YWJhc2U7IH0KCiNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAgICBjbGFzcyBJbmRleGVkREIgewogICAgcHVibGljOgogICAgICAgIEluZGV4ZWREQihJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAg
IHZvaWQgZGF0YWJhc2VOYW1lc0xvYWRlZChkb3VibGUgcmVxdWVzdElkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6U2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1lcz4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VO
YW1lcyk7CiAgICAgICAgdm9pZCBkYXRhYmFzZUxvYWRlZChpbnQgcmVxdWVzdElkLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMpOwog
ICAgICAgIHZvaWQgb2JqZWN0U3RvcmVEYXRhTG9hZGVkKGludCByZXF1ZXN0SWQsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVudHJ5
PiA+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gb2JqZWN0U3RvcmVEYXRhRW50cmllcywg
Ym9vbCBoYXNNb3JlKTsKICAgICAgICB2b2lkIGluZGV4RGF0YUxvYWRlZChpbnQgcmVxdWVzdElk
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6
OkRhdGFFbnRyeT4gPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluZGV4RGF0YUVudHJp
ZXMsIGJvb2wgaGFzTW9yZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIEluZGV4ZWREQiogaW5kZXhlZGRiKCkgeyByZXR1cm4gJm1faW5k
ZXhlZGRiOyB9CgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICBjbGFzcyBE
T01TdG9yYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBET01TdG9yYWdlKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRE
T01TdG9yYWdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFnZTo6RW50cnk+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQgdXBkYXRl
RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgpIHsgcmV0
dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsKICAgIHB1
YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hl
U3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1
cyk7CiAgICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBB
cHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRp
b25jYWNoZTsgfQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVTeXN0ZW0g
ewogICAgcHVibGljOgogICAgICAgIEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIHsg
cmV0dXJuICZtX2ZpbGVzeXN0ZW07IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAg
ICBjbGFzcyBET00gewogICAgcHVibGljOgogICAgICAgIERPTShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9jdW1lbnRV
cGRhdGVkKCk7CiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiA+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9k
aWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKICAgICAgICB2b2lkIGlubGluZVN0eWxlSW52YWxpZGF0ZWQoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBu
b2RlSWRzKTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hpbGROb2RlQ291bnRV
cGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAgICAgdm9pZCBjaGls
ZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBub2RlKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJ
ZCwgaW50IG5vZGVJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIERPTSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xhc3Mg
Q1NTIHsKICAgIHB1YmxpYzoKICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lZGlhUXVlcnlSZXN1bHRD
aGFuZ2VkKCk7CiAgICAgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgvKmNvbnN0IFR5cGVCdWls
ZGVyOjpDU1M6OlN0eWxlU2hlZXRJZCYqLyBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCk7CiAg
ICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENT
UyogY3NzKCkgeyByZXR1cm4gJm1fY3NzOyB9CgogICAgY2xhc3MgVGltZWxpbmUgewogICAgcHVi
bGljOgogICAgICAgIFRpbWVsaW5lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmVudFJlY29yZGVkKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2
YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJuICZtX3Rp
bWVsaW5lOyB9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBEZWJ1
Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGdsb2JhbE9iamVj
dENsZWFyZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZCgvKmNvbnN0IFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKi8gY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3Ry
aW5nJiB1cmwsIGludCBzdGFydExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGlu
dCBlbmRDb2x1bW4sIGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29uc3QgU3Ry
aW5nKiBjb25zdCBzb3VyY2VNYXBVUkwpOwogICAgICAgIHZvaWQgc2NyaXB0RmFpbGVkVG9QYXJz
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UsIGludCBzdGFy
dExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICAg
ICB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkJiovIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbG9jYXRpb24pOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmVhc29u
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgcGF1c2VkLgogICAgICAgIHN0cnVjdCBS
ZWFzb24gewogICAgICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICAgICAgWEhSID0gNSwK
ICAgICAgICAgICAgICAgIERPTSA9IDYwLAogICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciA9
IDYxLAogICAgICAgICAgICAgICAgRXhjZXB0aW9uID0gNjIsCiAgICAgICAgICAgICAgICBPdGhl
ciA9IDI1LAogICAgICAgICAgICB9OwogICAgICAgIH07IC8vIHN0cnVjdCBSZWFzb24KCiAgICAg
ICAgdm9pZCBwYXVzZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNh
bGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAg
ICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGVidWdn
ZXIqIGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
Y2xhc3MgRE9NRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERPTURlYnVnZ2VyKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTURlYnVn
Z2VyKiBkb21kZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RvbWRlYnVnZ2VyOyB9CgojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgIGNsYXNzIFByb2ZpbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICBQcm9maWxlcihJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAg
IHZvaWQgYWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVy
KTsKICAgICAgICB2b2lkIGFkZEhlYXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmlu
ZyYgY2h1bmspOwogICAgICAgIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90KGludCB1aWQpOwogICAg
ICAgIHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmlsaW5nKTsKICAgICAgICB2
b2lkIHJlc2V0UHJvZmlsZXMoKTsKICAgICAgICB2b2lkIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dy
ZXNzKGludCBkb25lLCBpbnQgdG90YWwpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQcm9maWxlciogcHJvZmlsZXIoKSB7IHJldHVybiAm
bV9wcm9maWxlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYg
RU5BQkxFKFdPUktFUlMpCiAgICBjbGFzcyBXb3JrZXIgewogICAgcHVibGljOgogICAgICAgIFdv
cmtlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgd29ya2VyQ3JlYXRlZChpbnQgd29ya2VySWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBib29sIGluc3BlY3RvckNvbm5lY3RlZCk7CiAgICAgICAgdm9pZCB3b3JrZXJUZXJtaW5h
dGVkKGludCB3b3JrZXJJZCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2Vy
KGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAg
ICAgIHZvaWQgZGlzY29ubmVjdGVkRnJvbVdvcmtlcigpOwogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBXb3JrZXIqIHdvcmtlcigpIHsgcmV0
dXJuICZtX3dvcmtlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKcHJpdmF0ZToKICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBNZW1vcnkgbV9tZW1vcnk7CiAgICBQYWdlIG1f
cGFnZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAgQ29uc29sZSBtX2NvbnNvbGU7CiAgICBO
ZXR3b3JrIG1fbmV0d29yazsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBEYXRhYmFzZSBt
X2RhdGFiYXNlOwojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgSW5kZXhlZERCIG1faW5kZXhlZGRiOwojZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsKICAgIEFwcGxp
Y2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQog
ICAgRmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0p
CiAgICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBUaW1lbGluZSBtX3RpbWVsaW5lOwoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBEZWJ1Z2dlciBtX2RlYnVnZ2VyOwoj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVidWdnZXI7CiNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIgbV93b3JrZXI7CiNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKfTsKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQoKfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128077</attachid>
            <date>2012-02-21 16:19:15 -0800</date>
            <delta_ts>2012-02-21 16:19:15 -0800</delta_ts>
            <desc>new InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>43959</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2lmIEVOQUJMRShJTlNQRUNU
T1IpCgojaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgojaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgLCBtX2luZGV4ZWRkYihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVtKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwg
bV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoj
aWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJZCwgY29u
c3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJ
bnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAg
ICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJ
bnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNwZWN0TWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsKICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQgaWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkluc3BlY3Rv
ci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7CiAgICBk
aWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3JrZXJNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3Rv
cjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNwZWN0b3Iu
ZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1w
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50RmlyZWRN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZpcmVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRp
bWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBsb2FkRXZl
bnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFtZU5hdmln
YXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZyYW1l
TmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5hdmlnYXRl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFtZSIsIGZy
YW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJhbWVOYXZp
Z2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OlBhZ2U6OmZyYW1lRGV0YWNoZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJ
ZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGZyYW1lRGV0YWNoZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZy
YW1lRGV0YWNoZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmZyYW1lRGV0YWNo
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgZnJhbWVEZXRhY2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGZyYW1l
RGV0YWNoZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkNvbnNvbGU6Om1lc3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OkNvbnNvbGVNZXNzYWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlQWRkZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIG1lc3NhZ2VBZGRlZE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIkNvbnNvbGUubWVzc2FnZUFkZGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoIm1lc3NhZ2UiLCBtZXNzYWdlKTsKICAgIG1lc3NhZ2VBZGRl
ZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VBZGRlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Q29uc29sZTo6bWVzc2FnZVJlcGVhdENv
dW50VXBkYXRlZChpbnQgY291bnQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJDb25zb2xlLm1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldE51bWJlcigiY291bnQiLCBjb3VudCk7CiAgICBtZXNzYWdlUmVwZWF0
Q291bnRVcGRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwog
ICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZVJlcGVhdENvdW50VXBk
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
Q29uc29sZTo6bWVzc2FnZXNDbGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZXNDbGVhcmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBt
ZXNzYWdlc0NsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3Nh
Z2VzQ2xlYXJlZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2Fn
ZXNDbGVhcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0V2lsbEJlU2VudCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklk
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRv
dWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlh
dG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNhbGxGcmFtZT4gPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlZGlyZWN0UmVzcG9uc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RX
aWxsQmVTZW50TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXF1ZXN0
V2lsbEJlU2VudE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFdp
bGxCZVNlbnQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVx
dWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJmcmFtZUlk
IiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2Fk
ZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBkb2N1bWVu
dFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVxdWVzdCIsIHJlcXVlc3QpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldE9iamVjdCgiaW5pdGlhdG9yIiwgaW5pdGlhdG9yKTsKICAgIGlmIChz
dGFja1RyYWNlKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCBz
dGFja1RyYWNlKTsKICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQogICAgICAgIHBhcmFtc09iamVj
dC0+c2V0T2JqZWN0KCJyZWRpcmVjdFJlc3BvbnNlIiwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICBy
ZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0
KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcXVlc3RXaWxsQmVTZW50
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3
b3JrOjpyZXF1ZXN0U2VydmVkRnJvbUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZSIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwog
ICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFy
YW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcXVlc3RT
ZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6
TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypj
b25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2Fk
ZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiLCB0eXBlKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNw
b25zZSIsIHJlc3BvbnNlKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpkYXRhUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhUmVjZWl2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGRhdGFSZWNlaXZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIk5ldHdvcmsuZGF0YVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJkYXRhTGVuZ3RoIiwgZGF0YUxlbmd0aCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigiZW5jb2RlZERhdGFMZW5ndGgiLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICBkYXRhUmVjZWl2
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkYXRhUmVjZWl2ZWRNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OmxvYWRpbmdGaW5pc2hl
ZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgbG9hZGluZ0ZpbmlzaGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5s
b2FkaW5nRmluaXNoZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0
aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgbG9hZGluZ0ZpbmlzaGVkTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQobG9hZGluZ0ZpbmlzaGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpsb2FkaW5nRmFpbGVkKC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0
IGNhbmNlbGVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmFpbGVkTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBsb2FkaW5nRmFpbGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5sb2FkaW5nRmFpbGVkIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvclRleHQiLCBlcnJvclRleHQpOwogICAgaWYg
KGNhbmNlbGVkKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiY2FuY2VsZWQiLCAq
Y2FuY2VsZWQpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRp
bmdGYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Ok5ldHdvcms6OnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoLypjb25zdCBUeXBlQnVp
bGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNv
bnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5n
JiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
b3VyY2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tTWVt
b3J5Q2FjaGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RT
ZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3Jr
LnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygibG9hZGVySWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
ZG9jdW1lbnRVUkwiLCBkb2N1bWVudFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigi
dGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJpbml0
aWF0b3IiLCBpbml0aWF0b3IpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlc291cmNl
IiwgcmVzb3VyY2UpOwogICAgcmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZU1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldFdp
bGxTZW5kSGFuZHNoYWtlUmVxdWVzdCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1
ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLndlYlNvY2tldFdpbGxTZW5kSGFuZHNo
YWtlUmVxdWVzdCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJy
ZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVz
dGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVxdWVzdCIs
IHJlcXVlc3QpOwogICAgd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQod2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFt
cCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLndlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoInJlc3BvbnNlIiwgcmVzcG9uc2UpOwogICAgd2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VS
ZWNlaXZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Ok5ldHdvcms6OndlYlNvY2tldENyZWF0ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29y
azo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVy
bCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q3JlYXRlZCIpOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICB3ZWJTb2NrZXRD
cmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2ViU29j
a2V0Q2xvc2VkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCkKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gd2ViU29ja2V0Q2xvc2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB3ZWJTb2NrZXRDbG9zZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJO
ZXR3b3JrLndlYlNvY2tldENsb3NlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICB3ZWJTb2NrZXRDbG9zZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRDbG9zZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cn0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0
YWJhc2U6OmFkZERhdGFiYXNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRh
dGFiYXNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZSkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYWRkRGF0YWJhc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGFkZERhdGFiYXNlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RGF0YWJhc2UuYWRkRGF0YWJhc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgiZGF0YWJhc2UiLCBkYXRhYmFzZSk7CiAgICBhZGREYXRhYmFzZU1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFkZERhdGFiYXNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6c3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQoaW50
IHRyYW5zYWN0aW9uSWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbFRyYW5zYWN0
aW9uU3VjY2VlZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzcWxU
cmFuc2FjdGlvblN1Y2NlZWRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNl
LnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIiwgY29sdW1uTmFtZXMpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheSgidmFsdWVzIiwgdmFsdWVzKTsKICAgIHNxbFRyYW5zYWN0aW9uU3VjY2Vl
ZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNlOjpz
cWxUcmFuc2FjdGlvbkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHNxbEVycm9yKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxUcmFu
c2FjdGlvbkZhaWxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc3Fs
VHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5z
cWxUcmFuc2FjdGlvbkZhaWxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0cmFuc2FjdGlvbklkIiwgdHJhbnNhY3Rpb25JZCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiLCBzcWxFcnJvcik7CiAgICBzcWxUcmFuc2FjdGlvbkZhaWxl
ZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkluZGV4ZWREQjo6
ZGF0YWJhc2VOYW1lc0xvYWRlZChkb3VibGUgcmVxdWVzdElkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkluZGV4ZWREQjo6U2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1lcz4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VjdXJpdHlPcmlnaW5XaXRoRGF0YWJhc2VOYW1lcykK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2VOYW1lc0xvYWRlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YWJhc2VOYW1lc0xvYWRlZE1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIkluZGV4ZWREQi5kYXRhYmFzZU5hbWVzTG9hZGVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInJlcXVlc3RJZCIsIHJl
cXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic2VjdXJpdHlPcmlnaW5XaXRo
RGF0YWJhc2VOYW1lcyIsIHNlY3VyaXR5T3JpZ2luV2l0aERhdGFiYXNlTmFtZXMpOwogICAgZGF0
YWJhc2VOYW1lc0xvYWRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0
KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRhdGFiYXNlTmFtZXNMb2Fk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
ZGV4ZWREQjo6ZGF0YWJhc2VMb2FkZWQoaW50IHJlcXVlc3RJZCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpJbmRleGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZUxvYWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgZGF0YWJhc2VMb2FkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJJbmRleGVkREIuZGF0YWJhc2VMb2FkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KCJkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMiLCBkYXRhYmFzZVdpdGhPYmplY3RT
dG9yZXMpOwogICAgZGF0YWJhc2VMb2FkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkYXRhYmFz
ZUxvYWRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6SW5kZXhlZERCOjpvYmplY3RTdG9yZURhdGFMb2FkZWQoaW50IHJlcXVlc3RJZCwgLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpEYXRhRW50
cnk+ID4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBvYmplY3RTdG9yZURhdGFFbnRyaWVz
LCBib29sIGhhc01vcmUpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdFN0b3Jl
RGF0YUxvYWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgb2JqZWN0
U3RvcmVEYXRhTG9hZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5kZXhlZERCLm9i
amVjdFN0b3JlRGF0YUxvYWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eSgib2JqZWN0U3RvcmVEYXRhRW50cmllcyIsIG9iamVjdFN0b3JlRGF0YUVudHJpZXMpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJoYXNNb3JlIiwgaGFzTW9yZSk7CiAgICBvYmplY3RT
dG9yZURhdGFMb2FkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChvYmplY3RTdG9yZURhdGFMb2Fk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
ZGV4ZWREQjo6aW5kZXhEYXRhTG9hZGVkKGludCByZXF1ZXN0SWQsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVudHJ5PiA+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5kZXhEYXRhRW50cmllcywgYm9vbCBoYXNNb3JlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbmRleERhdGFMb2FkZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGluZGV4RGF0YUxvYWRlZE1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIkluZGV4ZWREQi5pbmRleERhdGFMb2FkZWQiKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImluZGV4RGF0YUVudHJpZXMiLCBpbmRleERhdGFFbnRy
aWVzKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaGFzTW9yZSIsIGhhc01vcmUpOwog
ICAgaW5kZXhEYXRhTG9hZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5kZXhEYXRhTG9hZGVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET01TdG9yYWdlOjphZGRET01TdG9yYWdl
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFnZTo6RW50cnk+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGFkZERPTVN0b3JhZ2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGFk
ZERPTVN0b3JhZ2VNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET01TdG9yYWdlLmFkZERP
TVN0b3JhZ2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3Rv
cmFnZSIsIHN0b3JhZ2UpOwogICAgYWRkRE9NU3RvcmFnZU1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGFkZERPTVN0b3JhZ2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OkRPTVN0b3JhZ2U6OnVwZGF0ZURPTVN0b3JhZ2UoaW50IHN0b3JhZ2VJZCkKewog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgdXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2UudXBkYXRlRE9NU3RvcmFnZSIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJzdG9yYWdlSWQiLCBzdG9yYWdlSWQpOwog
ICAgdXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVwZGF0ZURPTVN0b3Jh
Z2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkFw
cGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLmFwcGxpY2F0aW9uQ2FjaGVT
dGF0dXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
ImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJtYW5pZmVz
dFVSTCIsIG1hbmlmZXN0VVJMKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXMi
LCBzdGF0dXMpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6bmV0
d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiQXBwbGljYXRpb25DYWNoZS5uZXR3b3JrU3RhdGVVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc05vd09ubGluZSIsIGlzTm93T25saW5lKTsK
ICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChuZXR3b3JrU3Rh
dGVVcGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRPTTo6ZG9jdW1lbnRVcGRhdGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
b2N1bWVudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uZG9jdW1lbnRV
cGRhdGVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkb2N1bWVudFVw
ZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6c2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4gPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRDaGlsZE5vZGVz
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRDaGlsZE5vZGVzTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAgIHNldENoaWxkTm9k
ZXNNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZU1vZGlmaWVk
KGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKewog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRl
UmVtb3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRl
UmVtb3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRyaWJ1dGVSZW1vdmVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5v
ZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgYXR0
cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZVJlbW92ZWRNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6aW5s
aW5lU3R5bGVJbnZhbGlkYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PGludD4g
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJET00uaW5saW5lU3R5bGVJbnZhbGlkYXRlZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBub2RlSWRzKTsKICAgIGlubGlu
ZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbmxpbmVTdHlsZUludmFs
aWRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpET006OmNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIGNo
YXJhY3RlckRhdGEpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoYXJhY3RlckRhdGFN
b2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hhcmFjdGVy
RGF0YU1vZGlmaWVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoYXJhY3RlckRh
dGFNb2RpZmllZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJu
b2RlSWQiLCBub2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImNoYXJhY3RlckRh
dGEiLCBjaGFyYWN0ZXJEYXRhKTsKICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVDb3VudFVwZGF0ZWQo
aW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIkRPTS5jaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIGNoaWxkTm9kZUNvdW50KTsKICAgIGNoaWxkTm9kZUNv
dW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNoaWxkTm9kZUNvdW50VXBkYXRlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpj
aGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBub2RlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVJbnNl
cnRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlSW5z
ZXJ0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlSW5zZXJ0ZWQi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50Tm9kZUlk
IiwgcGFyZW50Tm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwcmV2aW91c05v
ZGVJZCIsIHByZXZpb3VzTm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJub2Rl
Iiwgbm9kZSk7CiAgICBjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNo
aWxkTm9kZUluc2VydGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpET006OmNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IG5v
ZGVJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlUmVtb3ZlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlUmVtb3ZlZE1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5jaGlsZE5vZGVSZW1vdmVkIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInBhcmVudE5vZGVJZCIsIHBhcmVudE5v
ZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAg
IGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVSZW1vdmVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpDU1M6
Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiQ1NTLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Q1NTOjpzdHlsZVNoZWV0Q2hhbmdlZCgv
KmNvbnN0IFR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRJZCYqLyBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3R5bGVTaGVldENoYW5n
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHN0eWxlU2hlZXRDaGFu
Z2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQ1NTLnN0eWxlU2hlZXRDaGFuZ2VkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
IHN0eWxlU2hlZXRJZCk7CiAgICBzdHlsZVNoZWV0Q2hhbmdlZE1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHN0eWxlU2hlZXRDaGFuZ2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpUaW1lbGluZTo6ZXZlbnRSZWNvcmRlZCgvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZWNvcmQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50UmVjb3Jk
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGV2ZW50UmVjb3JkZWRN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJUaW1lbGluZS5ldmVudFJlY29yZGVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlY29yZCIsIHJlY29yZCk7
CiAgICBldmVudFJlY29yZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZXZlbnRSZWNvcmRlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6Omdsb2JhbE9iamVjdENsZWFyZWQo
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnbG9iYWxPYmplY3RDbGVhcmVkTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBnbG9iYWxPYmplY3RDbGVhcmVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGVidWdnZXIuZ2xvYmFsT2JqZWN0Q2xlYXJlZCIp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZ2xvYmFsT2JqZWN0Q2xlYXJl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVi
dWdnZXI6OnNjcmlwdFBhcnNlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmKi8gY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBzdGFy
dExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGludCBlbmRDb2x1bW4sIGNvbnN0
IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29uc3QgU3RyaW5nKiBjb25zdCBzb3VyY2VN
YXBVUkwpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNjcmlwdFBhcnNlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0UGFyc2VkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiRGVidWdnZXIuc2NyaXB0UGFyc2VkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmlwdElkIiwgc2NyaXB0SWQpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigic3RhcnRMaW5lIiwgc3RhcnRMaW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJzdGFydENvbHVtbiIsIHN0YXJ0Q29sdW1uKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJlbmRMaW5lIiwgZW5kTGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZW5kQ29s
dW1uIiwgZW5kQ29sdW1uKTsKICAgIGlmIChpc0NvbnRlbnRTY3JpcHQpCiAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRCb29sZWFuKCJpc0NvbnRlbnRTY3JpcHQiLCAqaXNDb250ZW50U2NyaXB0KTsK
ICAgIGlmIChzb3VyY2VNYXBVUkwpCiAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNv
dXJjZU1hcFVSTCIsICpzb3VyY2VNYXBVUkwpOwogICAgc2NyaXB0UGFyc2VkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoc2NyaXB0UGFyc2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6c2NyaXB0RmFpbGVkVG9QYXJzZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UsIGludCBzdGFydExpbmUsIGlu
dCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBzY3JpcHRGYWlsZWRUb1BhcnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzY3JpcHRGYWlsZWRUb1BhcnNlTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiRGVidWdnZXIuc2NyaXB0RmFpbGVkVG9QYXJzZSIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmlwdFNvdXJjZSIsIHNjcmlwdFNvdXJjZSk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigic3RhcnRMaW5lIiwgc3RhcnRMaW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJlcnJvckxpbmUiLCBlcnJvckxpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoImVycm9yTWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7CiAgICBzY3JpcHRGYWlsZWRUb1BhcnNl
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OmJyZWFrcG9p
bnRSZXNvbHZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiov
IGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24p
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYnJlYWtwb2ludFJlc29sdmVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGVidWdnZXIuYnJlYWtwb2ludFJlc29sdmVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGJy
ZWFrcG9pbnRJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgibG9jYXRpb24iLCBsb2Nh
dGlvbik7CiAgICBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIs
IHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChicmVh
a3BvaW50UmVzb2x2ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OkRlYnVnZ2VyOjpwYXVzZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3QgU3RyaW5nJiByZWFz
b24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXVzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhdXNlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnBhdXNlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNhbGxGcmFtZXMiLCBjYWxs
RnJhbWVzKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZWFzb24iLCByZWFzb24pOwog
ICAgaWYgKGRhdGEpCiAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImRhdGEiLCBkYXRh
KTsKICAgIHBhdXNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHBhdXNlZE1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnJlc3VtZWQo
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bWVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXN1bWVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiRGVidWdnZXIucmVzdW1lZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzdW1lZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OmFkZFByb2ZpbGVI
ZWFkZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcikKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIlByb2ZpbGVyLmFkZFByb2ZpbGVIZWFkZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE9iamVjdCgiaGVhZGVyIiwgaGVhZGVyKTsKICAgIGFkZFByb2ZpbGVIZWFkZXJN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGRQcm9maWxlSGVhZGVyTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6YWRkSGVhcFNuYXBz
aG90Q2h1bmsoaW50IHVpZCwgY29uc3QgU3RyaW5nJiBjaHVuaykKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYWRkSGVhcFNuYXBzaG90Q2h1bmtNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIuYWRkSGVhcFNuYXBzaG90Q2h1bmsiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidWlkIiwgdWlkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJjaHVuayIsIGNodW5rKTsKICAgIGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoYWRkSGVhcFNuYXBzaG90Q2h1bmtNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpmaW5pc2hIZWFwU25h
cHNob3QoaW50IHVpZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZmluaXNoSGVhcFNu
YXBzaG90TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBmaW5pc2hIZWFw
U25hcHNob3RNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQcm9maWxlci5maW5pc2hIZWFw
U25hcHNob3QiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidWlk
IiwgdWlkKTsKICAgIGZpbmlzaEhlYXBTbmFwc2hvdE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGZp
bmlzaEhlYXBTbmFwc2hvdE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6UHJvZmlsZXI6OnNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGlu
ZykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2V0UmVjb3JkaW5nUHJvZmlsZU1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2V0UmVjb3JkaW5nUHJvZmlsZU1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLnNldFJlY29yZGluZ1Byb2ZpbGUi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImlzUHJvZmlsaW5n
IiwgaXNQcm9maWxpbmcpOwogICAgc2V0UmVjb3JkaW5nUHJvZmlsZU1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHNldFJlY29yZGluZ1Byb2ZpbGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpyZXNldFByb2ZpbGVzKCkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzZXRQcm9maWxlc01lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcmVzZXRQcm9maWxlc01lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIlByb2ZpbGVyLnJlc2V0UHJvZmlsZXMiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHJlc2V0UHJvZmlsZXNNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpyZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhp
bnQgZG9uZSwgaW50IHRvdGFsKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnRI
ZWFwU25hcHNob3RQcm9ncmVzc01lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJQcm9maWxlci5yZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJkb25lIiwgZG9uZSk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigidG90YWwiLCB0b3RhbCk7CiAgICByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
c01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpXb3JrZXI6
OndvcmtlckNyZWF0ZWQoaW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpbnNw
ZWN0b3JDb25uZWN0ZWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdvcmtlckNyZWF0
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdvcmtlckNyZWF0ZWRN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3JrZXIud29ya2VyQ3JlYXRlZCIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ3b3JrZXJJZCIsIHdvcmtlcklk
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRCb29sZWFuKCJpbnNwZWN0b3JDb25uZWN0ZWQiLCBpbnNwZWN0b3JDb25uZWN0ZWQp
OwogICAgd29ya2VyQ3JlYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdvcmtlckNyZWF0ZWRN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oldvcmtl
cjo6d29ya2VyVGVybWluYXRlZChpbnQgd29ya2VySWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHdvcmtlclRlcm1pbmF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHdvcmtlclRlcm1pbmF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3Jr
ZXIud29ya2VyVGVybWluYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ3b3JrZXJJZCIsIHdvcmtlcklkKTsKICAgIHdvcmtlclRlcm1pbmF0ZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZCh3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpXb3JrZXI6OmRpc3BhdGNoTWVzc2FnZUZyb21X
b3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlck1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGlzcGF0Y2hNZXNzYWdlRnJv
bVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci5kaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
IndvcmtlcklkIiwgd29ya2VySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoIm1lc3Nh
Z2UiLCBtZXNzYWdlKTsKICAgIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXJNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpXb3JrZXI6OmRpc2Nvbm5lY3RlZEZyb21X
b3JrZXIoKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkaXNjb25uZWN0ZWRGcm9tV29y
a2VyTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBkaXNjb25uZWN0ZWRG
cm9tV29ya2VyTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiV29ya2VyLmRpc2Nvbm5lY3Rl
ZEZyb21Xb3JrZXIiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRpc2Nv
bm5lY3RlZEZyb21Xb3JrZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKCgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgojZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128197</attachid>
            <date>2012-02-22 06:15:33 -0800</date>
            <delta_ts>2012-02-22 07:05:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79153-20120222181531.patch</filename>
            <type>text/plain</type>
            <size>39082</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY4ZmZkZWM3NDkyMjlh
N2NkY2M5MzM2MThhNTc4M2U4ZGFkYTRmMy4uMDNlNDAxYzY1Yjg0NGVmYTUxNTUxNGIzNWFkMThl
YzI3NzVjNmVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMi0wMi0yMSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogcmVtb3ZlIG5ldXJhbC1uZXQtc3R5bGUgY29u
c3RydWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzkxNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDUGFyYW1UeXBlIGNsYXNzIHJlbW92ZWQgY29tcGxldGVseSwgc29tZSAoInZpcnR1YWwiKSBt
ZXRob2RzIGFyZQorICAgICAgICByZW1vdmVkLiBUeXBlTW9kZWwgbm90aW9uIGlzIGFkZGVkIGlu
c3RlYWQgd2l0aCBzb21lIG1pbm9yIGhlbHBlcgorICAgICAgICBjbGFzc2VzIGFuZCBtZXRob2Rz
LgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAg
ICAgIChEb21haW5OYW1lRml4ZXMpOgorICAgICAgICAoUmF3VHlwZXMuQmFzZVR5cGUpOgorICAg
ICAgICAoUmF3VHlwZXMuU3RyaW5nKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3
X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVz
LkludC5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuTnVtYmVyKToKKyAg
ICAgICAgKFJhd1R5cGVzLk51bWJlci5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAoUmF3
VHlwZXMuQm9vbCk6CisgICAgICAgIChSYXdUeXBlcy5Cb29sLmdldF9yYXdfdHlwZV9tb2RlbCk6
CisgICAgICAgIChSYXdUeXBlcy5PYmplY3QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0Lmdl
dF9yYXdfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3
VHlwZXMuQW55LmdldF9yYXdfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJheSk6
CisgICAgICAgIChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3R5cGVfbW9kZWwpOgorICAgICAgICAo
cmVwbGFjZV9yaWdodF9zaGlmdCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsKToK
KyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlSZWZlcmVuY2UpOgorICAgICAgICAo
Q29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVJlZmVyZW5jZS5fX2luaXRfXyk6CisgICAgICAgIChD
b21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UmVmZXJlbmNlLmdldF9yZXR1cm5fdmFyX3R5cGUpOgor
ICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2RlbC5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZp
eCk6CisgICAgICAgIChDb21tYW5kUmV0dXJuUGFzc01vZGVsLmdldF9vdXRwdXRfdG9fcmF3X2V4
cHJlc3Npb24pOgorICAgICAgICAoQ29tbWFuZFJldHVyblBhc3NNb2RlbC5nZXRfb3V0cHV0X3Bh
cmFtZXRlcl90eXBlKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuZ2V0X3NldF9y
ZXR1cm5fY29uZGl0aW9uKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2lu
dGVyKToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyLl9faW5pdF9f
KToKKyAgICAgICAgKENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyLmdldF9yZXR1cm5f
dmFyX3R5cGUpOgorICAgICAgICAoVHlwZU1vZGVsKToKKyAgICAgICAgKFR5cGVNb2RlbC5SZWZQ
dHJCYXNlZCk6CisgICAgICAgIChUeXBlTW9kZWwuUmVmUHRyQmFzZWQuX19pbml0X18pOgorICAg
ICAgICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9vcHRpb25hbCk6CisgICAgICAgIChUeXBl
TW9kZWwuUmVmUHRyQmFzZWQuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAg
ICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQpOgorICAg
ICAgICAoVHlwZU1vZGVsLlJlZlB0ckJhc2VkLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9w
YXR0ZXJuKToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtKToKKyAgICAgICAgKFR5cGVNb2RlbC5F
bnVtLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbCk6Cisg
ICAgICAgIChUeXBlTW9kZWwuRW51bS5nZXRfb3B0aW9uYWwuRW51bU9wdGlvbmFsKToKKyAgICAg
ICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbC5FbnVtT3B0aW9uYWwuZ2V0X29wdGlvbmFs
KToKKyAgICAgICAgKFR5cGVNb2RlbC5FbnVtLmdldF9vcHRpb25hbC5FbnVtT3B0aW9uYWwuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwpOgorICAgICAgICAoVHlwZU1vZGVsLkVudW0uZ2V0
X2lucHV0X3BhcmFtX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlTW9kZWwuRW51bS5nZXRfZXZl
bnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAgICAgIChUeXBlTW9kZWwuRW51bS5n
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9kZWwuVmFsdWVU
eXBlKToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuX19pbml0X18pOgorICAgICAgICAo
VHlwZU1vZGVsLlZhbHVlVHlwZS5nZXRfb3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1vZGVsLlZh
bHVlVHlwZS5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCk6CisgICAgICAgIChUeXBlTW9k
ZWwuVmFsdWVUeXBlLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAg
ICAgIChUeXBlTW9kZWwuVmFsdWVUeXBlLlZhbHVlT3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5WYWx1ZU9wdGlvbmFsLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNb2Rl
bC5WYWx1ZVR5cGUuVmFsdWVPcHRpb25hbC5nZXRfb3B0aW9uYWwpOgorICAgICAgICAoVHlwZU1v
ZGVsLlZhbHVlVHlwZS5WYWx1ZU9wdGlvbmFsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVs
KToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuVmFsdWVPcHRpb25hbC5nZXRfaW5wdXRf
cGFyYW1fdHlwZV90ZXh0KToKKyAgICAgICAgKFR5cGVNb2RlbC5WYWx1ZVR5cGUuVmFsdWVPcHRp
b25hbC5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAgICAgIChUeXBl
TW9kZWwuaW5pdF9jbGFzcyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190
eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRp
bmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoVHlwZUJp
bmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGluZyk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF90eXBl
X21vZGVsKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8p
OgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5nZXRfdHlw
ZV9tb2RlbCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25f
LmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKGdldF90eXBlX21vZGVsKToK
KyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKFBsYWlu
T2JqZWN0QmluZGluZyk6CisgICAgICAgIChQbGFpbk9iamVjdEJpbmRpbmcuZ2V0X3R5cGVfbW9k
ZWwpOgorICAgICAgICAoQWRIb2NUeXBlQ29udGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
Z2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nKToKKyAg
ICAgICAgKEFycmF5QmluZGluZy5nZXRfdHlwZV9tb2RlbCk6CisgICAgICAgIChSYXdUeXBlQmlu
ZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5y
ZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAo
UmF3VHlwZUJpbmRpbmcuZ2V0X3R5cGVfbW9kZWwpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5cGVfdGV4dCk6CisgICAgICAg
IChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUuZ2V0X2NfcGFyYW1fdHlwZV90
ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuQ29tYmluZWRNb2RlLmdldF9jX3Bh
cmFtX3R5cGVfdGV4dCk6CisgICAgICAgIChHZW5lcmF0b3IuZ28pOgorICAgICAgICAoR2VuZXJh
dG9yLnByb2Nlc3NfZXZlbnQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZCk6
CisgICAgICAgIChHZW5lcmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MpOgor
ICAgICAgICAoR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jLkFkSG9j
VHlwZUNvbnRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNl
U291cmNlKToKKwogMjAxMi0wMi0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW2NyYXNoXSB1cG9uIHN0eWxlIG1vZGlmaWNh
dGlvbiBhZnRlciBuYXZpZ2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IGEwNWY0MmMyMzRkMmIyNDhkMDE0YmQwNTdj
MjYyM2Y4OTQ5NDBiNDMuLjBiYzdhMjU0YmM4YmI4ZDUyMTljMTkwYTM3MGMxM2U2YTFhNmM0MjAg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CkBAIC0xODEsMTggKzE4MSw2IEBAIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBz
a2lwX2pzX2JpbmRfZG9tYWlucyA9IHNldChbIlJ1bnRpbWUiLCAiRE9NRGVidWdnZXIiXSkKIAog
Ci1jbGFzcyBDUGFyYW1UeXBlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUs
IHNldHRlcl9mb3JtYXQ9IiVzIik6Ci0gICAgICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAg
c2VsZi5zZXR0ZXJfZm9ybWF0ID0gc2V0dGVyX2Zvcm1hdAotCi0gICAgZGVmIGdldF90ZXh0KHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KLSAgICBkZWYgZ2V0X3NldHRlcl9mb3Jt
YXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNldHRlcl9mb3JtYXQKLQotCiBjbGFzcyBS
YXdUeXBlcyhvYmplY3QpOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZ2V0KGpzb25fdHlw
ZSk6CkBAIC0yMzcsMTQgKzIyNSw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAg
IG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCiAKICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgotICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFyYW1fdHlwZQotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlv
bmFsKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBAY2xhc3NtZXRob2QK
ICAgICAgICAgZGVmIHJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgogICAg
ICAgICAgICAgaWYgbm90IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CiAgICAgICAg
ICAgICAgICAgUmF3VHlwZXMudHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xz
KQpAQCAtMjc0LDEzICsyNTQsNiBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogCiAKICAgICBj
bGFzcyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVm
IGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCBvciBwYXJhbV90eXBlID09IFBhcmFt
VHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgotICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Jl
Zl9jX3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cGxhaW5fY190eXBlCi0KICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2dl
dHRlcl9uYW1lKCk6CiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKQEAgLTMxNSw4ICsyODgs
OSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1f
cmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKIAotICAgICAg
ICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiU3RyaW5nIikKLSAgICAgICAgX3JlZl9jX3R5
cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcmIikKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6CisgICAgICAgICAgICByZXR1cm4gVHlw
ZU1vZGVsLlN0cmluZwogCiAgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKICAgICAgICAgQHN0YXRp
Y21ldGhvZApAQCAtMzU1LDcgKzMyOSw5IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKICAgICAgICAgICAgIHJl
dHVybiAiaW50IgogCi0gICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgi
aW50IikKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21v
ZGVsKCk6CisgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAogCiAgICAgY2xhc3MgTnVt
YmVyKEJhc2VUeXBlKToKICAgICAgICAgQHN0YXRpY21ldGhvZApAQCAtMzkwLDE5ICszNjYsMTEg
QEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jh
d19jX3R5cGVfdGV4dCgpOgogICAgICAgICAgICAgcmV0dXJuICJkb3VibGUiCiAKLSAgICAgICAg
ZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQorICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAg
IHJldHVybiBUeXBlTW9kZWwuTnVtYmVyCiAKICAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKLSAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFy
YW1fdHlwZSwgb3B0aW9uYWwpOgotICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5
cGUuRVZFTlQ6Ci0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCi0KICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CiAgICAgICAgICAgICBy
ZXR1cm4gIkJvb2xlYW4iCkBAIC00MTgsMTAgKzM4Niw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVj
dCk6CiAgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCiAKICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0
X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKICAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0
aG9kUGFyYW1zOgogICAgICAgICAgICAgICAgIG5hbWUgPSAiQm9vbGVhbiIKQEAgLTQ0MSwxNyAr
NDA1LDExIEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfYXJyYXlf
aXRlbV9yYXdfY190eXBlX3RleHQoKToKICAgICAgICAgICAgIHJldHVybiAiYm9vbCIKIAotICAg
ICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9vbCIpCi0gICAgICAgIF9yZWZfY190
eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3QiLCAiKiVzIikKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6CisgICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKIAogICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6Ci0g
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBh
cmFtX3R5cGUsIG9wdGlvbmFsKToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1U
eXBlLkVWRU5UIG9yIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLQogICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAg
IHJldHVybiAiT2JqZWN0IgpAQCAtNDY3LDEwICs0MjUsNiBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCiAKICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0
X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVybiAiIgogCkBAIC00
OTAsMTcgKzQ0NCwxMSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIkluc3Bl
Y3Rvck9iamVjdCIKIAotICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4iKQotICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2Rl
bC5PYmplY3QKIAogICAgIGNsYXNzIEFueShCYXNlVHlwZSk6Ci0gICAgICAgIEBjbGFzc21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBhcmFt
X3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcmVmX2NfdHlwZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKLQogICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCkBA
IC01MTYsMTAgKzQ2NCw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKIAogICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZW5lcmF0
ZV92YWxpZGF0ZV9tZXRob2Qod3JpdGVyKToKICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJz
dGF0aWMgdm9pZCBhc3NlcnRBbnkoSW5zcGVjdG9yVmFsdWUqKVxuIikKICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ7XG4iKQpAQCAtNTQyLDE5ICs0ODYsMTEgQEAgY2xhc3MgUmF3VHlwZXMo
b2JqZWN0KToKICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgog
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JWYWx1ZSIKIAotICAgICAgICBfcGxhaW5fY190
eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCi0gICAgICAgIF9yZWZf
Y190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKKyAgICAg
ICAgICAgIHJldHVybiBUeXBlTW9kZWwuQW55CiAKICAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6
Ci0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMs
IHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFy
YW1UeXBlLk9VVFBVVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUK
LSAgICAgICAgICAgIGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKLQogICAgICAgICBAc3RhdGljbWV0
aG9kCiAgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKICAgICAgICAgICAgIHJldHVybiAi
QXJyYXkiCkBAIC01NzAsMTAgKzUwNiw2IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4gIm9iamVjdCIKIAogICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgotICAgICAgICAgICAgcmV0dXJu
IFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfb3V0cHV0X2Fy
Z3VtZW50X3ByZWZpeCgpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAKQEAgLTU5MywxNSArNTI1
LDE3MSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2FycmF5X2l0
ZW1fcmF3X2NfdHlwZV90ZXh0KCk6CiAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFycmF5
IgogCi0gICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IikKLSAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiIpCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9y
YXdfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BcnJheQorCisK
K2RlZiByZXBsYWNlX3JpZ2h0X3NoaWZ0KGlucHV0X3N0cik6CisgICAgcmV0dXJuIGlucHV0X3N0
ci5yZXBsYWNlKCI+PiIsICI+ID4iKQorCisKK2NsYXNzIENvbW1hbmRSZXR1cm5QYXNzTW9kZWw6
CisgICAgY2xhc3MgQnlSZWZlcmVuY2U6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJf
dHlwZSwgc2V0X2NvbmRpdGlvbik6CisgICAgICAgICAgICBzZWxmLnZhcl90eXBlID0gdmFyX3R5
cGUKKyAgICAgICAgICAgIHNlbGYuc2V0X2NvbmRpdGlvbiA9IHNldF9jb25kaXRpb24KKworICAg
ICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X291
dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24o
KToKKyAgICAgICAgICAgIHJldHVybiAiJXMiCisKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFy
YW1ldGVyX3R5cGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlwZSArICIm
IgorCisgICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5zZXRfY29uZGl0aW9uCisKKyAgICBjbGFzcyBCeVBvaW50ZXI6Cisg
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSk6CisgICAgICAgICAgICBzZWxmLnZh
cl90eXBlID0gdmFyX3R5cGUKKworICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAg
ICAgIHJldHVybiAiJiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzIgorCisg
ICAgICAgIGRlZiBnZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYudmFyX3R5cGUgKyAiKiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKworY2xhc3MgVHlwZU1vZGVsOgorICAgIGNsYXNzIFJlZlB0ckJhc2VkOgorICAgICAg
ICBkZWYgX19pbml0X18oc2VsZiwgY2xhc3NfbmFtZSk6CisgICAgICAgICAgICBzZWxmLmNsYXNz
X25hbWUgPSBjbGFzc19uYW1lCisgICAgICAgICAgICBzZWxmLm9wdGlvbmFsID0gRmFsc2UKKwor
ICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0ID0gVHlw
ZU1vZGVsLlJlZlB0ckJhc2VkKHNlbGYuY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIHJlc3VsdC5v
cHRpb25hbCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBkZWYg
Z2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxm
Lm9wdGlvbmFsOgorICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSAiJXMiCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSBOb25lCisgICAgICAg
ICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVJlZmVyZW5jZShyZXBsYWNlX3Jp
Z2h0X3NoaWZ0KCJSZWZQdHI8JXM+IiAlIHNlbGYuY2xhc3NfbmFtZSksIHNldF9jb25kaXRpb24p
CisKKyAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gcmVwbGFjZV9yaWdodF9zaGlmdCgiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi5j
bGFzc19uYW1lKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9ldmVu
dF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICByZXR1cm4gIiVzIgor
CisgICAgY2xhc3MgRW51bToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfdHlwZV9u
YW1lKToKKyAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gYmFzZV90eXBlX25hbWUgKyAiOjpF
bnVtIgorCisgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoYmFzZV9zZWxmKToKKyAgICAgICAgICAg
IGNsYXNzIEVudW1PcHRpb25hbDoKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAg
ICAgICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKGNscyk6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMKKworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAg
ICAgIyBGSVhNRTogdG8gYmUgcmVwbGFjZWQgd2l0aCBPcHRPdXRwdXQgbW9kZWwuCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihiYXNl
X3NlbGYudHlwZV9uYW1lKQorCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsgIioiCisKKyAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VE9ETyIpCisgICAgICAgICAgICByZXR1cm4gRW51bU9wdGlvbmFsCisKKyAgICAgICAgZGVmIGdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIENv
bW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQorCisgICAgICAg
IGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYudHlwZV9uYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgIHJldHVybiAi
JXMiCisKKyAgICBjbGFzcyBWYWx1ZVR5cGU6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
eXBlX25hbWUsIGlzX2hlYXZ5KToKKyAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9u
YW1lCisgICAgICAgICAgICBzZWxmLmlzX2hlYXZ5ID0gaXNfaGVhdnkKKworICAgICAgICBkZWYg
Z2V0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuVmFsdWVPcHRpb25h
bChzZWxmKQorCisgICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihz
ZWxmLnR5cGVfbmFtZSkKKworICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChz
ZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfaGVhdnk6CisgICAgICAgICAgICAgICAgcmV0
dXJuICJjb25zdCAlcyYiICUgc2VsZi50eXBlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAg
ICAgICAgICAgIHJldHVybiAiJXMiCiAKKyAgICAgICAgY2xhc3MgVmFsdWVPcHRpb25hbDoKKyAg
ICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlKToKKyAgICAgICAgICAgICAgICBzZWxm
LmJhc2UgPSBiYXNlCisKKyAgICAgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3Jl
dHVybl9wYXNzX21vZGVsKHNlbGYpOgorICAgICAgICAgICAgICAgICMgRklYTUU6IHRvIGJlIHJl
cGxhY2VkIHdpdGggT3B0T3V0cHV0IG1vZGVsLgorICAgICAgICAgICAgICAgIHJldHVybiBDb21t
YW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihzZWxmLmJhc2UudHlwZV9uYW1lKQorCisgICAg
ICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gImNvbnN0ICVzKiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCisKKyAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVy
X2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2xhc3MoY2xzKToKKyAgICAgICAgY2xzLkJv
b2wgPSBjbHMuVmFsdWVUeXBlKCJib29sIiwgRmFsc2UpCisgICAgICAgIGNscy5JbnQgPSBjbHMu
VmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKKyAgICAgICAgY2xzLk51bWJlciA9IGNscy5WYWx1ZVR5
cGUoImRvdWJsZSIsIEZhbHNlKQorICAgICAgICBjbHMuU3RyaW5nID0gY2xzLlZhbHVlVHlwZSgi
U3RyaW5nIiwgVHJ1ZSkKKyAgICAgICAgY2xzLk9iamVjdCA9IGNscy5SZWZQdHJCYXNlZCgiSW5z
cGVjdG9yT2JqZWN0IikKKyAgICAgICAgY2xzLkFycmF5ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNw
ZWN0b3JBcnJheSIpCisgICAgICAgIGNscy5BbnkgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3BlY3Rv
clZhbHVlIikKKworVHlwZU1vZGVsLmluaXRfY2xhc3MoKQogCi1jbGFzcyBQYXJhbVR5cGUob2Jq
ZWN0KToKLSAgICBJTlBVVCA9ICJpbnB1dCIKLSAgICBPVVRQVVQgPSAib3V0cHV0IgotICAgIEVW
RU5UID0gImV2ZW50IgotICAgIFRZUEVfQlVJTERFUl9PVVRQVVQgPSAidHlwZUJ1aWxkZXJPdXRw
dXQiCiAKICMgQ29sbGVjdGlvbiBvZiBJbnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0aG9kcyB0aGF0
IGFyZSBsaWtlbHkgdG8gYmUgb3ZlcmxvYWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3MuCiAjIFdlIG11
c3QgZXhwbGljaXRseSBpbXBvcnQgYWxsIG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0aGV5IHdvbid0
IGJlIGF2YWlsYWJsZSB0byB1c2VyLgpAQCAtNzI2LDcgKzgxNCw3IEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICBkZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJs
ZSwgY29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNs
YXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKLSAgICAgICAgICAgIGZ1
bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9ICIiCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UgPSBhZF9ob2NfdHlwZV9jb250ZXh0LmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3By
ZWZpeAogICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBl
X2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZApAQCAtODMzLDIxICs5MjEsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
KyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKIAog
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUgKyAiOjpFbnVtIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQo
Y2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuZ2V0X2luX2NfdHlwZV90
ZXh0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0i
CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMpIgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJUeXBlQnVpbGRlcjo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
JXMpIgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkVudW0oaGVscGVyLmZ1bGxfbmFtZV9wcmVm
aXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVudW1CaW5kaW5nCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IGlmIGhlbHBlci5pc19hZF9ob2M6CkBAIC04NzgsMTQgKzk2NiwxNCBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmlu
ZwogCiAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZU1vZGVsLlN0cmluZworCisgICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQogCiAgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUo
KS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJh
eV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCiAKQEAgLTkzNiwxNiArMTAyNCwxNiBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LlN0cmluZwogCiAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlZhbHVlVHlwZSgiJXMlcyIgJSAoaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpLCBUcnVl
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5f
Y190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwg
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2Nf
dHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5n
ZXRfaW5fY190eXBlX3RleHQoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5
cGVkZWZTdHJpbmcKIApAQCAtMTIyMSwxMCArMTMwOSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9m
b3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFs
dWUiCiAKICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+IgotCi0gICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoY2xzKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKIApAQCAtMTIzNiw2ICsxMzIwLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAogCisgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlJlZlB0ckJhc2VkKGhlbHBlci5m
dWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKKwog
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19u
YW1lLCByZXNvbHZlX2NvbnRleHQsIGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVf
cHJlZml4KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUg
PSBwcm9wZXJ0eV9uYW1lCkBAIC0xMjQzLDYgKzEzMzEsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlX2NvbnRleHQgPSByZXNv
bHZlX2NvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkX2hvY190eXBl
X2xpc3QgPSBhZF9ob2NfdHlwZV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9IHBhcmVudF9mdWxsX25hbWVfcHJlZml4ICsg
Y2xhc3NfbmFtZSArICI6OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRh
aW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfdHlwZV9uYW1lX2ZpeChzZWxmKToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBOYW1lRml4OgpAQCAtMTI4MiwxMCArMTM3MSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQi
KQogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBl
KFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKLQotICAgICAgICAgICAgICAg
ICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVt
X2NfdHlwZV90ZXh0KGNscyk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJl
ZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCiAKQEAg
LTEyOTcsNiArMTM4MiwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAg
ICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5PYmplY3QKKwogICAgICAgICAgICAgICAgIHJl
dHVybiBQbGFpbk9iamVjdEJpbmRpbmcKICAgICAgICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUi
XSA9PSAiYXJyYXkiOgogICAgICAgICAgICAgaWYgIml0ZW1zIiBpbiBqc29uX3R5cGFibGU6CkBA
IC0xMzA1LDYgKzEzOTQsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAg
ICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgogICAgICAgICAgICAgICAgICAgICBjb250YWluZXJf
ZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKyAgICAgICAgICAgICAgICAg
ICAgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+Igog
CiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF90eXBlX25hbWVfZml4KCk6CkBAIC0xMzc5LDEyICsxNDY5LDggQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfYXJyYXlf
aXRlbV9jX3R5cGVfdGV4dCgpICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTwlcyA+ID4iICUgY2xzLnJlc29sdmVfZGF0
YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoKQotCi0gICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiVHlwZUJ1aWxkZXI6OkFycmF5PCVzID4iICUgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90
eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIlR5cGVCdWlsZGVyOjpBcnJheTwl
cz4iICUgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1f
Y190eXBlX3RleHQoKSkKIAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgpAQCAtMTM5NCw2ICsxNDgwLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5CiAKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2Fy
cmF5X2l0ZW1fY190eXBlX3RleHQoKSkKKwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJp
bmRpbmcKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2gg
dG8gcmF3IHR5cGUuCkBAIC0xNDIzLDkgKzE1MTMsNiBAQCBjbGFzcyBSYXdUeXBlQmluZGluZzoK
ICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoc2VsZik6CiAgICAgICAgIHJldHVybiBz
ZWxmLnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQogCi0gICAgZGVmIGdl
dF9pbl9jX3R5cGVfdGV4dChzZWxmLCBvcHRpb25hbCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJh
d190eXBlXy5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90
ZXh0KCkKLQogICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgp
CiAKQEAgLTE0MzUsNiArMTUyMiw5IEBAIGNsYXNzIFJhd1R5cGVCaW5kaW5nOgogICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXwog
CisgICAgZGVmIGdldF90eXBlX21vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdf
dHlwZV8uZ2V0X3Jhd190eXBlX21vZGVsKCkKKwogCiBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0
YSk6CkBAIC0yMzU5LDcgKzI0NDksNyBAQCBjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgogICAg
IGNsYXNzIFN0cmljdFBhcmFtZXRlck1vZGU6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAg
ICAgZGVmIGdldF9jX3BhcmFtX3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcpOgotICAgICAgICAgICAg
cmV0dXJuIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5
cGVfdGV4dCgpCiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKQEAgLTIz
NzIsNyArMjQ2Miw3IEBAIGNsYXNzIE1ldGhvZEdlbmVyYXRlTW9kZXM6CiAgICAgY2xhc3MgUmF3
UGFyYW1ldGVyTW9kZToKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2Nf
cGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gdHlwZV9i
aW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZ
UEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisgICAgICAgICAgICByZXR1cm4g
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9yYXdfdHlwZV9tb2RlbCgpLmdl
dF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKQogCiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZh
bHVlX3JlZik6CkBAIC0yMzgxLDggKzI0NzEsOCBAQCBjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVz
OgogICAgIGNsYXNzIENvbWJpbmVkTW9kZToKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdf
dHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZh
bHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190
eXBlX3RleHQoRmFsc2UpKQorICAgICAgICAgICAgcmV0dXJuIGdldF9hbm5vdGF0ZWRfdHlwZV90
ZXh0KHR5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfcmF3X3R5cGVfbW9kZWwo
KS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksCisgICAgICAgICAgICAgICAgdHlwZV9iaW5k
aW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpKQogCiAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CkBAIC0yNDcxLDcgKzI1NjEsNyBAQCBj
bGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRl
cmZhY2VfbGlzdC5hcHBlbmQoIiAgICBwdWJsaWM6XG4iKQogICAgICAgICAgICAgaWYgImNvbW1h
bmRzIiBpbiBqc29uX2RvbWFpbjoKICAgICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGlu
IGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
cHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25h
bWUpCisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9j
b21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25h
bWUpCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5h
cHBlbmQoIlxuICAgIHByb3RlY3RlZDpcbiIpCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAgICAgdmlydHVhbCB+JXMoKSB7IH1c
biIgJSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIH07XG5cbiIpCkBAIC0yNTI4LDI0ICsy
NjE4LDI4IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIGZvciBqc29uX3BhcmFtZXRl
ciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICByYXdfdHlw
ZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQor
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5
cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRlciwgZXZlbnRfbmFtZSwgZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCiAKLSAgICAgICAgICAgICAgICBqc29uX29w
dGlvbmFsID0gIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJb
Im9wdGlvbmFsIl0KKyAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGlu
Zy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQorICAgICAgICAgICAgICAgIHJhd190eXBlX2JpbmRpbmcg
PSBSYXdUeXBlQmluZGluZyhyYXdfdHlwZSkKIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsX21h
c2sgPSByYXdfdHlwZS5pc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpCi0gICAgICAgICAg
ICAgICAgY190eXBlID0gcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQs
IGpzb25fb3B0aW9uYWwpCisgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcGFy
YW1ldGVyLmdldCgib3B0aW9uYWwiKSkKIAogICAgICAgICAgICAgICAgIHNldHRlcl90eXBlID0g
cmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0g
b3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAotCi0gICAgICAgICAgICAgICAgcGFyYW1f
dHlwZV9iaW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9j
KGpzb25fcGFyYW1ldGVyLCBldmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3Jp
dGVyKQorICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0
X3R5cGVfbW9kZWwoKQorICAgICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVf
YmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgp
CisgICAgICAgICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0
X29wdGlvbmFsKCkKIAotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90
YXRlZF90eXBlX3RleHQoY190eXBlLmdldF90ZXh0KCksIHBhcmFtX3R5cGVfYmluZGluZy5nZXRf
aW5fY190eXBlX3RleHQoanNvbl9vcHRpb25hbCkpCisgICAgICAgICAgICAgICAgYW5ub3RhdGVk
X3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZV9tb2RlbC5nZXRfaW5wdXRf
cGFyYW1fdHlwZV90ZXh0KCksIHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgp
KQogCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5u
b3RhdGVkX3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKIAotICAgICAgICAgICAgICAgIHNldHRlcl9h
cmd1bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5nZXRfZXZlbnRf
c2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
ICAgICBpZiByYXdfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJhd190eXBlX2Jp
bmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNldHRlcl9hcmd1
bWVudAogCiAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+
c2V0JXMoXCIlc1wiLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0
dGVyX2FyZ3VtZW50KQogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgpAQCAtMjU2Niw3ICsy
NjYwLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgZG9tYWluX25hbWUsIGV2ZW50
X25hbWUsIGpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LCAiLCAiKSkpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFp
bl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKKyAgICBkZWYgcHJvY2Vzc19jb21tYW5kKGpzb25f
Y29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ludGVyZmFjZV9u
YW1lKToKICAgICAgICAganNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQog
ICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBr
JXNfJXNDbWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQogICAgICAg
ICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lKSkKQEAgLTI1OTUsMjEgKzI2ODksMjggQEAgY2xhc3MgR2VuZXJhdG9yOgog
ICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0K
ICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUo
anNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQogCi0gICAgICAgICAgICAgICAgdmFyX3R5cGUg
PSBwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5JTlBVVCwgTm9uZSkK
LSAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZSA9IHZhcl90eXBlCiAgICAgICAgICAg
ICAgICAgZ2V0dGVyX25hbWUgPSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQogCiAg
ICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikK
KworICAgICAgICAgICAgICAgIG5vbl9vcHRpb25hbF90eXBlX21vZGVsID0gcGFyYW1fcmF3X3R5
cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdl
dF9vcHRpb25hbCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
dHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsCisKICAgICAgICAgICAgICAgICBp
ZiBvcHRpb25hbDoKICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFs
dWVGb3VuZCA9IGZhbHNlO1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMg
aW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpz
b25fcGFyYW1fbmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0
ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwu
Z2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpz
b25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9u
YW1lKSkKICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmlu
XyVzIDogMCIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBQYXNzUmVm
UHRyCiAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29u
c3QgJXMqIgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNvZGUg
PSAoIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIlc1wiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFy
X3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJh
bV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uX29wdGlvbmFsX3R5cGVf
bW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBl
KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlvbmFsIHJlZnB0ci12YWx1ZXMg
YXMgTm9uTnVsbFBhc3NSZWZQdHIKICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1fcmF3X3R5
cGUuaXNfaGVhdnlfdmFsdWUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJh
bV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgogICAgICAgICAgICAgICAgICAgICBlbHNlOgpA
QCAtMjYxNyw3ICsyNzE4LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAg
bWV0aG9kX2luX2NvZGUgKz0gY29kZQogICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1f
bGlzdC5hcHBlbmQocGFyYW0pCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdl
bnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzIGluXyVzIiAlIChmb3JtYWxfcGFyYW1fdHlw
ZV9wYXR0ZXJuICUgZm9ybWFsX3BhcmFtX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1l
KSkKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlz
dC5hcHBlbmQoIiwgJXMgaW5fJXMiICUgKGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gJSBub25f
b3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9y
ZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lKSkKIAogICAgICAgICAgICAgICAgIGpz
X2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldF9qc19iaW5kX3R5cGUoKQogICAgICAgICAg
ICAgICAgIGpzX3BhcmFtX3RleHQgPSAie1wibmFtZVwiOiBcIiVzXCIsIFwidHlwZVwiOiBcIiVz
XCIsIFwib3B0aW9uYWxcIjogJXN9IiAlICgKQEAgLTI2MzcsMzUgKzI3MzgsNDcgQEAgY2xhc3Mg
R2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpzb25fcmV0
dXJuWyJuYW1lIl0KIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIm9wdGlvbmFsIiBpbiBq
c29uX3JldHVybiBhbmQganNvbl9yZXR1cm5bIm9wdGlvbmFsIl0KKyAgICAgICAgICAgICAgICBv
cHRpb25hbCA9IGJvb2woanNvbl9yZXR1cm4uZ2V0KCJvcHRpb25hbCIpKQogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dl
bmVyYXRlX2FkX2hvYyhqc29uX3JldHVybiwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1l
LCBhZF9ob2NfdHlwZV93cml0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuX3R5cGVfYmluZGlu
ZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3JldHVy
biwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGFn
ZW50X2ludGVyZmFjZV9uYW1lICsgIjo6IikKIAogICAgICAgICAgICAgICAgIHJhd190eXBlID0g
cmV0dXJuX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQogICAgICAgICAgICAgICAg
IHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKICAgICAgICAgICAgICAg
ICBpbml0aWFsaXplciA9IHJhd190eXBlLmdldF9jX2luaXRpYWxpemVyKCkKLSAgICAgICAgICAg
ICAgICB2YXJfdHlwZSA9IHJhd190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLk9VVFBV
VCwgTm9uZSkKIAotICAgICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xu
IiAlICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikK
KyAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlw
ZV9tb2RlbCgpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
ICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCisKKyAgICAgICAgICAg
ICAgICByYXdfdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwo
KQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByYXdf
dHlwZV9tb2RlbCA9IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCisKKyAgICAgICAgICAg
ICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAocmF3X3R5cGUuZ2V0X3Jhd190
eXBlX21vZGVsKCkuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zh
cl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQogICAgICAgICAgICAgICAg
IHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgp
LmdldF9hcmd1bWVudF9wcmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKICAgICAgICAgICAgICAg
ICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNl
dHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQogICAgICAgICAg
ICAgICAgIGlmIG9wdGlvbmFsOgogICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0
IG9wdGlvbmFsIHByb3Blcmx5LiBQcm9iYWJseSBhbiBhZGRpdGlvbmFsIG91dHB1dCBwYXJhbWV0
ZXIgc2hvdWxkIGJlIGluIGVhY2ggY2FzZS4KICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTog
cmVmYWN0b3IgdGhpcyBjb25kaXRpb247IGl0J3MgYSBoYWNrIG5vdy4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgb3IgdmFyX3R5cGUuZ2V0X3Rl
eHQoKS5zdGFydHN3aXRoKCJSZWZQdHI8Iik6CisgICAgICAgICAgICAgICAgICAgIHZhcl90eXBl
X3RleHQgPSByYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKQorICAgICAgICAgICAgICAgICAgICBp
ZiB2YXJfdHlwZV90ZXh0ID09ICJib29sIiBvciB2YXJfdHlwZV90ZXh0LnN0YXJ0c3dpdGgoIlJl
ZlB0cjwiKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91
dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCiAgICAgICAgICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgLy8gRklY
TUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS5cbiIgKyBjb29rCiAKLSAgICAgICAgICAgICAgICBt
ZXRob2Rfb3V0X2NvZGUgKz0gY29kZQotICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1f
bGlzdC5hcHBlbmQocGFyYW0pCisgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRf
YW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKS5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSArIHJhd190eXBl
LmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3BhcmFt
ZXRlcl90eXBlKCkpCiAKLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5v
dGF0ZWRfdHlwZV90ZXh0KHZhcl90eXBlLmdldF90ZXh0KCkgKyByYXdfdHlwZS5nZXRfb3V0cHV0
X3Bhc3NfbW9kZWwoKS5nZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdHlwZV9i
aW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChvcHRpb25hbCkpCisgICAgICAgICAgICAgICAgcGFy
YW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgIGlm
IG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gIm9wdF8iICsgcGFy
YW1fbmFtZQogCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJm
YWNlX2xpc3QuYXBwZW5kKCIsICVzIG91dF8lcyIgJSAoYW5ub3RhdGVkX3R5cGUsIGpzb25fcmV0
dXJuX25hbWUpKQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVy
ZmFjZV9saXN0LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUp
KQogICAgICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKIAorICAg
ICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSBjb2RlCisgICAgICAgICAgICAgICAgYWdl
bnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKwogICAgICAgICAgICAgICAgIGJhY2tl
bmRfanNfcmVwbHlfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVybl9uYW1l
KQogCiAgICAgICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10iICUgam9pbihiYWNrZW5kX2pz
X3JlcGx5X3BhcmFtX2xpc3QsICIsICIpCkBAIC0yNjg2LDEyICsyNzk5LDEzIEBAIGNsYXNzIEdl
bmVyYXRvcjoKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCIpID0gMDtcbiIpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJlc29sdmVf
dHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jKGpzb25fcGFyYW0sIG1ldGhvZF9uYW1lLCBkb21haW5f
bmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyKToKKyAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5l
cmF0ZV9hZF9ob2MoanNvbl9wYXJhbSwgbWV0aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV93cml0ZXIsIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6CiAgICAg
ICAgIHBhcmFtX25hbWUgPSBqc29uX3BhcmFtWyJuYW1lIl0KICAgICAgICAgYWRfaG9jX3R5cGVf
bGlzdCA9IFtdCiAKICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKICAgICAgICAgICAg
IGNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgorICAgICAg
ICAgICAgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZl
X25hbWVfcHJlZml4X3BhcmFtCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAg
ICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeCgpOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGNkZWY1ZGUxYmEwY2JjMTlj
MDgwZjQzNTU0ZTViYTI3YTc0NDYxZDkuLjY2MDllNjRlZDZkMTUxZDA4MzE0ZjkwYWVlYjJiNDE1
MDhhYzI4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzMCw3ICs1MzAsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNj
cmlwdAogICAgIC8vIERvbid0IHNlbmQgc2NyaXB0IGNvbnRlbnQgdG8gdGhlIGZyb250IGVuZCB1
bnRpbCBpdCdzIHJlYWxseSBuZWVkZWQuCiAgICAgY29uc3QgYm9vbCogaXNDb250ZW50U2NyaXB0
ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250ZW50U2NyaXB0IDogMDsK
ICAgICBTdHJpbmcgc291cmNlTWFwVVJMID0gc291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7
Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElkLCBzY3JpcHQudXJsLCBzY3Jp
cHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQu
ZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCk7CisgICAgU3RyaW5nKiBz
b3VyY2VNYXBVUkxQYXJhbSA9IHNvdXJjZU1hcFVSTC5pc051bGwoKSA/IDAgOiAmc291cmNlTWFw
VVJMOworICAgIG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJZCwgc2NyaXB0LnVybCwg
c2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQuZW5kTGluZSwgc2Ny
aXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VNYXBVUkxQYXJhbSk7CiAKICAg
ICBtX3NjcmlwdHMuc2V0KHNjcmlwdElkLCBzY3JpcHQpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>