<?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>76676</bug_id>
          
          <creation_ts>2012-01-19 17:22:47 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: add optional runtime validator</short_desc>
          <delta_ts>2012-01-25 03:55:24 -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>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>prybin</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539174</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-19 17:22:47 -0800</bug_when>
    <thetext>In some cases JSON values cannot be constructed by C++ typesafe builder. Runtime validator should be generated for such values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539187</commentid>
    <comment_count>1</comment_count>
      <attachid>123227</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-19 17:44:25 -0800</bug_when>
    <thetext>Created attachment 123227
For buildbots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539529</commentid>
    <comment_count>2</comment_count>
      <attachid>123320</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-20 08:27:36 -0800</bug_when>
    <thetext>Created attachment 123320
InspectorFrontend.h base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539531</commentid>
    <comment_count>3</comment_count>
      <attachid>123321</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-20 08:29:59 -0800</bug_when>
    <thetext>Created attachment 123321
InspectorFrontend.cpp base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539533</commentid>
    <comment_count>4</comment_count>
      <attachid>123323</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-20 08:31:33 -0800</bug_when>
    <thetext>Created attachment 123323
sample of new InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539534</commentid>
    <comment_count>5</comment_count>
      <attachid>123324</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-20 08:32:46 -0800</bug_when>
    <thetext>Created attachment 123324
sample of new InspectorFrontend.cpp 

New InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539536</commentid>
    <comment_count>6</comment_count>
      <attachid>123325</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-20 08:34:12 -0800</bug_when>
    <thetext>Created attachment 123325
Diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540531</commentid>
    <comment_count>7</comment_count>
      <attachid>123227</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-23 07:14:31 -0800</bug_when>
    <thetext>Comment on attachment 123227
For buildbots

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

Wrong alignment in generated code:
    if (it != object-&gt;end()) {
    Subtype::assertCorrectValue(RefPtr&lt;InspectorValue&gt;(it-&gt;second));
        ++count;
    }

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:180
&gt; +VALIDATOR_IFDEF_NAME = &quot;(!ASSERT_DISABLED)&quot;

should be #if !ASSERT_DISABLED (no parenthesis)

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:319
&gt; +            return &quot;assertIsString&quot;

assertIsString -&gt; assertString

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:347
&gt; +            return &quot;assertIsInt&quot;

assertInt

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:746
&gt; +                                    validator_writer.newline(&quot;void %s%s::assertCorrectValue(PassRefPtr&lt;InspectorValue&gt; value)\n&quot; % (helper.full_name_prefix_for_impl, enum_name))

Parameter type should be raw pointer, not PassRefPtr here as you don&apos;t pass ownership here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540759</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 12:53:30 -0800</bug_when>
    <thetext>&gt; Wrong alignment in generated code:
&gt;     if (it != object-&gt;end()) {
&gt;     Subtype::assertCorrectValue(RefPtr&lt;InspectorValue&gt;(it-&gt;second));
&gt;         ++count;
&gt;     }
Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:180
&gt; &gt; +VALIDATOR_IFDEF_NAME = &quot;(!ASSERT_DISABLED)&quot;
&gt; should be #if !ASSERT_DISABLED (no parenthesis)
Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:319
&gt; &gt; +            return &quot;assertIsString&quot;
&gt; assertIsString -&gt; assertString
&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:347
&gt; &gt; +            return &quot;assertIsInt&quot;
&gt; assertInt
Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:746
&gt; &gt; +                                    validator_writer.newline(&quot;void %s%s::assertCorrectValue(PassRefPtr&lt;InspectorValue&gt; value)\n&quot; % (helper.full_name_prefix_for_impl, enum_name))
&gt; Parameter type should be raw pointer, not PassRefPtr here as you don&apos;t pass ownership here.
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540761</commentid>
    <comment_count>9</comment_count>
      <attachid>123601</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 12:55:56 -0800</bug_when>
    <thetext>Created attachment 123601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540764</commentid>
    <comment_count>10</comment_count>
      <attachid>123602</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 12:58:42 -0800</bug_when>
    <thetext>Created attachment 123602
Sample of new InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540765</commentid>
    <comment_count>11</comment_count>
      <attachid>123603</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 12:59:39 -0800</bug_when>
    <thetext>Created attachment 123603
Sample of new InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540787</commentid>
    <comment_count>12</comment_count>
      <attachid>123610</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 13:30:37 -0800</bug_when>
    <thetext>Created attachment 123610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540794</commentid>
    <comment_count>13</comment_count>
      <attachid>123612</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-23 13:39:51 -0800</bug_when>
    <thetext>Created attachment 123612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541364</commentid>
    <comment_count>14</comment_count>
      <attachid>123612</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-24 08:55:08 -0800</bug_when>
    <thetext>Comment on attachment 123612
Patch

Please use static_cast on raw pointers instead of reinterpret cast on RefPtr&lt;&gt;* in cases like this:

*(reinterpret_cast&lt;RefPtr&lt;CallFrame&gt;*&gt;(&amp;object))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541459</commentid>
    <comment_count>15</comment_count>
      <attachid>123764</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-24 10:36:26 -0800</bug_when>
    <thetext>Created attachment 123764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541465</commentid>
    <comment_count>16</comment_count>
      <attachid>123766</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-24 10:43:11 -0800</bug_when>
    <thetext>Created attachment 123766
Sample of new InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542167</commentid>
    <comment_count>17</comment_count>
      <attachid>123764</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-25 03:55:09 -0800</bug_when>
    <thetext>Comment on attachment 123764
Patch

Clearing flags on attachment: 123764

Committed r105863: &lt;http://trac.webkit.org/changeset/105863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542168</commentid>
    <comment_count>18</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-25 03:55:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123227</attachid>
            <date>2012-01-19 17:44:25 -0800</date>
            <delta_ts>2012-01-23 12:55:40 -0800</delta_ts>
            <desc>For buildbots</desc>
            <filename>bug-76676-20120120054421.patch</filename>
            <type>text/plain</type>
            <size>56969</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZjM3YmIyZjk1OThiZDgyODg4ZGM3MDIzZDQ3MmFl
YjkwYzUzM2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMS0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogYWRkIG9wdGlvbmFsIHJ1bnRpbWUgdmFsaWRh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVy
YXRvciBhbGdvcml0aG0gaXMgcmVkb25lIHNpZ25pZmljYW50bHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VU
eXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RfaW1wbCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZyk6Cisg
ICAgICAgIChSYXdUeXBlcy5TdHJpbmcuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKToKKyAgICAg
ICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAg
ICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLkludC5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIpOgorICAgICAgICAoUmF3VHlwZXMuTnVt
YmVyLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkJvb2wpOgor
ICAgICAgICAoUmF3VHlwZXMuQm9vbC5nZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QpOgorICAgICAg
ICAoUmF3VHlwZXMuQm9vbC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXMuT2JqZWN0KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3VHlwZXMu
QW55LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAg
ICAgICAgKFJhd1R5cGVzLkFycmF5LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAg
IChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
VHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAg
ICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcucmVzb2x2ZV9pbm5lcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGlu
Zy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3Mu
Y3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1C
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJp
bmcpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFp
blN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6Cisg
ICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluU3RyaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3Rl
eHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBl
ZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZlN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5yZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZlN0cmluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nKToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5k
aW5nLnJlc29sdmVfaW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2Rl
Y2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcucmVzb2x2ZV9pbm5lci5Qcm9wZXJ0eURhdGEpOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcu
cmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRl
X3R5cGVfZGVjbGFyYXRpb25fLkNsYXNzQmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NC
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkNs
YXNzQmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIpOgorICAgICAgICAoZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
Z2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKEFkSG9jVHlw
ZUNvbnRleHRJbXBsLmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRl
eHRJbXBsLmdldF90eXBlX25hbWVfZml4Lk5hbWVGaXgpOgorICAgICAgICAoQWRIb2NUeXBlQ29u
dGV4dEltcGwuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeC5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBZEhvY1R5cGVDb250ZXh0SW1wbC5hZGRfdHlwZSk6CisgICAgICAgIChQbGFpbk9iamVj
dEJpbmRpbmcpOgorICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVfaW5uZXIuQWRIb2NUeXBlQ29u
dGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250
ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZXNvbHZlX2lu
bmVyLkFkSG9jVHlwZUNvbnRleHQuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeCk6CisgICAgICAg
IChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25h
bWVfZml4Lk5hbWVGaXgub3V0cHV0X2NvbW1lbnQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJl
c29sdmVfaW5uZXIuQWRIb2NUeXBlQ29udGV4dC5hZGRfdHlwZSk6CisgICAgICAgIChBcnJheUJp
bmRpbmcucmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEFycmF5QmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfbmFtZSk6CisgICAgICAgIChU
eXBlRGF0YSk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfZG9tYWluX25hbWUpOgorICAgICAgICAo
cmVzb2x2ZV9wYXJhbV90eXBlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QpOgor
ICAgICAgICAoTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChOZWVk
UnVudGltZUNhc3RSZXF1ZXN0LmFja25vd2xlZGdlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2Fz
dFJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKToKKyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzKToK
KyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzLkZvcndhcmRMaXN0ZW5lcik6CisgICAgICAgIChy
ZXNvbHZlX2FsbF90eXBlcy5Gb3J3YXJkTGlzdGVuZXIuYWRkX3R5cGVfZGF0YSk6CisgICAgICAg
IChyZXNvbHZlX2FsbF90eXBlcy5SZXNvbHZlQ29udGV4dCk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkFkSG9jVHlwZUNvbnRleHQp
OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuQWRIb2NUeXBlQ29udGV4dC5hZGRf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lcik6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lci5hZGRfdHlwZV9kYXRhKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkV2
ZW50UmVzb2x2ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuRXZl
bnRHZW5lcmF0ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXMuR2Vu
ZXJhdGVDb250ZXh0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzLmNyZWF0ZV90
eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzLmdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6c2l6ZSk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNGQzNTY2OTY5
NjMzZDRkNjFjYzlhNzVkZmViMjQ0MjYwOWNlMWQ3Zi4uMjkxZmM2MGIzZTE1NmJhNzg5MGM3Y2Vm
OTU5YzFkMjYxYWQ5OWNkZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU2LDYgKzU2LDkgQEAgVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7CiB9CiAKIAorVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFtd
KQorCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5lcyIpCkBAIC0xNzQsNiArMTc3LDggQEAgY2xh
c3MgQ2FwaXRhbGl6ZXI6CiAKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAi
RE9NIiwgIkNTUyJdKQogCitWQUxJREFUT1JfSUZERUZfTkFNRSA9ICIoIUFTU0VSVF9ESVNBQkxF
RCkiCisKIAogY2xhc3MgRG9tYWluTmFtZUZpeGVzOgogICAgIEBjbGFzc21ldGhvZApAQCAtMjQ1
LDYgKzI1MCw4IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oIlVua25vd24gdHlwZTogJXMiICUganNvbl90eXBlKQogCiAgICAgY2xhc3MgQmFz
ZVR5cGUob2JqZWN0KToKKyAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFs
c2UKKwogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUo
Y2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CiAgICAgICAgICAgICByZXR1cm4gY2xzLmRlZmF1
bHRfY19wYXJhbV90eXBlCkBAIC0yNTcsNiArMjY0LDMwIEBAIGNsYXNzIFJhd1R5cGVzKG9iamVj
dCk6CiAgICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgogICAgICAgICAg
ICAgcmV0dXJuICImIgogCisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgcmVxdWVz
dF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6CisgICAgICAgICAgICBpZiBub3QgY2xz
Lm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICBSYXdUeXBlcy50
eXBlc190b19nZW5lcmF0ZV92YWxpZGF0b3JfLmFwcGVuZChjbHMpCisgICAgICAgICAgICAgICAg
Y2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RfaW1wbCh3cml0ZXIs
IG5hbWUsIHZhcl90eXBlLCBhc19tZXRob2RfbmFtZSk6CisgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgic3RhdGljIHZvaWQgYXNzZXJ0SXMlcyhQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2
YWx1ZSlcbiIgJSBuYW1lKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICVzIHY7XG4iICUgdmFyX3R5cGUpCisgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hcyVzKCZ2KTtc
biIgJSBhc19tZXRob2RfbmFtZSkKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgQVNT
RVJUKGNhc3RSZXMpO1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9XG4iKQorCisg
ICAgdHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXyA9IFtdCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kcyhjbHMsIHdyaXRlcik6CisgICAgICAg
IGZvciB0IGluIGNscy50eXBlc190b19nZW5lcmF0ZV92YWxpZGF0b3JfOgorICAgICAgICAgICAg
aWYgdC5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgdC5nZW5l
cmF0ZV92YWxpZGF0ZV9tZXRob2Qod3JpdGVyKQorCisKICAgICBjbGFzcyBTdHJpbmcoQmFzZVR5
cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUo
Y2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBAIC0yNzksNiArMzEwLDE0IEBAIGNsYXNzIFJh
d1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6CiAgICAgICAg
ICAgICByZXR1cm4gInN0cmluZyIKIAorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVm
IGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZChjbHMsIHdyaXRlcik6CisgICAgICAgICAgICBjbHMu
Z2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kX2ltcGwod3JpdGVyLCAiU3RyaW5nIiwgIlN0cmluZyIs
ICJTdHJpbmciKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9yYXdf
dmFsaWRhdG9yX2NhbGxfdGV4dCgpOgorICAgICAgICAgICAgcmV0dXJuICJhc3NlcnRJc1N0cmlu
ZyIKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiU3RyaW5nIikKICAgICAg
ICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcmIikKIApAQCAtMjk5LDYg
KzMzOCwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCiAKKyAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QoY2xzLCB3cml0ZXIp
OgorICAgICAgICAgICAgY2xzLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZF9pbXBsKHdyaXRlciwg
IkludCIsICJpbnQiLCAiTnVtYmVyIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAgICAgIHJldHVybiAi
YXNzZXJ0SXNJbnQiCisKICAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBl
KCJpbnQiKQogCiAgICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBlKToKQEAgLTMxOCw2ICszNjUsMTQg
QEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUo
KToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQogCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCh3cml0
ZXIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAgICAgICAgZGVmYXVsdF9jX3Bh
cmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQogCiAgICAgY2xhc3MgQm9vbChCYXNlVHlw
ZSk6CkBAIC0zNDksNiArNDA0LDE0IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAg
IGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgogICAgICAgICAgICAgcmV0dXJu
IFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2Qod3JpdGVyKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIp
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3Jf
Y2FsbF90ZXh0KCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQorCiAgICAg
ICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJib29sIikKICAgICAgICAgX3JlZl9jX3R5
cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBib29sKiBjb25zdCIsICIqJXMiKQogCkBAIC0zODIsNiAr
NDQ1LDE0IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfb3V0cHV0
X2FyZ3VtZW50X3ByZWZpeCgpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcik6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKKwogICAgICAgICBfcGxhaW5fY190eXBlID0g
Q1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQogICAgICAgICBfcmVmX2NfdHlw
ZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAKQEAgLTQxMSw2
ICs0ODIsMTcgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGlzX2V2ZW50
X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCh3
cml0ZXIpOgorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInN0YXRpYyB2b2lkIGFzc2VydElz
QW55KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKVxuIikKKyAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ7XG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBO
by1vcC5cbiIpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifVxuIikKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToK
KyAgICAgICAgICAgIHJldHVybiAiYXNzZXJ0SXNBbnkiCisKICAgICAgICAgX3BsYWluX2NfdHlw
ZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQogICAgICAgICBfcmVmX2Nf
dHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IikKIApAQCAtNDQ2
LDYgKzUyOCwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X291
dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVybiAiIgogCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCh3cml0
ZXIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAgICAgICAgX3BsYWluX2NfdHlw
ZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JBcnJheT4iKQogICAgICAgICBfcmVmX2Nf
dHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKIApAQCAtNTU3
LDcgKzY0Nyw4IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICBjbGFzcyBIZWxwZXI6
CiAgICAgICAgICAgICBpc19hZF9ob2MgPSBGYWxzZQotICAgICAgICAgICAgZnVsbF9uYW1lX3By
ZWZpeCA9ICJUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCisgICAg
ICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250
ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3Jf
aW1wbCA9ICJUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCiAKICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVy
KToKQEAgLTU3OCw3ICs2NjksOCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgZGVmIGNyZWF0
ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25h
bWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgogICAgICAgICBjbGFzcyBIZWxwZXI6CiAgICAgICAg
ICAgICBpc19hZF9ob2MgPSBUcnVlCi0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4ID0gIiIK
KyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9ICIiCisgICAgICAgICAgICBm
dWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsID0gYWRfaG9jX3R5cGVfY29udGV4dC5jb250YWluZXJf
ZnVsbF9uYW1lX3ByZWZpeAogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAg
ICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01OTYsMTQgKzY4OCwzMSBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICBpZiAiZW51bSIgaW4ganNvbl90eXBhYmxlOgogCiAgICAg
ICAgICAgICAgICAgY2xhc3MgRW51bUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgor
ICAgICAgICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCisgICAg
ICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisKKyAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXVlc3Q6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gVHJ1ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQorCisgICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9y
dW50aW1lX2Nhc3QoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVy
bmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoZW51bV9iaW5k
aW5nX2Nscyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjRklYTUU6IGdlbmVyYXRlIGFkLWhv
YyBlbnVtcyB0b28gb25jZSB3ZSBmaWd1cmUgb3V0IGhvdyB0byBiZXR0ZXIgaW1wbGVtZW50IHRo
ZW0gaW4gQysrLgogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudF9vdXQgPSBoZWxwZXIu
aXNfYWRfaG9jCiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJk
X2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGFibGVbImVudW0iXQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUK
QEAgLTYyNSw2ICs3MzQsMjkgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMiICUgZW51bV9wb3MpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIsXG4iKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH07XG4iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRf
dXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGltcGxlbWVudGVkIikKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgdm9pZCBhc3NlcnRD
b3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpO1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8g
JXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9y
X3dyaXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2lt
cGwsIGVudW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBXVEY6OlN0cmluZyBzO1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpO1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIEFTU0VSVChjYXN0X3Jlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgbGVuKGVudW0pID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25fbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0
YW50KGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uX2xpc3QuYXBwZW5kKCJzID09IFwiJXNcIiIgJSBlbnVtX2l0ZW0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgQVNTRVJUKCVzKTtcbiIgJSBqb2luKGNvbmRpdGlvbl9saXN0LCAiIHx8ICIpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCJ9XG4iKQorCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIn07IC8vIHN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiXG5cbiIpCkBAIC02NDAsOCArNzcyLDEyIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCiAKICAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xh
c3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKKworICAgICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChj
bHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVs
bF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3Jf
dXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjpFbnVtIgogCiAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CkBAIC02NTYsMTAgKzc5MiwyNiBAQCBjbGFz
cyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgaWYgaGVscGVyLmlzX2FkX2hvYzoKIAog
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVf
aW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigp
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQorCiAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwpAQCAtNjc3LDExICs4MjksMjMgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgVHlwZWRlZlN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZl
X2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1
ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJhd1R5cGVzLlN0cmluZy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorCiAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5l
cmF0ZV9jb250ZXh0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBl
ci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIFN0cmluZyAiKQpAQCAt
Njk4LDYgKzg2MiwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCisgICAgICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9y
X2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdU
eXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKKwogICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
ZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5TdHJpbmcKQEAgLTcwOCw3ICs4NzYsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJXMmIiAlIChoZWxwZXIuZnVsbF9uYW1l
X3ByZWZpeCwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhf
Zm9yX3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFR5cGVkZWZTdHJpbmcKIApAQCAtNzE2LDExICs4ODQsNzEgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwYWJsZToK
IAogICAgICAgICAgICAgICAgIGNsYXNzIENsYXNzQmluZGluZzoKLSAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJh
dG9yKCk6CisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8gPSBOb25lCisgICAgICAg
ICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gRmFsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKKworICAgICAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVf
aW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Y2xzLnJlc29sdmVfZGF0YV86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBqc29uX3R5cGFibGVbInByb3Bl
cnRpZXMiXQorICAgICAgICAgICAgICAgICAgICAgICAgbWFpbiA9IFtdCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25hbCA9IFtdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hv
Y190eXBlX2xpc3QgPSBbXQorCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBw
cm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3Bb
Im5hbWUiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQg
PSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBlX25hbWUuY2xh
c3NfbmFtZSwgcmVzb2x2ZV9jb250ZXh0LCBhZF9ob2NfdHlwZV9saXN0LCBoZWxwZXIuZnVsbF9u
YW1lX3ByZWZpeF9mb3JfaW1wbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5n
ID0gcmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190
eXBlX2NvbnRleHQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRv
ciA9IGJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKHJlc29sdmVfY29udGV4dC5mb3J3YXJkX2xpc3Rl
bmVyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUHJvcGVydHlEYXRhOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBiaW5k
aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9wCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBwcm9wLmdldCgib3B0aW9uYWwiKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwuYXBwZW5kKFByb3BlcnR5RGF0YSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWluLmFwcGVuZChQcm9wZXJ0eURhdGEpCisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIFJlc29sdmVEYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJv
cGVydGllcyA9IG1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wcm9w
ZXJ0aWVzID0gb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlw
ZXMgPSBhZF9ob2NfdHlwZV9jb250ZXh0LmFkX2hvY190eXBlX2xpc3QKKworICAgICAgICAgICAg
ICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8gPSBSZXNvbHZlRGF0YQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgYWRfaG9jIGluIGFkX2hvY190eXBlX2xpc3Q6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRfaG9jLnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQor
CisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJlcXVlc3QpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IHJlcXVlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF91c2VyX3J1bnRpbWVfY2Fz
dF8gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdlKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2Fz
dCgpCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAg
ICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGNscy5yZXNvbHZlX2RhdGFfLm1haW5fcHJvcGVy
dGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5y
ZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5vcHRpb25hbF9wcm9wZXJ0aWVzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHAucGFyYW1fdHlwZV9iaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxf
cnVudGltZV9jYXN0KCkKKworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihjbGFzc19iaW5kaW5nX2Nscyk6
CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIoY2xzLCB3cml0ZXIsIGZvcndhcmRfbGlzdGVu
ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxk
ZXIoY2xzLCB3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFf
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVy
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlw
ZV9uYW1lLmNsYXNzX25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRf
dHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKQEAgLTczMCwxNCArOTU4LDEwIEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoInB1YmxpYzpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
X2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9w
ZXJ0aWVzIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVz
ID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVydGll
cyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHByb3BlcnRp
ZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGlu
IHAgYW5kIHBbIm9wdGlvbmFsIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWxfcHJvcGVydGllcy5hcHBlbmQocCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFpbl9wcm9wZXJ0aWVzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBlczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9j
X3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlw
ZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKAogIiIiICAgIGVudW0gewpAQCAtNzQ1LDEw
ICs5NjksMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogIiIiKQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXMgPSBbXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBsZW4obWFpbl9wcm9wZXJ0aWVzKSA+IDA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSA+
IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBtYWluX3Byb3BlcnRpZXM6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lID0gQ2FwaXRh
bGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwWyJuYW1lIl0pICsgIlNldCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9k
YXRhLm1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHBy
b3BfZGF0YS5wWyJuYW1lIl0pICsgIlNldCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zLmFwcGVuZChpdGVtX25hbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMg
PSAxIDw8ICVzLFxuIiAlIChpdGVtX25hbWUsIHBvcykpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zICs9IDEKQEAgLTc4MCwxMiArMTAwNCwxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAiIiIgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsi
bmFtZSJdCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBl
X2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBp
biBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRp
bGluZSgiIiIKQEAgLTgwNCwxMCArMTAyNiw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1z
W3Bvc10pKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcyArPSAxCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgpAQCAtODI5LDggKzEwNDcsOCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLypcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3Vs
dCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJc
biAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAg
ICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKQEAgLTg0MCwxMSAr
MTA1OCw5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICB9CiAiIiIgJSBjbGFzc19uYW1lKQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG9wdGlvbmFsX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUg
PSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhl
ZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2Jp
bmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29udGV4dF9kb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBy
b3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVs
X2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcGFyYW1fdHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9k
ZXMocGFyYW1fdHlwZV9iaW5kaW5nKToKQEAgLTg1MiwzOCArMTA2OCw1OCBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVf
dGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhc
IiVzXCIsICVzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJf
bmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRf
c2V0dGVyX25hbWUoKSwgcHJvcF9kYXRhLnBbIm5hbWUiXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xp
c3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJf
bmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdDo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFt
ZSwgd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmRfbGlzdGVuZXIg
PSBmb3J3YXJkX2xpc3RlbmVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihz
ZWxmLnByb3BlcnR5X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNs
YXNzX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUg
Y2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUKGNhc3RSZXMpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgYXNzZXJ0
Q29ycmVjdFZhbHVlKG9iamVjdCk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9O
QU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5zcGVjdG9yT2Jq
ZWN0KSwgdHlwZV9jYXN0X3Byb2JsZW0pO1xuIiAlIGNsYXNzX25hbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICByZXR1cm4gKihy
ZWludGVycHJldF9jYXN0PFJlZlB0cjwlcz4qPigmb2JqZWN0KSk7XG4iICUgY2xhc3NfbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
fVxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
IlxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc19iaW5kaW5n
X2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZf
TkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBn
ZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRD
b3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUgKGhlbHBl
ci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29s
IGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJU
KGNhc3RSZXMpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQ7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiBy
ZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGl0ID0gb2JqZWN0LT5m
aW5kKFwiJXNcIik7XG4iICUgcHJvcF9kYXRhLnBbIm5hbWUiXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NF
UlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICVzKFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpO1xuIiAlIHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRp
bmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaW50IGNvdW50ID0gJXM7
XG4iICUgbGVuKHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXMpKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRp
b25hbF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGl0ID0gb2JqZWN0LT5maW5kKFwiJXNcIik7
XG4iICUgcHJvcF9kYXRhLnBbIm5hbWUiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpZiAoaXQgIT0gb2JqZWN0
LT5lbmQoKSkge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAlcyhSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0
LT5zZWNvbmQpKTtcbiIgJSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0
b3JfY2FsbF90ZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICsrY291bnQ7XG4iKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIH1cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVChjb3VudCA9PSBvYmplY3QtPnNpemUoKSk7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCJ9XG4iKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBvdXRwdXRfY29tbWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAnJXMnIHdoaWxlIGdlbmVyYXRpbmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2Vs
Zi5jbGFzc19uYW1lKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5hbWVGaXgKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9n
ZW5lcmF0ZV90eXBlX2J1aWxkZXIoc2VsZiwgY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHNlbGYud3JpdGVyLCBzZWxmLmZvcndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6CkBAIC05MDIsOSArMTEz
OCwxMyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb2RlR2VuZXJhdG9yCiAKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNl
ICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisK
ICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4ICsgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwiICsgaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCiAKICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oKToKQEAgLTkxNCwxNCArMTE1NCw1MSBAQCBjbGFzcyBUeXBlQmluZGlu
Z3M6CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCByZXNvbHZl
X2NvbnRleHQsIGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4KToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9wZXJ0eV9u
YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3Nf
bmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250ZXh0ID0g
cmVzb2x2ZV9jb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZF9ob2Nf
dHlwZV9saXN0ID0gYWRfaG9jX3R5cGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1lX3ByZWZp
eCArIGNsYXNzX25hbWUgKyAiOjoiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
dHlwZV9uYW1lX2ZpeChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
YW1lRml4OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2Fw
aXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBh
ZnRlciBwcm9wZXJ0eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5w
cm9wZXJ0eV9uYW1lLCBzZWxmLmNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5hbWVGaXgKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90
eXBlKHNlbGYsIGJpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRf
aG9jX3R5cGVfbGlzdC5hcHBlbmQoYmluZGluZykKKwogICAgICAgICAgICAgICAgIHJldHVybiBD
bGFzc0JpbmRpbmcKICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICBjbGFzcyBQ
bGFpbk9iamVjdEJpbmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVf
Y2FzdChyZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0
X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwor
CiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwog
CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKwogICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMs
IG9wdGlvbmFsKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5n
ZXRfdGV4dCgpCkBAIC05MzgsMTIgKzEyMTUsNjcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAg
ICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6CiAKICAgICAgICAgICAg
IGNsYXNzIEFycmF5QmluZGluZzoKLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIHJl
c29sdmVfZGF0YV8gPSBOb25lCisgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1l
X2Nhc3RfID0gRmFsc2UKKworICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAg
ICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAg
ICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4KKworICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQorICAgICAg
ICAgICAgICAgICAgICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzX25hbWUgPSAiSXRlbSIKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOYW1lRml4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5kKGJp
bmRpbmcpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYmluZGluZyA9IHJlc29sdmVf
cGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFk
SG9jVHlwZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisK
KyAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UocmVzb2x2
ZV9jb250ZXh0LmZvcndhcmRfbGlzdGVuZXIpCisKKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
UmVzb2x2ZURhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9
IGl0ZW1fYmluZGluZworICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9
IGFkX2hvY190eXBlcworCisgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0g
UmVzb2x2ZURhdGEKKworICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6
CisgICAgICAgICAgICAgICAgICAgICAgICB0LnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0
KQorCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIHJl
cXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKKworICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9y
dW50aW1lX2Nhc3RfID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRh
Xy5pdGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisKKyAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVf
Z2VuZXJhdG9yKGFycmF5X2JpbmRpbmdfY2xzKToKIAogICAgICAgICAgICAgICAgICAgICBjbGFz
cyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIs
IGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRl
X3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCkBAIC05NTYsMjcgKzEyODgsMTQgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3Jp
dGVyKCIgICAgIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVtcyIgaW4g
anNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIEFk
SG9jVHlwZUNvbnRleHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5
cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBOYW1lRml4OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc19uYW1lID0gIkl0ZW0iCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlX2RhdGEgPSBhcnJheV9iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFf
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZp
eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2NfdHlwZSBpbiByZXNvbHZl
X2RhdGEuYWRfaG9jX3R5cGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVp
bGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcihjb2RlX2dl
bmVyYXRvcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZm9yd2Fy
ZF9saXN0ZW5lcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVf
YmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRl
eHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlX2Jp
bmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRp
bmcKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1l
dGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKGl0ZW1fdHlwZV9iaW5kaW5nKToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0i
KQpAQCAtOTkyLDkgKzEzMTEsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgJXMoKSk7XG4iICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29k
ZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJh
dG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdp
c3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBhcnJheV9iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElE
QVRPUl9JRkRFRl9OQU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IGdl
bmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVj
dFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKVxuIiAlIChoZWxwZXIuZnVs
bF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcnJheTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c0FycmF5KCZhcnJheSk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlQoY2FzdFJlcyk7XG4iKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHtcbiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAg
ICAlcyhhcnJheS0+Z2V0KGkpKTtcbiIgJSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcu
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG4iKQogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07XG5cbiIpCiAKQEAgLTEwMTUs
OSArMTM0NiwxMyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIENvZGVHZW5lcmF0b3IKIAorICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90
eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKKwogICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3Rl
eHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFzc1JlZlB0
cjwlcyVzPiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4iICUg
KGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19u
YW1lKQogCiAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRl
ZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgpAQCAtMTAzOCw5ICsxMzcz
LDIxIEBAIGNsYXNzIFJhd1R5cGVCaW5kaW5nOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdf
dHlwZSk6CiAgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKIAorICAgIGRlZiByZXNv
bHZlX2lubmVyKHNlbGYsIHJlc29sdmVfY29udGV4dCk6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHNlbGYsIHJlcXVlc3QpOgorICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdChzZWxmKToKKyAgICAgICAgc2VsZi5yYXdfdHlwZV8ucmVxdWVzdF9yYXdfaW50
ZXJuYWxfcnVudGltZV9jYXN0KCkKKwogICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6
CiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9j
YWxsX3RleHQoKQorCiAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChzZWxmLCBvcHRpb25hbCk6
CiAgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXy5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlw
ZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKIApAQCAtMTA4NSw2ICsxNDMyLDEyIEBAIGNs
YXNzIFR5cGVEYXRhKG9iamVjdCk6CiAgICAgZGVmIGdldF9qc29uX3R5cGUoc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLmpzb25fdHlwZV8KIAorICAgIGRlZiBnZXRfbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuanNvbl90eXBlX1siaWQiXQorCisgICAgZGVmIGdldF9kb21haW5f
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4iXQor
CiAKIGNsYXNzIERvbWFpbkRhdGE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZG9tYWlu
KToKQEAgLTExMzUsOSArMTQ4OCw3IEBAIGRlZiByZXNvbHZlX3BhcmFtX3R5cGUoanNvbl9wYXJh
bWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAgICAg
cmV0dXJuIHR5cGVfZGF0YS5nZXRfYmluZGluZygpCiAgICAgZWxpZiAidHlwZSIgaW4ganNvbl9w
YXJhbWV0ZXI6CiAgICAgICAgIHJlc3VsdCA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfYWRfaG9jX3R5
cGVfZGVjbGFyYXRpb24oanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KQotICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHJlc3VsdC5nZXRfY29kZV9n
ZW5lcmF0b3IoKQotICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQuY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9nZW5lcmF0b3Ip
CisgICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQuYWRkX3R5cGUocmVzdWx0KQogICAgICAgICBy
ZXR1cm4gcmVzdWx0CiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3du
IHR5cGUiKQpAQCAtMTcxNiw2ICsyMDY3LDEwIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgewogCiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCisjaWYgIiIiICsg
VkFMSURBVE9SX0lGREVGX05BTUUgKyAiIiIKKyR2YWxpZGF0b3JDb2RlCisjZW5kaWYgLy8gIiIi
ICsgVkFMSURBVE9SX0lGREVGX05BTUUgKyAiIiIKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE3MzcsNiArMjA5Miw2MyBAQCAkZG9t
YWluSW5pdGlhbGl6ZXJzCiB0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCiAKIAorY2xhc3Mg
TmVlZFJ1bnRpbWVDYXN0UmVxdWVzdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
IHNlbGYuYWNrXyA9IE5vbmUKKworICAgIGRlZiBhY2tub3dsZWRnZShzZWxmKToKKyAgICAgICAg
c2VsZi5hY2tfID0gVHJ1ZQorCisgICAgZGVmIGlzX2Fja25vd2xlZGdlZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuYWNrXworCisKK2RlZiByZXNvbHZlX2FsbF90eXBlcygpOgorICAgIHJ1
bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0cyA9IHt9CisgICAgZm9yIHR5cGVfbmFtZSBpbiBU
WVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQ6CisgICAgICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0
ZV9yZXF1ZXN0c1t0eXBlX25hbWVdID0gTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdCgpCisKKyAgICBj
bGFzcyBGb3J3YXJkTGlzdGVuZXI6CisgICAgICAgIHR5cGVfZGF0YV9zZXQgPSBzZXQoKQorICAg
ICAgICBhbHJlYWR5X2RlY2xhcmVkX3NldCA9IHNldCgpCisKKyAgICAgICAgQGNsYXNzbWV0aG9k
CisgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKGNscywgdHlwZV9kYXRhKToKKyAgICAgICAgICAg
IGlmIHR5cGVfZGF0YSBub3QgaW4gY2xzLmFscmVhZHlfZGVjbGFyZWRfc2V0OgorICAgICAgICAg
ICAgICAgIGNscy50eXBlX2RhdGFfc2V0LmFkZCh0eXBlX2RhdGEpCisKKyAgICBjbGFzcyBSZXNv
bHZlQ29udGV4dDoKKyAgICAgICAgZm9yd2FyZF9saXN0ZW5lciA9IEZvcndhcmRMaXN0ZW5lcgor
CisgICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAgZm9y
IHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygpOgorICAgICAgICAgICAgIyBEbyBub3Qg
Z2VuZXJhdGUgZm9yd2FyZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgorICAgICAgICAgICAg
Rm9yd2FyZExpc3RlbmVyLmFscmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCisKKyAg
ICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQorICAgICAgICAgICAg
YmluZGluZy5yZXNvbHZlX2lubmVyKFJlc29sdmVDb250ZXh0KQorCisgICAgZm9yIGRvbWFpbl9k
YXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21h
aW5fZGF0YS50eXBlcygpOgorICAgICAgICAgICAgZnVsbF90eXBlX25hbWUgPSAiJXMuJXMiICUg
KHR5cGVfZGF0YS5nZXRfZG9tYWluX25hbWUoKSwgdHlwZV9kYXRhLmdldF9uYW1lKCkpCisgICAg
ICAgICAgICByZXF1ZXN0ID0gcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzLnBvcChmdWxs
X3R5cGVfbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2Jp
bmRpbmcoKQorICAgICAgICAgICAgaWYgcmVxdWVzdDoKKyAgICAgICAgICAgICAgICBiaW5kaW5n
LnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCkKKworICAgICAgICAgICAgaWYgcmVx
dWVzdCBhbmQgbm90IHJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKCk6CisgICAgICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QgaW4gIiArIGZ1
bGxfdHlwZV9uYW1lKQorCisgICAgZm9yIGZ1bGxfdHlwZV9uYW1lIGluIHJ1bnRpbWVfY2FzdF9n
ZW5lcmF0ZV9yZXF1ZXN0czoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2Vu
ZXJhdGUgcnVudGltZUNhc3QuIFR5cGUgIiArIGZ1bGxfdHlwZV9uYW1lICsgIiBub3QgZm91bmQi
KQorCisgICAgcmV0dXJuIEZvcndhcmRMaXN0ZW5lcgorCisKK2dsb2JhbF9mb3J3YXJkX2xpc3Rl
bmVyID0gcmVzb2x2ZV9hbGxfdHlwZXMoKQorCisKKwogZGVmIGdldF9hbm5vdGF0ZWRfdHlwZV90
ZXh0KHJhd190eXBlLCBhbm5vdGF0ZWRfdHlwZSk6CiAgICAgaWYgYW5ub3RhdGVkX3R5cGUgIT0g
cmF3X3R5cGU6CiAgICAgICAgIHJldHVybiAiLyolcyovICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwg
cmF3X3R5cGUpCkBAIC0xODE2LDkgKzIyMjgsMTQgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGZy
b250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCiAgICAgdHlwZV9idWlsZGVyX2ZyYWdt
ZW50cyA9IFtdCiAgICAgdHlwZV9idWlsZGVyX2ZvcndhcmRzID0gW10KKyAgICB2YWxpZGF0b3Jf
aW1wbF9saXN0ID0gW10KKyAgICB2YWxpZGF0b3JfaW1wbF9yYXdfdHlwZXNfbGlzdCA9IFtdCisK
IAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZ28oKToKKyAgICAgICAgR2VuZXJhdG9yLnZh
bGlkYXRvcl9pbXBsX2xpc3QuYXBwZW5kKEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9yYXdfdHlw
ZXNfbGlzdCkKKwogICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc190eXBlcyh0eXBlX21hcCkKIAog
ICAgICAgICBmaXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0ID0gWwpAQCAtMTkwNSwxMyAr
MjMyMiwxMCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmV2
ZXJzZWQoc29ydGVkX2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QpOgogICAgICAgICAgICAgICAg
ICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UobCkKIAorICAgICAgICBSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKFdyaXRlcihHZW5lcmF0b3IudmFsaWRhdG9yX2ltcGxf
cmF3X3R5cGVzX2xpc3QsICIiKSkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vz
c19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0
aW9uX2xpbmVzKToKLSAgICAgICAgY2xhc3MgTm9PcEZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKHR5cGVfZGF0
YSk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCiAgICAgICAgIGV2ZW50X25hbWUgPSBqc29uX2V2
ZW50WyJuYW1lIl0KICAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQogICAgICAgICBtZXRob2Rf
bGluZV9saXN0ID0gW10KQEAgLTE5MzUsNyArMjM0OSwxMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAK
ICAgICAgICAgICAgICAgICBvcHRpb25hbCA9IG9wdGlvbmFsX21hc2sgYW5kIGpzb25fb3B0aW9u
YWwKIAorICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBbXQorCiAgICAgICAgICAg
ICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCisKICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVf
bmFtZV9maXgoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6CkBAIC0x
OTQ4LDExICsyMzY2LDMwIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOYW1lRml4CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9n
ZW5lcmF0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgTm9PcEZvcndhcmRMaXN0ZW5lcikK
KyAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdC5hcHBlbmQoYmluZGluZykKIAogICAgICAgICAg
ICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFt
ZXRlciwgZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCiAKKyAgICAgICAgICAgICAgICBj
bGFzcyBFdmVudEZvcndhcmRMaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgY2xhc3MgRXZl
bnRSZXNvbHZlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9saXN0ZW5lciA9
IEV2ZW50Rm9yd2FyZExpc3RlbmVyCisKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiBhZF9o
b2NfdHlwZV9saXN0OgorICAgICAgICAgICAgICAgICAgICB0eXBlLnJlc29sdmVfaW5uZXIoRXZl
bnRSZXNvbHZlQ29udGV4dCkKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50R2VuZXJhdGVD
b250ZXh0OgorICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gIm5vdCBzdXBw
b3J0ZWQgaW4gRXZlbnRHZW5lcmF0ZUNvbnRleHQiCisKKyAgICAgICAgICAgICAgICBmb3IgdHlw
ZSBpbiBhZF9ob2NfdHlwZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IgPSB0
eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRv
cjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxk
ZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBFdmVudEdlbmVyYXRlQ29udGV4dCkKKwogICAgICAgICAg
ICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQoY190eXBlLmdl
dF90ZXh0KCksIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoanNvbl9vcHRp
b25hbCkpCiAKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAl
IChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1ldGVyX25hbWUpKQpAQCAtMjA3OCwxNCArMjUxNSw4IEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICBkZWYgcHJvY2Vzc190eXBlcyh0eXBlX21hcCk6CiAgICAg
ICAgIG91dHB1dCA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzCiAKLSAgICAgICAg
Y2xhc3MgRm9yd2FyZExpc3RlbmVyOgotICAgICAgICAgICAgdHlwZV9kYXRhX3NldCA9IHNldCgp
Ci0gICAgICAgICAgICBhbHJlYWR5X2RlY2xhcmVkX3NldCA9IHNldCgpCi0KLSAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEoY2xzLCB0eXBlX2Rh
dGEpOgotICAgICAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBub3QgaW4gY2xzLmFscmVhZHlfZGVj
bGFyZWRfc2V0OgotICAgICAgICAgICAgICAgICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlw
ZV9kYXRhKQorICAgICAgICBjbGFzcyBHZW5lcmF0ZUNvbnRleHQ6CisgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyID0gV3JpdGVyKEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0LCAiIikK
IAogICAgICAgICBkZWYgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXQsIHR5cGVfZGF0YV9j
YWxsYmFjayk6CiAgICAgICAgICAgICB3cml0ZXIgPSBXcml0ZXIob3V0LCAiIikKQEAgLTIxMTks
MTMgKzI1NTAsMTEgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgIGRlZiBjcmVhdGVfdHlw
ZV9idWlsZGVyX2NhbGxlcihnZW5lcmF0ZV9wYXNzX2lkKToKICAgICAgICAgICAgIGRlZiBjYWxs
X3R5cGVfYnVpbGRlcih0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAgICAgICAg
ICMgRG8gbm90IGdlbmVyYXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdlci4KLSAg
ICAgICAgICAgICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5
cGVfZGF0YSkKLQogICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gdHlwZV9kYXRhLmdl
dF9iaW5kaW5nKCkuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKICAgICAgICAgICAgICAgICBpZiBjb2Rl
X2dlbmVyYXRvciBhbmQgZ2VuZXJhdGVfcGFzc19pZCA9PSBjb2RlX2dlbmVyYXRvci5nZXRfZ2Vu
ZXJhdGVfcGFzc19pZCgpOgogICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXJfZ2V0
dGVyKCkKLSAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyKHdyaXRlciwgRm9yd2FyZExpc3RlbmVyKQorCisgICAgICAgICAgICAgICAgICAgIGNv
ZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIEdlbmVyYXRlQ29udGV4
dCkKICAgICAgICAgICAgIHJldHVybiBjYWxsX3R5cGVfYnVpbGRlcgogCiAgICAgICAgIGdlbmVy
YXRlX2FsbF9kb21haW5zX2NvZGUob3V0cHV0LCBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxlcihU
eXBlQnVpbGRlclBhc3MuTUFJTikpCkBAIC0yMTMzLDcgKzI1NjIsNyBAQCBjbGFzcyBHZW5lcmF0
b3I6CiAgICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy5cbiIpCiAKICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRf
Y2FsbGJhY2sodHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgIGlmIHR5cGVf
ZGF0YSBpbiBGb3J3YXJkTGlzdGVuZXIudHlwZV9kYXRhX3NldDoKKyAgICAgICAgICAgIGlmIHR5
cGVfZGF0YSBpbiBnbG9iYWxfZm9yd2FyZF9saXN0ZW5lci50eXBlX2RhdGFfc2V0OgogICAgICAg
ICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQogICAgICAgICAgICAg
ICAgIGJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJh
dGlvbih3cml0ZXJfZ2V0dGVyKCkpCiAgICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUo
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgZ2VuZXJhdGVfZm9yd2FyZF9jYWxsYmFj
aykKQEAgLTIxODgsNyArMjYxNyw4IEBAIGJhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5i
YWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAogICAgIG1l
dGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpLAotICAgIGVu
dW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSkp
CisgICAgZW51bUNvbnN0YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRf
Y29kZSgpLAorICAgIHZhbGlkYXRvckNvZGU9am9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZh
bGlkYXRvcl9pbXBsX2xpc3QpLCAiIikpKQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBs
YXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0
aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3Qs
ICJcbiIpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4
IGUxMDBhZGVhZDIxZDAwZTYyMWUzMmU2MDllMTk1NmJhZTk5Y2NiZTcuLjcwN2MyNzZhZWFlNjll
ZjdmNTNmZTU4YjNiYTBmMWYzYjYyZDM2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmgKQEAgLTIwNSw2ICsyMDUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogCisgICAg
aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CisKIHByb3RlY3RlZDoK
ICAgICBJbnNwZWN0b3JPYmplY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123320</attachid>
            <date>2012-01-20 08:27:36 -0800</date>
            <delta_ts>2012-01-20 08:27:36 -0800</delta_ts>
            <desc>InspectorFrontend.h base version</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>163523</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCi8vIFR5cGVkZWZzLgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0g
Ly8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQovLyBFbmQgb2YgdHlwZWRlZnMuCgoKClN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CgpuYW1lc3BhY2UgTWVtb3J5IHsKLyogTnVt
YmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8KY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEg
PDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZU5hbWVTZXQgfCBDb3VudFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5v
ZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9k
ZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlfbm9kZU5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb3VudFNldD4mIHNldENvdW50KGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb3Vu
dFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3Vu
dD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBv
ZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IENvdW50U2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0
eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExpc3RlbmVyQ291bnQ+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKSk7CiAgICB9Cn07Cgov
KiBDaGFyYWN0ZXIgZGF0YSBzdGF0aXN0aWNzIGZvciB0aGUgcGFnZS4gKi8KY2xhc3MgU3RyaW5n
U3RhdGlzdGljcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRG9tU2V0ID0gMSA8PCAwLAogICAgICAg
IEpzU2V0ID0gMSA8PCAxLAogICAgICAgIFNoYXJlZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoRG9tU2V0IHwgSnNTZXQgfCBTaGFyZWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdTdGF0
aXN0aWNzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG9tU2V0PiYgc2V0
RG9tKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEb21TZXQpLCBwcm9wZXJ0eV9kb21fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJkb20iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RG9tU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEpzU2V0PiYg
c2V0SnMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEpzU2V0KSwgcHJvcGVydHlfanNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJqcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxKc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaGFyZWRTZXQ+
JiBzZXRTaGFyZWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNoYXJlZFNldCksIHByb3BlcnR5X3NoYXJlZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNoYXJlZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTaGFyZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8U3RyaW5nU3RhdGlzdGljcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFN0cmluZ1N0YXRp
c3RpY3M+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiByZXN1bHQgPSBTdHJpbmdTdGF0aXN0aWNzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXREb20o
Li4uKQogICAgICogICAgIC5zZXRKcyguLi4pCiAgICAgKiAgICAgLnNldFNoYXJlZCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFN0cmluZ1N0YXRp
c3RpY3MoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNvdW50
JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok1lbW9yeTo6Tm9kZUNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0K
CiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBjcmVhdGUoKSB7CiAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGlzdGVuZXJDb3VudCcgd2hpbGUgZ2Vu
ZXJhdGluZyBET01Hcm91cC4KICAgIGNsYXNzIExpc3RlbmVyQ291bnQgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBMaXN0ZW5lckNvdW50KCkgeyB9CgogICAg
cHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1l
bW9yeTo6TGlzdGVuZXJDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9
CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMaXN0ZW5lckNvdW50KCkpOwogICAgICAgIH0K
ICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNpemVT
ZXQgPSAxIDw8IDAsCiAgICAgICAgVGl0bGVTZXQgPSAxIDw8IDEsCiAgICAgICAgTm9kZUNvdW50
U2V0ID0gMSA8PCAyLAogICAgICAgIExpc3RlbmVyQ291bnRTZXQgPSAxIDw8IDMsCiAgICAgICAg
QWxsRmllbGRzU2V0ID0gKFNpemVTZXQgfCBUaXRsZVNldCB8IE5vZGVDb3VudFNldCB8IExpc3Rl
bmVyQ291bnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxET01Hcm91cD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgRE9NR3JvdXA7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTaXplU2V0PiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGl0bGVTZXQ+JiBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpdGxlU2V0KSwgcHJv
cGVydHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ0aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaXRsZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlQ291bnRTZXQ+JiBzZXRO
b2RlQ291bnQoLypQYXNzUmVmUHRyPE5vZGVDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOb2RlQ291bnRTZXQpLCBwcm9wZXJ0eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOb2RlQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTGlzdGVuZXJDb3VudFNldD4mIHNldExpc3RlbmVyQ291bnQoLypQYXNzUmVm
UHRyPExpc3RlbmVyQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlzdGVuZXJDb3Vu
dFNldCksIHByb3BlcnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3VwPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxET01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNl
dE5vZGVDb3VudCguLi4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91cCgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9
IC8vIE1lbW9yeQoKbmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFzIGl0IHdhcyBw
ZXJjZWl2ZWQgYnkgdGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNvdXJjZVR5cGUg
ewogICAgZW51bSBFbnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAgU3R5bGVzaGVl
dCA9IDEsCiAgICAgICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAgICAgIFNjcmlw
dCA9IDQsCiAgICAgICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAogICAgICAgIE90
aGVyID0gNywKICAgIH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9ybWF0aW9u
IGFib3V0IHRoZSBGcmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0gMSA8PCAxLAog
ICAgICAgIFVybFNldCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEgPDwgMywKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNldCB8IE1pbWVU
eXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8RnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBz
ZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBM
b2FkZXJJZFNldD4mIHNldExvYWRlcklkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6Okxv
YWRlcklkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRTZXQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvYWRlcklkU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVy
bFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBz
ZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBlU2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1l
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZy
YW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0gRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9hZGVySWQoLi4uKQogICAgICogICAgIC5zZXRV
cmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lKCkpKTsKICAgIH0KCiAgICB2b2lkIHNl
dFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2VjdXJpdHlPcmlnaW4iLCB2YWx1ZSk7CiAg
ICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdp
dGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8KY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVzb3VyY2VUcmVlLgog
ICAgY2xhc3MgUmVzb3VyY2VzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVzb3VyY2VzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIGNsYXNzIEl0ZW0g
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIGVu
dW0gewogICAgICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICAgICAgICAgVXJs
U2V0ID0gMSA8PCAwLAogICAgICAgICAgICAgICAgVHlwZVNldCA9IDEgPDwgMSwKICAgICAgICAg
ICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAyLAogICAgICAgICAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFVybFNldCB8IFR5cGVTZXQgfCBNaW1lVHlwZVNldCkKICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICAgICAgICAgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8SXRlbT4gcHRyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEl0ZW07CiAgICAgICAgICAgIHB1
YmxpYzoKICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBz
ZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwi
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51
bSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlw
ZVNldD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
eXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAg
ICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlwZVNldCksIHByb3BlcnR5X21pbWVUeXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
aW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1p
bWVUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPEl0ZW0+JiAoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJdGVtPiAoKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SXRlbT4oKnRoaXMpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8SXRlbT4gcmVzdWx0ID0gSXRlbTo6
Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICAgICAgICAgKiAg
ICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CiAg
ICAgICAgICAgICAqLwogICAgICAgICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBJdGVtKCkpKTsKICAgICAgICAgICAgfQogICAgICAgIH07Cgog
ICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8SXRlbT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0
KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlcz4g
Y3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlc291cmNlcygpKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxk
RnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVzb3VyY2VUcmVlLgogICAgY2xhc3MgQ2hp
bGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBD
aGlsZEZyYW1lcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxk
RnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hpbGRG
cmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgRnJhbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgUmVzb3VyY2VzU2V0ID0g
MSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGcmFtZVNldCB8IFJlc291cmNlc1NldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PEZyYW1lUmVzb3VyY2VUcmVlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBGcmFtZVJlc291cmNlVHJlZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEZyYW1lU2V0PiYgc2V0RnJhbWUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVTZXQpLCBwcm9wZXJ0eV9m
cmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImZyYW1l
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNlc1NldD4mIHNldFJlc291cmNl
cygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJlc291
cmNlc1NldCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFJlc291cmNlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxGcmFtZVJlc291cmNlVHJlZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZy
YW1lUmVzb3VyY2VUcmVlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxG
cmFtZVJlc291cmNlVHJlZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4g
cmVzdWx0ID0gRnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1l
KC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRnJhbWVSZXNvdXJjZVRyZWUoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0Q2hpbGRGcmFtZXMoLypQYXNzUmVmUHRyPENoaWxkRnJhbWVzPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5
KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFNlYXJjaCBtYXRjaCBmb3IgcmVz
b3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBMaW5lTnVt
YmVyU2V0ID0gMSA8PCAwLAogICAgICAgIExpbmVDb250ZW50U2V0ID0gMSA8PCAxLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IChMaW5lTnVtYmVyU2V0IHwgTGluZUNvbnRlbnRTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hN
YXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VhcmNo
TWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0
PiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVy
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZUNvbnRlbnRTZXQ+JiBzZXRM
aW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVDb250ZW50U2V0KSwgcHJvcGVydHlfbGluZUNvbnRl
bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsaW5lQ29u
dGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lQ29udGVudFNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWFyY2hNYXRjaD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hN
YXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldExpbmVO
dW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVudCguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlYXJjaE1hdGNoKCkpKTsKICAgIH0K
fTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAqLwpjbGFzcyBTZWFyY2hSZXN1bHQg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBGcmFtZUlkU2V0
ID0gMSA8PCAxLAogICAgICAgIE1hdGNoZXNDb3VudFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoVXJsU2V0IHwgRnJhbWVJZFNldCB8IE1hdGNoZXNDb3VudFNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlYXJj
aFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2Vh
cmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYg
c2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hlc0Nv
dW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBNYXRjaGVzQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1bHQ+
IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3VudCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlYXJj
aFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tpZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNldCA9
IDEgPDwgMSwKICAgICAgICBEb21haW5TZXQgPSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9IDEg
PDwgMywKICAgICAgICBFeHBpcmVzU2V0ID0gMSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAxIDw8
IDUsCiAgICAgICAgSHR0cE9ubHlTZXQgPSAxIDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0gMSA8
PCA3LAogICAgICAgIFNlc3Npb25TZXQgPSAxIDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE5hbWVTZXQgfCBWYWx1ZVNldCB8IERvbWFpblNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0IHwg
U2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwgU2VjdXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tpZT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERv
bWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF0
aFNldD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF0aFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVzU2V0PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCksIHBy
b3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4cGly
ZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNl
dFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEh0
dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIdHRwT25seVNldCksIHByb3BlcnR5X2h0dHBPbmx5
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBPbmx5
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3VyZShi
b29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNlY3VyZVNldCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U2VjdXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Npb25f
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lvbiIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENv
b2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tpZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAqICAg
ICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAgLnNl
dEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0SHR0
cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRTZXNz
aW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q29va2llKCkpKTsKICAgIH0KfTsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBN
aXJyb3Igb2JqZWN0IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQgb2JqZWN0LiAqLwpj
bGFzcyBSZW1vdGVPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBSZW1v
dGVPYmplY3QuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAg
ICAgT2JqZWN0ID0gOCwKICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAogICAgICAgICAgICBVbmRl
ZmluZWQgPSAxMCwKICAgICAgICAgICAgU3RyaW5nID0gMTEsCiAgICAgICAgICAgIE51bWJlciA9
IDEyLAogICAgICAgICAgICBCb29sZWFuID0gMTMsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVj
dCBUeXBlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3VidHlwZScgd2hpbGUg
Z2VuZXJhdGluZyBSZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgU3VidHlwZSB7CiAgICAgICAgZW51
bSBFbnVtIHsKICAgICAgICAgICAgQXJyYXkgPSAxNCwKICAgICAgICAgICAgTnVsbCA9IDE1LAog
ICAgICAgICAgICBOb2RlID0gMTYsCiAgICAgICAgICAgIFJlZ2V4cCA9IDE3LAogICAgICAgICAg
ICBEYXRlID0gMTgsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTdWJ0eXBlCgogICAgZW51
bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlbW90ZU9iamVjdDsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGU6OkVudW0g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlw
ZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5
X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8UmVtb3RlT2JqZWN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8UmVtb3RlT2JqZWN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90ZU9iamVjdD4g
cmVzdWx0ID0gUmVtb3RlT2JqZWN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVtb3RlT2Jq
ZWN0KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldENsYXNzTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9y
T2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZGVzY3JpcHRpb24iLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRPYmplY3RJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBPYmplY3Qg
cHJvcGVydHkgZGVzY3JpcHRvci4gKi8KY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFdyaXRhYmxlU2V0ID0gMSA8
PCAxLAogICAgICAgIENvbmZpZ3VyYWJsZVNldCA9IDEgPDwgMiwKICAgICAgICBFbnVtZXJhYmxl
U2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgV3JpdGFibGVT
ZXQgfCBDb25maWd1cmFibGVTZXQgfCBFbnVtZXJhYmxlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9y
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eURl
c2NyaXB0b3I7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYg
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFdyaXRhYmxlU2V0PiYgc2V0V3JpdGFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBXcml0YWJsZVNldCksIHByb3Bl
cnR5X3dyaXRhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xl
YW4oIndyaXRhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdyaXRh
YmxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbmZpZ3VyYWJs
ZVNldD4mIHNldENvbmZpZ3VyYWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbmZpZ3VyYWJsZVNldCksIHByb3BlcnR5X2NvbmZp
Z3VyYWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJj
b25maWd1cmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29uZmln
dXJhYmxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVudW1lcmFi
bGVTZXQ+JiBzZXRFbnVtZXJhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRW51bWVyYWJsZVNldCksIHByb3BlcnR5X2VudW1lcmFi
bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZW51bWVy
YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFbnVtZXJhYmxlU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRv
cj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHJlc3VsdCA9IFByb3BlcnR5
RGVzY3JpcHRvcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAg
LnNldFdyaXRhYmxlKC4uLikKICAgICAqICAgICAuc2V0Q29uZmlndXJhYmxlKC4uLikKICAgICAq
ICAgICAuc2V0RW51bWVyYWJsZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IFByb3BlcnR5RGVzY3JpcHRvcigpKSk7CiAgICB9CgogICAgdm9pZCBz
ZXRWYWx1ZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVj
dDo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0R2V0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImdldCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFNldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJzZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXYXNUaHJv
d24oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJ3YXNUaHJvd24i
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBSZXByZXNlbnRzIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnQu
IEVpdGhlciByZW1vdGUgb2JqZWN0IGlkIDxjb2RlPm9iamVjdElkPC9jb2RlPiBvciBwcmltaXRp
dmUgPGNvZGU+dmFsdWU8L2NvZGU+IG9yIG5laXRoZXIgb2YgKGZvciB1bmRlZmluZWQpIHRoZW0g
c2hvdWxkIGJlIHNwZWNpZmllZC4gKi8KY2xhc3MgQ2FsbEFyZ3VtZW50IDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxBcmd1bWVudDsKICAgIHB1YmxpYzoKCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPENhbGxBcmd1bWVudD4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxB
cmd1bWVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDYWxsQXJndW1lbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENhbGxBcmd1bWVudD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsQXJndW1lbnQ+IHJlc3VsdCA9
IENhbGxBcmd1bWVudDo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgQ2FsbEFyZ3VtZW50KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVl
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFZhbHVlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6
c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0T2JqZWN0SWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgib2JqZWN0SWQiLCB2YWx1ZSk7CiAg
ICB9Cn07Cgp9IC8vIFJ1bnRpbWUKCm5hbWVzcGFjZSBDb25zb2xlIHsKLyogQ29uc29sZSBtZXNz
YWdlLiAqLwpjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdl
bmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgU291cmNlIHsKICAgICAgICBlbnVt
IEVudW0gewogICAgICAgICAgICBIdG1sID0gMTksCiAgICAgICAgICAgIFdtbCA9IDIwLAogICAg
ICAgICAgICBYbWwgPSAyMSwKICAgICAgICAgICAgSmF2YXNjcmlwdCA9IDIyLAogICAgICAgICAg
ICBOZXR3b3JrID0gMjMsCiAgICAgICAgICAgIENvbnNvbGVfYXBpID0gMjQsCiAgICAgICAgICAg
IE90aGVyID0gMjUsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdsZXZlbCcgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xl
TWVzc2FnZS4KICAgIHN0cnVjdCBMZXZlbCB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAg
ICAgVGlwID0gMjYsCiAgICAgICAgICAgIExvZyA9IDI3LAogICAgICAgICAgICBXYXJuaW5nID0g
MjgsCiAgICAgICAgICAgIEVycm9yID0gMjksCiAgICAgICAgICAgIERlYnVnID0gMzAsCiAgICAg
ICAgfTsKICAgIH07IC8vIHN0cnVjdCBMZXZlbAoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3Qg
VHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgTG9nID0gMjcsCiAgICAgICAg
ICAgIERpciA9IDMxLAogICAgICAgICAgICBEaXJ4bWwgPSAzMiwKICAgICAgICAgICAgVHJhY2Ug
PSAzMywKICAgICAgICAgICAgU3RhcnRHcm91cCA9IDM0LAogICAgICAgICAgICBTdGFydEdyb3Vw
Q29sbGFwc2VkID0gMzUsCiAgICAgICAgICAgIEVuZEdyb3VwID0gMzYsCiAgICAgICAgICAgIEFz
c2VydCA9IDM3LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ3BhcmFtZXRlcnMnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29s
ZU1lc3NhZ2UuCiAgICBjbGFzcyBQYXJhbWV0ZXJzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUGFyYW1ldGVycygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAg
ICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUGFyYW1ldGVycygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTb3VyY2VTZXQgPSAxIDw8IDAsCiAgICAg
ICAgTGV2ZWxTZXQgPSAxIDw8IDEsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoU291cmNlU2V0IHwgTGV2ZWxTZXQgfCBUZXh0U2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29uc29sZU1l
c3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENvbnNv
bGVNZXNzYWdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlU2V0
PiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJj
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBz
ZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IExldmVsU2V0PiYgc2V0TGV2ZWwoTGV2ZWw6OkVudW0gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGV2ZWxTZXQp
LCBwcm9wZXJ0eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoImxldmVsIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxMZXZlbFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMZXZlbFNldD4mIHNldExldmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGV2ZWxTZXQpLCBwcm9wZXJ0
eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxl
dmVsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExldmVsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRleHRTZXQ+JiBzZXRUZXh0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVGV4dFNldCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb25zb2xlTWVzc2FnZT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb25zb2xlTWVzc2FnZT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+IHJlc3VsdCA9IENvbnNvbGVNZXNzYWdl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTb3VyY2UoLi4uKQogICAgICogICAgIC5zZXRMZXZl
bCguLi4pCiAgICAgKiAgICAgLnNldFRleHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDb25zb2xlTWVzc2FnZSgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InR5cGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldExpbmUoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigi
bGluZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcGVhdENvdW50KGludCB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0UGFyYW1ldGVycygvKlBhc3NSZWZQdHI8UGFyYW1ldGVycz4qLyBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJh
eSgicGFyYW1ldGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJhY2UoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFj
a1RyYWNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3RJZCgvKmNv
bnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBTdGFjayBlbnRyeSBmb3IgY29uc29sZSBlcnJvcnMgYW5kIGFzc2Vy
dGlvbnMuICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRnVuY3Rpb25O
YW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5lTnVt
YmVyU2V0ID0gMSA8PCAyLAogICAgICAgIENvbHVtbk51bWJlclNldCA9IDEgPDwgMywKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoRnVuY3Rpb25OYW1lU2V0IHwgVXJsU2V0IHwgTGluZU51bWJlclNl
dCB8IENvbHVtbk51bWJlclNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRnVuY3Rpb25OYW1lU2V0PiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RnVuY3Rpb25OYW1lU2V0KSwgcHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZ1bmN0aW9uTmFtZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQp
LCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpbmVOdW1iZXJTZXQ+JiBzZXRM
aW5lTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBMaW5lTnVtYmVyU2V0KSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGluZU51bWJlclNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OdW1iZXJTZXQ+JiBzZXRDb2x1bW5OdW1i
ZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvbHVtbk51bWJlclNldCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OdW1iZXJTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2Fs
bEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENhbGxGcmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2Fs
bEZyYW1lPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1l
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICogICAgIC5z
ZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0
Q29sdW1uTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIENhbGwgZnJhbWVzIGZvciBhc3Nl
cnRpb25zIG9yIGVycm9yIG1lc3NhZ2VzLiAqLwpjbGFzcyBTdGFja1RyYWNlIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKcHJpdmF0ZToKICAgIFN0YWNrVHJhY2UoKSB7IH0KCnB1YmxpYzoKICAg
IHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNhbGxGcmFt
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICB9CgogICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhY2tU
cmFjZT4gY3JlYXRlKCkgewogICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhY2tUcmFjZSgp
KTsKICAgIH0KfTsKCn0gLy8gQ29uc29sZQoKbmFtZXNwYWNlIE5ldHdvcmsgewovKiBUaW1pbmcg
aW5mb3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0LiAqLwpjbGFzcyBSZXNvdXJjZVRpbWluZyA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgUmVxdWVzdFRpbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgUHJveHlT
dGFydFNldCA9IDEgPDwgMSwKICAgICAgICBQcm94eUVuZFNldCA9IDEgPDwgMiwKICAgICAgICBE
bnNTdGFydFNldCA9IDEgPDwgMywKICAgICAgICBEbnNFbmRTZXQgPSAxIDw8IDQsCiAgICAgICAg
Q29ubmVjdFN0YXJ0U2V0ID0gMSA8PCA1LAogICAgICAgIENvbm5lY3RFbmRTZXQgPSAxIDw8IDYs
CiAgICAgICAgU3NsU3RhcnRTZXQgPSAxIDw8IDcsCiAgICAgICAgU3NsRW5kU2V0ID0gMSA8PCA4
LAogICAgICAgIFNlbmRTdGFydFNldCA9IDEgPDwgOSwKICAgICAgICBTZW5kRW5kU2V0ID0gMSA8
PCAxMCwKICAgICAgICBSZWNlaXZlSGVhZGVyc0VuZFNldCA9IDEgPDwgMTEsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKFJlcXVlc3RUaW1lU2V0IHwgUHJveHlTdGFydFNldCB8IFByb3h5RW5kU2V0
IHwgRG5zU3RhcnRTZXQgfCBEbnNFbmRTZXQgfCBDb25uZWN0U3RhcnRTZXQgfCBDb25uZWN0RW5k
U2V0IHwgU3NsU3RhcnRTZXQgfCBTc2xFbmRTZXQgfCBTZW5kU3RhcnRTZXQgfCBTZW5kRW5kU2V0
IHwgUmVjZWl2ZUhlYWRlcnNFbmRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNvdXJjZVRpbWluZz4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VUaW1pbmc7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZXF1ZXN0VGltZVNldD4mIHNldFJlcXVlc3RUaW1l
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSZXF1ZXN0VGltZVNldCksIHByb3BlcnR5X3JlcXVlc3RUaW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVxdWVzdFRpbWUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVxdWVzdFRpbWVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUHJveHlTdGFydFNldD4mIHNldFByb3h5U3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFByb3h5U3RhcnRTZXQpLCBwcm9wZXJ0eV9wcm94eVN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlTdGFydCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxQcm94eVN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFByb3h5RW5kU2V0PiYgc2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFByb3h5RW5kU2V0
KSwgcHJvcGVydHlfcHJveHlFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJwcm94eUVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxQcm94eUVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEbnNT
dGFydFNldD4mIHNldERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEbnNTdGFydFNldCksIHByb3BlcnR5X2Ruc1N0YXJ0
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zU3RhcnQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RG5zU3RhcnRTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG5zRW5kU2V0PiYgc2V0RG5zRW5kKGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBEbnNFbmRTZXQpLCBwcm9wZXJ0eV9kbnNFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RG5zRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvbm5lY3RTdGFydFNldD4mIHNldENvbm5lY3RTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdFN0YXJ0U2V0KSwg
cHJvcGVydHlfY29ubmVjdFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY29ubmVjdFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvbm5lY3RTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb25uZWN0RW5kU2V0PiYgc2V0Q29ubmVjdEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdEVuZFNldCksIHBy
b3BlcnR5X2Nvbm5lY3RFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJjb25uZWN0RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvbm5lY3RFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ns
U3RhcnRTZXQ+JiBzZXRTc2xTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3NsU3RhcnRTZXQpLCBwcm9wZXJ0eV9zc2xTdGFy
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbFN0YXJ0
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNzbFN0YXJ0U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNzbEVuZFNldD4mIHNldFNzbEVuZChk
b3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU3NsRW5kU2V0KSwgcHJvcGVydHlfc3NsRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic3NsRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNzbEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTZW5kU3RhcnRTZXQ+JiBzZXRTZW5kU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlbmRTdGFydFNldCksIHByb3BlcnR5
X3NlbmRTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InNlbmRTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZW5kU3Rh
cnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2VuZEVuZFNldD4m
IHNldFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFNlbmRFbmRTZXQpLCBwcm9wZXJ0eV9zZW5kRW5kX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZEVuZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZW5kRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFJlY2VpdmVIZWFkZXJzRW5kU2V0PiYgc2V0UmVjZWl2ZUhlYWRl
cnNFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFJlY2VpdmVIZWFkZXJzRW5kU2V0KSwgcHJvcGVydHlfcmVjZWl2ZUhlYWRlcnNF
bmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZWNlaXZl
SGVhZGVyc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZWNlaXZl
SGVhZGVyc0VuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNv
dXJjZVRpbWluZz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1pbmc6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAuc2V0
UHJveHlTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAgICAu
c2V0RG5zU3RhcnQoLi4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAgIC5z
ZXRDb25uZWN0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAq
ICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAgICog
ICAgIC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAq
ICAgICAuc2V0UmVjZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXNvdXJjZVRpbWluZygpKSk7CiAgICB9Cn07CgovKiBI
VFRQIHJlcXVlc3QgZGF0YS4gKi8KY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
VXJsU2V0ID0gMSA8PCAwLAogICAgICAgIE1ldGhvZFNldCA9IDEgPDwgMSwKICAgICAgICBIZWFk
ZXJzU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBNZXRob2RT
ZXQgfCBIZWFkZXJzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgUmVxdWVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWV0aG9kU2V0PiYgc2V0TWV0aG9kKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWV0aG9k
U2V0KSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1ldGhvZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJz
U2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHBy
b3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2Jq
ZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRl
cnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVxdWVzdD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQgPSBS
ZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRN
ZXRob2QoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVxdWVzdCgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRQb3N0RGF0YShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygicG9zdERhdGEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBIVFRQIHJlc3BvbnNlIGRh
dGEuICovCmNsYXNzIFJlc3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8
IDAsCiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAxLAogICAgICAgIFN0YXR1c1RleHRTZXQgPSAx
IDw8IDIsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMywKICAgICAgICBNaW1lVHlwZVNldCA9
IDEgPDwgNCwKICAgICAgICBDb25uZWN0aW9uUmV1c2VkU2V0ID0gMSA8PCA1LAogICAgICAgIENv
bm5lY3Rpb25JZFNldCA9IDEgPDwgNiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwg
U3RhdHVzU2V0IHwgU3RhdHVzVGV4dFNldCB8IEhlYWRlcnNTZXQgfCBNaW1lVHlwZVNldCB8IENv
bm5lY3Rpb25SZXVzZWRTZXQgfCBDb25uZWN0aW9uSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzcG9uc2U7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxT
ZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0
YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU3RhdHVzU2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdGF0dXNUZXh0U2V0PiYgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1Rl
eHRTZXQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTdGF0dXNUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBI
ZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNaW1lVHlwZVNldD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWltZVR5cGVTZXQpLCBwcm9w
ZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1pbWVU
eXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbm5lY3Rpb25S
ZXVzZWRTZXQ+JiBzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdGlvblJldXNlZFNldCksIHBy
b3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxDb25uZWN0aW9uUmV1c2VkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvbm5lY3Rpb25JZFNldD4mIHNldENvbm5lY3Rpb25JZChkb3VibGUg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29u
bmVjdGlvbklkU2V0KSwgcHJvcGVydHlfY29ubmVjdGlvbklkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdGlvbklkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvbm5lY3Rpb25JZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc3BvbnNlPio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc3Bv
bnNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNwb25zZT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxSZXNwb25zZT4gcmVzdWx0ID0gUmVzcG9uc2U6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgKiAg
ICAgLnNldFN0YXR1c1RleHQoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLikKICAgICAq
ICAgICAuc2V0TWltZVR5cGUoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uUmV1c2VkKC4u
LikKICAgICAqICAgICAuc2V0Q29ubmVjdGlvbklkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVzcG9uc2UoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoImhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVz
dEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE9iamVjdCgicmVxdWVzdEhlYWRlcnMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRSZXF1ZXN0SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInJlcXVlc3RIZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldEZyb21EaXNrQ2FjaGUoYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRCb29sZWFuKCJmcm9tRGlza0NhY2hlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGlt
aW5nKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgidGltaW5nIiwgdmFsdWUpOwogICAgfQp9OwoKLyogV2ViU29ja2V0IHJlcXVlc3Qg
ZGF0YS4gKi8KY2xhc3MgV2ViU29ja2V0UmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUmVx
dWVzdEtleTNTZXQgPSAxIDw8IDAsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMSwKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoUmVxdWVzdEtleTNTZXQgfCBIZWFkZXJzU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0
UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2Vi
U29ja2V0UmVxdWVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlcXVl
c3RLZXkzU2V0PiYgc2V0UmVxdWVzdEtleTMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXF1ZXN0S2V5M1NldCksIHBy
b3BlcnR5X3JlcXVlc3RLZXkzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygicmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UmVxdWVzdEtleTNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
SGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNT
ZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNv
Y2tldFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0Pio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gcmVzdWx0ID0gV2ViU29j
a2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UmVxdWVzdEtleTMoLi4uKQogICAg
ICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgV2ViU29ja2V0UmVxdWVzdCgpKSk7CiAgICB9Cn07CgovKiBXZWJTb2Nr
ZXQgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgV2ViU29ja2V0UmVzcG9uc2UgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIFN0YXR1c1NldCA9IDEgPDwgMCwKICAgICAgICBTdGF0dXNUZXh0U2V0ID0gMSA8
PCAxLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDIsCiAgICAgICAgQ2hhbGxlbmdlUmVzcG9u
c2VTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0YXR1c1NldCB8IFN0YXR1
c1RleHRTZXQgfCBIZWFkZXJzU2V0IHwgQ2hhbGxlbmdlUmVzcG9uc2VTZXQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRS
ZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2Vi
U29ja2V0UmVzcG9uc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGF0
dXNTZXQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzVGV4dFNldD4mIHNldFN0YXR1c1RleHQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTdGF0dXNUZXh0U2V0KSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzVGV4dFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ2hhbGxlbmdlUmVzcG9uc2VTZXQ+JiBzZXRDaGFsbGVuZ2VSZXNwb25z
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENoYWxsZW5nZVJlc3BvbnNlU2V0KSwgcHJvcGVydHlfY2hhbGxlbmdlUmVz
cG9uc2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFs
bGVuZ2VSZXNwb25zZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDaGFs
bGVuZ2VSZXNwb25zZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxX
ZWJTb2NrZXRSZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvY2tl
dFJlc3BvbnNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJTb2Nr
ZXRSZXNwb25zZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcmVzdWx0
ID0gV2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4p
CiAgICAgKiAgICAgLnNldFN0YXR1c1RleHQoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4u
LikKICAgICAqICAgICAuc2V0Q2hhbGxlbmdlUmVzcG9uc2UoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXNwb25zZSgpKSk7CiAg
ICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FjaGVkIHJlc291cmNlLiAqLwpjbGFz
cyBDYWNoZWRSZXNvdXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAog
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDEsCiAgICAgICAgQm9keVNpemVTZXQgPSAxIDw8IDIsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IFR5cGVTZXQgfCBCb2R5U2l6ZVNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENh
Y2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBDYWNoZWRSZXNvdXJjZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVy
bFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNl
VHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0
KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCb2R5U2l6ZVNldD4mIHNl
dEJvZHlTaXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBCb2R5U2l6ZVNldCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qm9keVNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWNo
ZWRSZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q2FjaGVkUmVzb3VyY2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+
IHJlc3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWNoZWRSZXNv
dXJjZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXNwb25zZSgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJlc3BvbnNlIiwgdmFsdWUpOwog
ICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpj
bGFzcyBJbml0aWF0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0
b3IuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgUGFy
c2VyID0gMzgsCiAgICAgICAgICAgIFNjcmlwdCA9IDM5LAogICAgICAgICAgICBPdGhlciA9IDI1
LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZpZWxk
c1NldCA9IChUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8SW5pdGlhdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBJbml0aWF0b3I7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdl
dEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYg
c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEluaXRpYXRvcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEluaXRpYXRvcj4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbml0aWF0b3I+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEluaXRpYXRvcj4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxJbml0aWF0b3I+IHJlc3VsdCA9IEluaXRpYXRvcjo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IEluaXRpYXRvcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGFja1RyYWNlKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgic3Rh
Y2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBOZXR3b3JrCgoj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKbmFtZXNwYWNlIERhdGFiYXNlIHsKLyogRGF0YWJhc2Ug
b2JqZWN0LiAqLwpjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgSWRTZXQgPSAx
IDw8IDAsCiAgICAgICAgRG9tYWluU2V0ID0gMSA8PCAxLAogICAgICAgIE5hbWVTZXQgPSAxIDw8
IDIsCiAgICAgICAgVmVyc2lvblNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
SWRTZXQgfCBEb21haW5TZXQgfCBOYW1lU2V0IHwgVmVyc2lvblNldCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPERhdGFiYXNlPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJ
ZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG9tYWluU2V0PiYgc2V0RG9t
YWluKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRG9tYWluU2V0KSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPERvbWFpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9w
ZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZlcnNpb25TZXQ+JiBzZXRWZXJzaW9u
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmVyc2lvblNldCksIHByb3BlcnR5X3ZlcnNpb25fYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFZlcnNpb25TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RGF0YWJhc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxEYXRhYmFzZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxEYXRhYmFzZT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RGF0YWJhc2U+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8RGF0YWJhc2U+IHJlc3VsdCA9IERhdGFiYXNlOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRJZCguLi4pCiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAgLnNl
dE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWZXJzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRGF0YWJhc2UoKSkpOwogICAgfQp9OwoKfSAv
LyBEYXRhYmFzZQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKbmFtZXNwYWNlIEluZGV4ZWREQiB7Ci8qIE9yaWdpbiB3aXRoIGRhdGFi
YXNlIG5hbWVzIGFuZCBmcmFtZSBpZHMuICovCmNsYXNzIEZyYW1lV2l0aERhdGFiYXNlTmFtZXMg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnZGF0YWJhc2VOYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBGcmFtZVdpdGhEYXRh
YmFzZU5hbWVzLgogICAgY2xhc3MgRGF0YWJhc2VOYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CiAgICBwcml2YXRlOgogICAgICAgIERhdGFiYXNlTmFtZXMoKSB7IH0KCiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFiYXNlTmFtZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhYmFzZU5hbWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51
bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDAs
CiAgICAgICAgU2VjdXJpdHlPcmlnaW5TZXQgPSAxIDw8IDEsCiAgICAgICAgRGF0YWJhc2VOYW1l
c1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRnJhbWVJZFNldCB8IFNlY3Vy
aXR5T3JpZ2luU2V0IHwgRGF0YWJhc2VOYW1lc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aERh
dGFiYXNlTmFtZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlk
U2V0PiYgc2V0RnJhbWVJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiov
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU2VjdXJpdHlPcmlnaW5TZXQ+JiBzZXRTZWN1cml0eU9yaWdpbihjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNlY3VyaXR5T3JpZ2luU2V0KSwgcHJvcGVydHlfc2VjdXJpdHlPcmlnaW5fYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzZWN1cml0eU9yaWdpbiIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZWN1cml0eU9yaWdpblNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEYXRhYmFzZU5hbWVzU2V0PiYg
c2V0RGF0YWJhc2VOYW1lcygvKlBhc3NSZWZQdHI8RGF0YWJhc2VOYW1lcz4qLyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEYXRhYmFzZU5hbWVzU2V0KSwgcHJvcGVydHlfZGF0YWJhc2VOYW1lc19h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZGF0YWJhc2VOYW1l
cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEYXRhYmFzZU5hbWVzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lV2l0aERhdGFiYXNl
TmFtZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lV2l0aERhdGFi
YXNlTmFtZXM+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lV2l0
aERhdGFiYXNlTmFtZXM+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1l
cz4gcmVzdWx0ID0gRnJhbWVXaXRoRGF0YWJhc2VOYW1lczo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldFNlY3VyaXR5T3JpZ2luKC4uLikKICAgICAq
ICAgICAuc2V0RGF0YWJhc2VOYW1lcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aERhdGFiYXNlTmFtZXMoKSkpOwogICAgfQp9OwoK
fSAvLyBJbmRleGVkREIKCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKbmFtZXNw
YWNlIERPTVN0b3JhZ2UgewovKiBET00gU3RvcmFnZSBlbnRyeS4gKi8KY2xhc3MgRW50cnkgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIEhvc3RTZXQgPSAxIDw8IDAsCiAgICAgICAgSXNMb2NhbFN0b3Jh
Z2VTZXQgPSAxIDw8IDEsCiAgICAgICAgSWRTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKEhvc3RTZXQgfCBJc0xvY2FsU3RvcmFnZVNldCB8IElkU2V0KQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RW50cnk+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEVudHJ5OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSG9zdFNldD4mIHNldEhvc3QoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBI
b3N0U2V0KSwgcHJvcGVydHlfaG9zdF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImhvc3QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
SG9zdFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJc0xvY2FsU3Rv
cmFnZVNldD4mIHNldElzTG9jYWxTdG9yYWdlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSXNMb2NhbFN0b3JhZ2VTZXQpLCBwcm9wZXJ0
eV9pc0xvY2FsU3RvcmFnZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRC
b29sZWFuKCJpc0xvY2FsU3RvcmFnZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxJc0xvY2FsU3RvcmFnZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBJZFNldD4mIHNldElkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8RW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFbnRyeT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8RW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RW50cnk+IHJl
c3VsdCA9IEVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRIb3N0KC4uLikKICAgICAqICAg
ICAuc2V0SXNMb2NhbFN0b3JhZ2UoLi4uKQogICAgICogICAgIC5zZXRJZCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEVudHJ5KCkpKTsKICAgIH0K
fTsKCn0gLy8gRE9NU3RvcmFnZQoKbmFtZXNwYWNlIEFwcGxpY2F0aW9uQ2FjaGUgewovKiBEZXRh
aWxlZCBhcHBsaWNhdGlvbiBjYWNoZSByZXNvdXJjZSBpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQXBw
bGljYXRpb25DYWNoZVJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8
IDAsCiAgICAgICAgU2l6ZVNldCA9IDEgPDwgMSwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAyLAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBTaXplU2V0IHwgVHlwZVNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVy
dHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJs
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaXplU2V0PiYgc2V0U2l6ZShpbnQgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCks
IHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNl
dFNpemUoLi4uKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKCkpKTsK
ICAgIH0KfTsKCi8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIGluZm9ybWF0aW9uLiAqLwpj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Jlc291cmNlcycgd2hpbGUgZ2VuZXJh
dGluZyBBcHBsaWNhdGlvbkNhY2hlLgogICAgY2xhc3MgUmVzb3VyY2VzIDogcHVibGljIEluc3Bl
Y3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVzb3VyY2VzKCkgeyB9CgogICAgcHVi
bGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFwcGxp
Y2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0
KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlcz4g
Y3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlc291cmNlcygpKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAg
ICAgICBNYW5pZmVzdFVSTFNldCA9IDEgPDwgMCwKICAgICAgICBTaXplU2V0ID0gMSA8PCAxLAog
ICAgICAgIENyZWF0aW9uVGltZVNldCA9IDEgPDwgMiwKICAgICAgICBVcGRhdGVUaW1lU2V0ID0g
MSA8PCAzLAogICAgICAgIFJlc291cmNlc1NldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWFuaWZlc3RVUkxTZXQgfCBTaXplU2V0IHwgQ3JlYXRpb25UaW1lU2V0IHwgVXBkYXRl
VGltZVNldCB8IFJlc291cmNlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYW5pZmVzdFVSTFNldD4mIHNldE1hbmlmZXN0
VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWFuaWZlc3RVUkxTZXQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hbmlmZXN0VVJMU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
aXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDcmVhdGlvblRp
bWVTZXQ+JiBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENyZWF0aW9uVGltZVNldCksIHByb3BlcnR5X2Ny
ZWF0aW9uVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
ImNyZWF0aW9uVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDcmVh
dGlvblRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXBkYXRl
VGltZVNldD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVwZGF0ZVRpbWVTZXQpLCBwcm9wZXJ0eV91cGRh
dGVUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidXBk
YXRlVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcGRhdGVUaW1l
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNlc1NldD4m
IHNldFJlc291cmNlcygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFJlc291cmNlc1NldCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFJlc291cmNlc1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dE1hbmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNl
dENyZWF0aW9uVGltZSguLi4pCiAgICAgKiAgICAgLnNldFVwZGF0ZVRpbWUoLi4uKQogICAgICog
ICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlKCkpKTsKICAgIH0KfTsKCi8qIEZyYW1lIGlk
ZW50aWZpZXIgLSBtYW5pZmVzdCBVUkwgcGFpci4gKi8KY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3Qg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTWFuaWZl
c3RVUkxTZXQgPSAxIDw8IDEsCiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAyLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChGcmFtZUlkU2V0IHwgTWFuaWZlc3RVUkxTZXQgfCBTdGF0dXNTZXQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxG
cmFtZVdpdGhNYW5pZmVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgRnJhbWVXaXRoTWFuaWZlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWFuaWZlc3RVUkxTZXQ+JiBzZXRNYW5pZmVzdFVS
TChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1hbmlmZXN0VVJMU2V0KSwgcHJvcGVydHlfbWFuaWZlc3RVUkxfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNYW5pZmVzdFVSTFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGF0dXNTZXQ+JiBzZXRTdGF0dXMoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0
YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJh
bWVXaXRoTWFuaWZlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVdpdGhN
YW5pZmVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVXaXRo
TWFuaWZlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHJlc3VsdCA9
IEZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikK
ICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBGcmFtZVdp
dGhNYW5pZmVzdCgpKSk7CiAgICB9Cn07Cgp9IC8vIEFwcGxpY2F0aW9uQ2FjaGUKCm5hbWVzcGFj
ZSBET00gewovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWly
cm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUg
aXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIE5vZGUgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hp
bGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgTm9kZS4KICAgIGNsYXNzIENoaWxkcmVuIDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRyZW4oKSB7IH0KCiAg
ICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDaGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ2F0dHJpYnV0ZXMnIHdoaWxlIGdlbmVyYXRpbmcgTm9kZS4K
ICAgIGNsYXNzIEF0dHJpYnV0ZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0
ZToKICAgICAgICBBdHRyaWJ1dGVzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRk
SXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVz
aFN0cmluZyh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRy
aWJ1dGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXR0cmli
dXRlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTm9kZVR5cGVTZXQgPSAx
IDw8IDEsCiAgICAgICAgTm9kZU5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgTG9jYWxOYW1lU2V0
ID0gMSA8PCAzLAogICAgICAgIE5vZGVWYWx1ZVNldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTm9kZUlkU2V0IHwgTm9kZVR5cGVTZXQgfCBOb2RlTmFtZVNldCB8IExvY2FsTmFt
ZVNldCB8IE5vZGVWYWx1ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOb2RlSWRTZXQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5X25vZGVJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZVR5cGVTZXQ+JiBzZXROb2RlVHlwZShpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZVR5
cGVTZXQpLCBwcm9wZXJ0eV9ub2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoIm5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE5vZGVUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5vZGVOYW1lU2V0PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFtZVNldCksIHByb3Bl
cnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZU5h
bWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYWxOYW1lU2V0
PiYgc2V0TG9jYWxOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9jYWxOYW1lU2V0KSwgcHJvcGVydHlfbG9jYWxO
YW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibG9jYWxO
YW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvY2FsTmFtZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVmFsdWVTZXQ+JiBzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlVmFsdWVTZXQpLCBwcm9wZXJ0eV9ub2RlVmFsdWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlVmFsdWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZVZhbHVlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOb2Rl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5v
ZGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAgIC5zZXRO
b2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAgICAgLnNl
dE5vZGVWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8Q2hpbGRyZW4+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0QXR0cmlidXRlcygv
KlBhc3NSZWZQdHI8QXR0cmlidXRlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFB1YmxpY0lkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJwdWJsaWNJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN5c3RlbUlk
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzeXN0
ZW1JZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEludGVybmFsU3Vic2V0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJpbnRlcm5hbFN1YnNl
dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFhtbFZlcnNpb24oY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZh
bHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsK
CgogICAgdm9pZCBzZXRDb250ZW50RG9jdW1lbnQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpE
T006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudERvY3VtZW50IiwgdmFsdWUpOwogICAgfQp9OwoK
LyogRE9NIGludGVyYWN0aW9uIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1pcnJvciBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IHRoZSBhY3R1YWwgRE9NIG5vZGVzLiBET01Ob2RlIGlzIGEgYmFz
ZSBub2RlIG1pcnJvciB0eXBlLiAqLwpjbGFzcyBFdmVudExpc3RlbmVyIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
ICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIFVzZUNhcHR1cmVTZXQgPSAxIDw8IDEs
CiAgICAgICAgSXNBdHRyaWJ1dGVTZXQgPSAxIDw8IDIsCiAgICAgICAgTm9kZUlkU2V0ID0gMSA8
PCAzLAogICAgICAgIEhhbmRsZXJCb2R5U2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChUeXBlU2V0IHwgVXNlQ2FwdHVyZVNldCB8IElzQXR0cmlidXRlU2V0IHwgTm9kZUlkU2V0
IHwgSGFuZGxlckJvZHlTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwg
cHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVc2VDYXB0dXJlU2V0PiYgc2V0
VXNlQ2FwdHVyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFVzZUNhcHR1cmVTZXQpLCBwcm9wZXJ0eV91c2VDYXB0dXJlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInVzZUNhcHR1cmUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXNlQ2FwdHVyZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJc0F0dHJpYnV0ZVNldD4mIHNldElzQXR0cmli
dXRlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSXNBdHRyaWJ1dGVTZXQpLCBwcm9wZXJ0eV9pc0F0dHJpYnV0ZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJpc0F0dHJpYnV0ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJc0F0dHJpYnV0ZVNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlSWRTZXQ+JiBzZXROb2RlSWQoaW50IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVJZFNl
dCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
b2RlSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGFuZGxlckJv
ZHlTZXQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhhbmRsZXJCb2R5U2V0KSwgcHJvcGVy
dHlfaGFuZGxlckJvZHlfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJoYW5kbGVyQm9keSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxI
YW5kbGVyQm9keVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFdmVu
dExpc3RlbmVyPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFdmVudExpc3RlbmVyPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJlc3VsdCA9IEV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRVc2VDYXB0dXJlKC4u
LikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUoLi4uKQogICAgICogICAgIC5zZXROb2RlSWQo
Li4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9keSguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEV2ZW50TGlzdGVuZXIoKSkpOwogICAgfQoKICAg
IHZvaWQgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBBIHN0cnVj
dHVyZSBob2xkaW5nIGFuIFJHQkEgY29sb3IuICovCi8vIFR5cGUgb3JpZ2luYWxseSB3YXMgbmFt
ZWQgJ1JHQkEnLgpjbGFzcyBSZ2JhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSU2V0ID0gMSA8PCAw
LAogICAgICAgIEdTZXQgPSAxIDw8IDEsCiAgICAgICAgQlNldCA9IDEgPDwgMiwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoUlNldCB8IEdTZXQgfCBCU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmdiYT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmdiYTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFJTZXQ+JiBzZXRSKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSU2V0KSwgcHJvcGVydHlfcl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UlNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBHU2V0PiYgc2V0RyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgR1NldCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEdTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
QlNldD4mIHNldEIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEJTZXQpLCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxCU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJnYmE+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxSZ2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPFJnYmE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAg
IC5zZXRCKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgUmdiYSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRBKGRvdWJsZSB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXROdW1iZXIoImEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDb25maWd1cmF0
aW9uIGRhdGEgZm9yIHRoZSBoaWdobGlnaHRpbmcgb2YgcGFnZSBlbGVtZW50cy4gKi8KY2xhc3Mg
SGlnaGxpZ2h0Q29uZmlnIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxI
aWdobGlnaHRDb25maWc+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIEhpZ2hsaWdodENvbmZpZzsKICAgIHB1YmxpYzoKCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PEhpZ2hsaWdodENvbmZpZz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxIaWdobGlnaHRD
b25maWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEhpZ2hsaWdodENv
bmZpZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hs
aWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgSGlnaGxpZ2h0Q29uZmlnKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFNob3dJ
bmZvKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigic2hvd0luZm8i
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDb250ZW50Q29sb3IoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudENvbG9yIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0UGFkZGluZ0NvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoInBhZGRpbmdDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldEJvcmRlckNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoImJvcmRlckNvbG9yIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TWFyZ2lu
Q29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgibWFy
Z2luQ29sb3IiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIERPTQoKbmFtZXNwYWNlIENTUyB7Ci8q
IFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1Mgc3R5bGUgaW4gYSB1bmlxdWUgd2F5LiAqLwpj
bGFzcyBDU1NTdHlsZUlkIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAx
IDw8IDAsCiAgICAgICAgT3JkaW5hbFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoU3R5bGVTaGVldElkU2V0IHwgT3JkaW5hbFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlSWQ+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlSWQ7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9yZGluYWxTZXQ+JiBzZXRPcmRp
bmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPcmRpbmFsU2V0KSwgcHJvcGVydHlfb3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8T3JkaW5hbFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVJZD4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZUlkPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENTU1N0eWxlSWQ+IHJlc3VsdCA9IENTU1N0eWxlSWQ6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHls
ZUlkKCkpKTsKICAgIH0KfTsKCi8qIFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBp
biBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
U3R5bGVTaGVldElkU2V0ID0gMSA8PCAwLAogICAgICAgIE9yZGluYWxTZXQgPSAxIDw8IDEsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IE9yZGluYWxTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NS
dWxlSWQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1
bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNl
dD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5
X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT3Jk
aW5hbFNldD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9yZGluYWxTZXQpLCBwcm9wZXJ0eV9vcmRpbmFsX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigib3JkaW5hbCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmRpbmFsU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGVJZD4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1J1
bGVJZD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDU1NSdWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1J1
bGVJZD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NSdWxlSWQ+IHJlc3VsdCA9IENTU1J1bGVJZDo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0
T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IENTU1J1bGVJZCgpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBh
IHNpbmdsZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNzIFBzZXVkb0lkUnVsZXMgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
cnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcgUHNldWRvSWRSdWxlcy4KICAgIGNsYXNzIFJ1bGVzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgUnVsZXMoKSB7IH0K
CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NSdWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBQc2V1ZG9JZFNldCA9IDEgPDwgMCwKICAg
ICAgICBSdWxlc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUHNldWRvSWRT
ZXQgfCBSdWxlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBQc2V1ZG9JZFNldD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQc2V1ZG9JZFNldCksIHBy
b3BlcnR5X3BzZXVkb0lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigicHNldWRvSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHNl
dWRvSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+
JiBzZXRSdWxlcygvKlBhc3NSZWZQdHI8UnVsZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
UnVsZXNTZXQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UnVsZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UHNldWRv
SWRSdWxlcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBzZXVkb0lkUnVsZXM+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UHNldWRvSWRSdWxlcz4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiByZXN1bHQgPSBQc2V1ZG9JZFJ1bGVzOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRQc2V1ZG9JZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUHNldWRvSWRS
dWxlcygpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBhIHNpbmdsZSBw
c2V1ZG8gc3R5bGUuICovCmNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnkgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbWF0
Y2hlZENTU1J1bGVzJyB3aGlsZSBnZW5lcmF0aW5nIEluaGVyaXRlZFN0eWxlRW50cnkuCiAgICBj
bGFzcyBNYXRjaGVkQ1NTUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0
ZToKICAgICAgICBNYXRjaGVkQ1NTUnVsZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMt
PnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TWF0Y2hlZENTU1J1bGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWF0Y2hlZENTU1J1bGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE1hdGNoZWRDU1NSdWxlc1NldCA9IDEgPDwgMCwK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWF0Y2hlZENTU1J1bGVzU2V0KQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5
bGVFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5o
ZXJpdGVkU3R5bGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1h
dGNoZWRDU1NSdWxlc1NldD4mIHNldE1hdGNoZWRDU1NSdWxlcygvKlBhc3NSZWZQdHI8TWF0Y2hl
ZENTU1J1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hdGNoZWRDU1NSdWxlc1NldCks
IHByb3BlcnR5X21hdGNoZWRDU1NSdWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1hdGNoZWRDU1NSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJp
dGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPElu
aGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEluaGVyaXRlZFN0eWxlRW50cnkoKSkpOwogICAg
fQoKICAgIHZvaWQgc2V0SW5saW5lU3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
Q1NTIHN0eWxlIGluZm9ybWF0aW9uIGZvciBhIERPTSBzdHlsZSBhdHRyaWJ1dGUuICovCmNsYXNz
IENTU1N0eWxlQXR0cmlidXRlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAw
LAogICAgICAgIFN0eWxlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1l
U2V0IHwgU3R5bGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVT
ZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1l
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0
U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNldCksIHByb3BlcnR5X3N0eWxlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVBdHRy
aWJ1dGU+IHJlc3VsdCA9IENTU1N0eWxlQXR0cmlidXRlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0U3R5bGUoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUF0dHJpYnV0ZSgpKSk7CiAgICB9
Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBtZXRhaW5mb3JtYXRpb24uICovCmNsYXNzIENTU1N0eWxl
U2hlZXRIZWFkZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwg
MCwKICAgICAgICBTb3VyY2VVUkxTZXQgPSAxIDw8IDEsCiAgICAgICAgVGl0bGVTZXQgPSAxIDw8
IDIsCiAgICAgICAgRGlzYWJsZWRTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFN0eWxlU2hlZXRJZFNldCB8IFNvdXJjZVVSTFNldCB8IFRpdGxlU2V0IHwgRGlzYWJsZWRTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0SGVhZGVyOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VVUkxTZXQ+JiBzZXRTb3VyY2VVUkwoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTb3VyY2VVUkxTZXQpLCBwcm9wZXJ0eV9zb3VyY2VVUkxfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlVVJMU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRpdGxlU2V0PiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaXRsZVNldCks
IHByb3BlcnR5X3RpdGxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidGl0bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGl0bGVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlzYWJsZWRTZXQ+JiBz
ZXREaXNhYmxlZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpc2FibGVkU2V0KSwgcHJvcGVydHlfZGlzYWJsZWRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlzYWJsZWRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENTU1N0eWxlU2hlZXRIZWFkZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0SGVhZGVyOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRT
b3VyY2VVUkwoLi4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldERp
c2FibGVkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgQ1NTU3R5bGVTaGVldEhlYWRlcigpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBj
b250ZW50cy4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVldEJvZHkgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncnVsZXMnIHdo
aWxlIGdlbmVyYXRpbmcgQ1NTU3R5bGVTaGVldEJvZHkuCiAgICBjbGFzcyBSdWxlcyA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFJ1bGVzKCkgeyB9CgogICAg
cHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUnVsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJ1bGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUnVsZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3R5bGVTaGVldElkU2V0ID0gMSA8PCAwLAogICAg
ICAgIFJ1bGVzU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0
SWRTZXQgfCBSdWxlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0Qm9keTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJ
ZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxlcygv
KlBhc3NSZWZQdHI8UnVsZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUnVsZXNTZXQpLCBw
cm9wZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UnVsZXNTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRC
b2R5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAg
IC5zZXRSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IENTU1N0eWxlU2hlZXRCb2R5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInRleHQiLCB2
YWx1ZSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xhc3MgQ1NT
UnVsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdvcmlnaW4nIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUnVsZS4KICAgIHN0
cnVjdCBPcmlnaW4gewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFVzZXIgPSA0MCwK
ICAgICAgICAgICAgVXNlcl9hZ2VudCA9IDQxLAogICAgICAgICAgICBJbnNwZWN0b3IgPSA0MiwK
ICAgICAgICAgICAgUmVndWxhciA9IDQzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgT3Jp
Z2luCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbWVkaWEnIHdoaWxlIGdlbmVy
YXRpbmcgQ1NTUnVsZS4KICAgIGNsYXNzIE1lZGlhIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgIHByaXZhdGU6CiAgICAgICAgTWVkaWEoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlz
LT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWEo
KSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgU2VsZWN0b3JUZXh0U2V0ID0gMSA8PCAwLAogICAgICAgIFNvdXJjZUxpbmVTZXQg
PSAxIDw8IDEsCiAgICAgICAgT3JpZ2luU2V0ID0gMSA8PCAyLAogICAgICAgIFN0eWxlU2V0ID0g
MSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTZWxlY3RvclRleHRTZXQgfCBTb3VyY2VM
aW5lU2V0IHwgT3JpZ2luU2V0IHwgU3R5bGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlPiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NSdWxlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU2VsZWN0b3JUZXh0U2V0PiYgc2V0U2VsZWN0b3JUZXh0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU2VsZWN0b3JUZXh0U2V0KSwgcHJvcGVydHlfc2VsZWN0b3JUZXh0X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlbGVjdG9yVGV4dFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VMaW5lU2V0PiYgc2V0U291cmNlTGlu
ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU291cmNlTGluZVNldCksIHByb3BlcnR5X3NvdXJjZUxpbmVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZUxpbmVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT3JpZ2luU2V0PiYgc2V0T3JpZ2luKE9yaWdpbjo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmlnaW5T
ZXQpLCBwcm9wZXJ0eV9vcmlnaW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJvcmlnaW4iLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE9yaWdpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBzZXRPcmlnaW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmlnaW5TZXQp
LCBwcm9wZXJ0eV9vcmlnaW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJvcmlnaW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3Jp
Z2luU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYg
c2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNldCksIHByb3BlcnR5X3N0eWxlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8Q1NTUnVsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1J1bGU+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTUnVsZT4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUnVsZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxDU1NSdWxlPiByZXN1bHQgPSBDU1NSdWxlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRTZWxlY3RvclRleHQoLi4uKQogICAgICogICAgIC5zZXRTb3VyY2VMaW5lKC4uLikKICAgICAq
ICAgICAuc2V0T3JpZ2luKC4uLikKICAgICAqICAgICAuc2V0U3R5bGUoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NSdWxlKCkpKTsKICAgIH0K
CiAgICB2b2lkIHNldFJ1bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJj
ZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2VsZWN0b3JSYW5nZSgvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic2VsZWN0
b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKC8qUGFzc1JlZlB0cjxN
ZWRpYT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRBcnJheSgibWVkaWEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBUZXh0IHJhbmdlIHdp
dGhpbiBhIHJlc291cmNlLiAqLwpjbGFzcyBTb3VyY2VSYW5nZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgU3RhcnRTZXQgPSAxIDw8IDAsCiAgICAgICAgRW5kU2V0ID0gMSA8PCAxLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChTdGFydFNldCB8IEVuZFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VSYW5nZTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXJ0U2V0PiYgc2V0U3RhcnQoaW50IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXJ0U2V0
KSwgcHJvcGVydHlfc3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJzdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGFy
dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFbmRTZXQ+JiBzZXRF
bmQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEVuZFNldCksIHByb3BlcnR5X2VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U291cmNlUmFu
Z2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxTb3VyY2VSYW5nZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8U291cmNlUmFuZ2U+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
U291cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRTdGFydCguLi4pCiAgICAgKiAgICAgLnNldEVuZCguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNvdXJjZVJhbmdlKCkpKTsKICAgIH0KfTsKCmNs
YXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNl
dCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTmFtZVNldCB8IFZhbHVlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NDb21wdXRlZFN0eWxl
UHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYg
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZVByb3BlcnR5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4gcmVzdWx0ID0gQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHkoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFz
cyBDU1NTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjc3NQcm9wZXJ0aWVzJyB3aGlsZSBnZW5lcmF0aW5nIENT
U1N0eWxlLgogICAgY2xhc3MgQ3NzUHJvcGVydGllcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CiAgICBwcml2YXRlOgogICAgICAgIENzc1Byb3BlcnRpZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAg
ICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9w
ZXJ0eT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENzc1Byb3BlcnRpZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDc3NQcm9wZXJ0aWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2hvcnRoYW5kRW50cmllcycgd2hpbGUgZ2VuZXJh
dGluZyBDU1NTdHlsZS4KICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzKCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
ICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNob3J0aGFuZEVudHJpZXM+IGNy
ZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaG9ydGhhbmRFbnRyaWVz
KCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIENzc1Byb3BlcnRpZXNTZXQgPSAxIDw8IDAsCiAgICAgICAgU2hvcnRoYW5kRW50
cmllc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ3NzUHJvcGVydGllc1Nl
dCB8IFNob3J0aGFuZEVudHJpZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDc3NQcm9wZXJ0aWVzU2V0PiYgc2V0Q3NzUHJvcGVydGllcygvKlBhc3NS
ZWZQdHI8Q3NzUHJvcGVydGllcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDc3NQcm9wZXJ0
aWVzU2V0KSwgcHJvcGVydHlfY3NzUHJvcGVydGllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDc3NQcm9wZXJ0aWVzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFNob3J0aGFuZEVudHJpZXNTZXQ+JiBzZXRTaG9ydGhhbmRFbnRyaWVz
KC8qUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNob3J0aGFuZEVudHJpZXNTZXQpLCBwcm9wZXJ0eV9zaG9ydGhhbmRFbnRyaWVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJzaG9ydGhhbmRFbnRyaWVzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNob3J0aGFuZEVudHJpZXNTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxDU1NTdHlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q1NTU3R5bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENT
U1N0eWxlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAgICAq
ICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0eWxlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0
eWxlSWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgic3R5bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImNzc1RleHQiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6U291cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygid2lkdGgiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVl
KTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5k
IHNvdXJjZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMn
IHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAg
ICBlbnVtIEVudW0gewogICAgICAgICAgICBBY3RpdmUgPSA0NCwKICAgICAgICAgICAgSW5hY3Rp
dmUgPSA0NSwKICAgICAgICAgICAgRGlzYWJsZWQgPSA0NiwKICAgICAgICAgICAgU3R5bGUgPSA0
NywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVl
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NQcm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ1NTUHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1l
U2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCks
IHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJv
cGVydHk+IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1l
KC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBz
ZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygicHJpb3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29s
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBh
cnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2Vk
T2siLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0U2hvcnRoYW5kTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5n
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBtZWRpYSBxdWVy
eSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxl
IGdlbmVyYXRpbmcgQ1NTTWVkaWEuCiAgICBzdHJ1Y3QgU291cmNlIHsKICAgICAgICBlbnVtIEVu
dW0gewogICAgICAgICAgICBNZWRpYVJ1bGUgPSA0OCwKICAgICAgICAgICAgSW1wb3J0UnVsZSA9
IDQ5LAogICAgICAgICAgICBMaW5rZWRTaGVldCA9IDUwLAogICAgICAgICAgICBJbmxpbmVTaGVl
dCA9IDUxLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU291cmNlCgogICAgZW51bSB7CiAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFRleHRTZXQgPSAxIDw8IDAsCiAgICAgICAg
U291cmNlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUZXh0U2V0IHwgU291
cmNlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Q1NTTWVkaWE+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENTU01lZGlhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGV4
dFNldD4mIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUZXh0U2V0KSwgcHJvcGVydHlfdGV4dF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGV4dFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBzZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZVNl
dCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNvdXJjZVNldD4mIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZVNldCks
IHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInNvdXJjZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3Vy
Y2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3Vs
dCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLikKICAgICAqICAg
ICAuc2V0U291cmNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07Cgov
KiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50
cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNlbGVjdG9yU2V0ID0gMSA8PCAwLAogICAgICAgIFVy
bFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAyLAogICAgICAgIFRp
bWVTZXQgPSAxIDw8IDMsCiAgICAgICAgSGl0Q291bnRTZXQgPSAxIDw8IDQsCiAgICAgICAgTWF0
Y2hDb3VudFNldCA9IDEgPDwgNSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JTZXQg
fCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgVGltZVNldCB8IEhpdENvdW50U2V0IHwgTWF0Y2hD
b3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeTsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbGVjdG9yU2V0PiYgc2V0U2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTZWxlY3RvclNldCksIHByb3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2VsZWN0b3JTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJs
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlu
ZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGltZVNldD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVTZXQpLCBwcm9wZXJ0eV90aW1l
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidGltZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhpdENvdW50U2V0PiYgc2V0SGl0Q291bnQoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhpdENv
dW50U2V0KSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxIaXRDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNYXRjaENvdW50U2V0PiYgc2V0TWF0Y2hDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hDb3VudFNldCksIHByb3BlcnR5
X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hdGNo
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQ
cm9maWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclBy
b2ZpbGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0
b3JQcm9maWxlRW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+
IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRT
ZWxlY3RvciguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVO
dW1iZXIoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0Q291
bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlRW50cnkoKSkpOwog
ICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdoaWxlIGdl
bmVyYXRpbmcgU2VsZWN0b3JQcm9maWxlLgogICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIERhdGEoKSB7IH0KCiAgICBwdWJsaWM6CiAg
ICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3Rv
clByb2ZpbGVFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGE+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFRvdGFsVGltZVNldCA9IDEgPDwgMCwKICAgICAg
ICBEYXRhU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUb3RhbFRpbWVTZXQg
fCBEYXRhU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUb3RhbFRpbWVTZXQ+JiBzZXRUb3RhbFRpbWUoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRvdGFsVGltZVNl
dCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUb3RhbFRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
RGF0YVNldD4mIHNldERhdGEoLypQYXNzUmVmUHRyPERhdGE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRGF0YVNldCksIHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RGF0YVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxl
Y3RvclByb2ZpbGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclBy
b2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAg
LnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBTZWxlY3RvclByb2ZpbGUoKSkpOwogICAgfQp9OwoKfSAvLyBDU1MKCm5hbWVzcGFjZSBU
aW1lbGluZSB7Ci8qIFRpbWVsaW5lIHJlY29yZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgcmVjb3JkZWQgYWN0aXZpdHkuICovCmNsYXNzIFRpbWVsaW5lRXZlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
Y2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGltZWxpbmVFdmVudC4KICAgIGNsYXNzIENoaWxk
cmVuIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRy
ZW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2
YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGlsZHJlbj4gY3Jl
YXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENoaWxkcmVuKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgRGF0YVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoVHlwZVNldCB8IERhdGFTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZUV2ZW50OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEYXRhU2V0
PiYgc2V0RGF0YShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGF0YVNldCksIHByb3BlcnR5X2Rh
dGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJkYXRhIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERhdGFTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8VGltZWxpbmVFdmVudD4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFRpbWVsaW5lRXZlbnQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8VGltZWxpbmVFdmVudD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50
PiByZXN1bHQgPSBUaW1lbGluZUV2ZW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4u
LikKICAgICAqICAgICAuc2V0RGF0YSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IFRpbWVsaW5lRXZlbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0
Q2hpbGRyZW4oLypQYXNzUmVmUHRyPENoaWxkcmVuPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVl
KTsKICAgIH0KfTsKCn0gLy8gVGltZWxpbmUKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAq
LwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2NyaXB0SWRTZXQgPSAxIDw8
IDAsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoU2NyaXB0SWRTZXQgfCBMaW5lTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU2NyaXB0SWRTZXQ+JiBzZXRTY3JpcHRJZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTY3JpcHRJZFNldCks
IHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U2NyaXB0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51
bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVt
YmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51
bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExvY2F0aW9uPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBM
b2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAg
IC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgTG9jYXRpb24oKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q29sdW1uTnVtYmVy
KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIEphdmFTY3JpcHQgY2FsbCBmcmFtZS4gQXJyYXkgb2YgY2Fs
bCBmcmFtZXMgZm9ybSB0aGUgY2FsbCBzdGFjay4gKi8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ3Njb3BlQ2hhaW4nIHdoaWxlIGdlbmVyYXRpbmcgQ2FsbEZyYW1lLgogICAgY2xhc3MgU2Nv
cGVDaGFpbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFNj
b3BlQ2hhaW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNjb3BlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NvcGVDaGFpbj4gY3Jl
YXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjb3BlQ2hhaW4oKSk7CiAg
ICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgQ2FsbEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgRnVuY3Rpb25OYW1lU2V0ID0gMSA8
PCAxLAogICAgICAgIExvY2F0aW9uU2V0ID0gMSA8PCAyLAogICAgICAgIFNjb3BlQ2hhaW5TZXQg
PSAxIDw8IDMsCiAgICAgICAgVGhpc1NldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoQ2FsbEZyYW1lSWRTZXQgfCBGdW5jdGlvbk5hbWVTZXQgfCBMb2NhdGlvblNldCB8IFNjb3Bl
Q2hhaW5TZXQgfCBUaGlzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDYWxsRnJhbWVJZFNldD4mIHNldENhbGxGcmFtZUlkKC8qY29uc3QgVHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENhbGxGcmFtZUlkU2V0
KSwgcHJvcGVydHlfY2FsbEZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJjYWxsRnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDYWxsRnJhbWVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBGdW5jdGlvbk5hbWVTZXQ+JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlv
bk5hbWVTZXQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IExvY2F0aW9uU2V0PiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IExvY2F0aW9uU2V0KSwgcHJvcGVydHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxMb2NhdGlvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2NvcGVDaGFpbigvKlBhc3NSZWZQdHI8U2NvcGVD
aGFpbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTY29wZUNoYWluU2V0KSwgcHJvcGVydHlf
c2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
c2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTY29wZUNo
YWluU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRoaXNTZXQ+JiBz
ZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaGlzU2V0KSwgcHJvcGVydHlfdGhpc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGhpc1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZy
YW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0RnVuY3Rpb25O
YW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYXRpb24oLi4uKQogICAgICogICAgIC5zZXRTY29w
ZUNoYWluKC4uLikKICAgICAqICAgICAuc2V0VGhpcyguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxGcmFtZSgpKSk7CiAgICB9Cn07CgovKiBT
Y29wZSBkZXNjcmlwdGlvbi4gKi8KY2xhc3MgU2NvcGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUg
Z2VuZXJhdGluZyBTY29wZS4KICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewog
ICAgICAgICAgICBHbG9iYWwgPSA1MiwKICAgICAgICAgICAgTG9jYWwgPSA1MywKICAgICAgICAg
ICAgV2l0aCA9IDU0LAogICAgICAgICAgICBDbG9zdXJlID0gNTUsCiAgICAgICAgICAgIENhdGNo
ID0gNTYsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgT2Jq
ZWN0U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0IHwgT2JqZWN0
U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8U2NvcGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNl
dFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2
YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
eXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+
JiBzZXRPYmplY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVj
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoIm9iamVjdCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTY29w
ZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxT
Y29wZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2NvcGU+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8U2NvcGU+IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2NvcGUoKSkpOwogICAgfQp9OwoKfSAv
LyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBi
cmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01CcmVha3BvaW50VHlwZSB7CiAgICBlbnVtIEVu
dW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZpZWQgPSA1NywKICAgICAgICBBdHRyaWJ1dGVfbW9k
aWZpZWQgPSA1OCwKICAgICAgICBOb2RlX3JlbW92ZWQgPSA1OSwKICAgIH07Cn07IC8vIHN0cnVj
dCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCmNsYXNzIElu
c3BlY3RvckZyb250ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0
ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBo
aW50cyk7CiAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBp
ZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIEluc3BlY3RvciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAg
Y2xhc3MgTWVtb3J5IHsKICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7
IHJldHVybiAmbV9tZW1vcnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAg
ICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsK
ICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZv
aWQgZnJhbWVOYXZpZ2F0ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVE
ZXRhY2hlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIFBhZ2UqIHBhZ2UoKSB7IHJldHVybiAmbV9wYWdlOyB9CgogICAgY2xh
c3MgUnVudGltZSB7CiAgICBwdWJsaWM6CiAgICAgICAgUnVudGltZShJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBSdW50aW1lKiBydW50aW1lKCkg
eyByZXR1cm4gJm1fcnVudGltZTsgfQoKICAgIGNsYXNzIENvbnNvbGUgewogICAgcHVibGljOgog
ICAgICAgIENvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lc3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50
IGNvdW50KTsKICAgICAgICB2b2lkIG1lc3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xl
KCkgeyByZXR1cm4gJm1fY29uc29sZTsgfQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGlj
OgogICAgICAgIE5ldHdvcmsoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
Lypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0
cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRv
ciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGly
ZWN0UmVzcG9uc2UpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZSgvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQpOwogICAgICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNv
bnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRl
cklkLCBkb3VibGUgdGltZXN0YW1wLCAvKlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkVudW0qLyBjb25zdCBTdHJpbmcmIHR5cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsK
ICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGlu
dCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGlu
Z0ZpbmlzaGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2Fk
aW5nRmFpbGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJv
clRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RT
ZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVz
dElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3Ry
aW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlu
aXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJj
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpOwogICAgICAgIHZvaWQg
d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVz
dGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0KTsKICAgICAgICB2b2lkIHdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0
YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3
ZWJTb2NrZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgICAgIHZv
aWQgd2ViU29ja2V0Q2xvc2VkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsq
IG5ldHdvcmsoKSB7IHJldHVybiAmbV9uZXR3b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKICAgIGNsYXNzIERhdGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAg
IHZvaWQgYWRkRGF0YWJhc2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnY29sdW1uTmFtZXMnIHdoaWxlIGdlbmVyYXRp
bmcgZXZlbnQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgQ29sdW1uTmFt
ZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAg
IENvbHVtbk5hbWVzKCkgeyB9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJ
dGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRo
aXMtPnB1c2hTdHJpbmcodmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb2x1bW5OYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb2x1bW5OYW1lcygpKTsKICAgICAgICAgICAgfQogICAgICAgIH07Cgog
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICd2YWx1ZXMnIHdoaWxlIGdlbmVy
YXRpbmcgZXZlbnQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgVmFsdWVz
IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBW
YWx1ZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHRoaXMtPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFZhbHVlcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBWYWx1ZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAg
ICB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NS
ZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFt
ZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWVzKTsKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJh
c2UoKSB7IHJldHVybiAmbV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQiB7CiAg
ICBwdWJsaWM6CiAgICAgICAgSW5kZXhlZERCKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkYXRhYmFzZU5hbWVzTG9hZGVk
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpGcmFtZVdpdGhEYXRhYmFzZU5h
bWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZVdpdGhEYXRhYmFzZU5hbWVz
KTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07Cgog
ICAgSW5kZXhlZERCKiBpbmRleGVkZGIoKSB7IHJldHVybiAmbV9pbmRleGVkZGI7IH0KCiNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIERPTVN0b3JhZ2UgewogICAg
cHVibGljOgogICAgICAgIERPTVN0b3JhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERPTVN0b3JhZ2UoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpET01TdG9yYWdlOjpFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBz
dG9yYWdlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgfTsKCiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFn
ZTsgfQoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKC8q
Y29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKTsKICAgICAgICB2b2lk
IG5ldHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGluZSk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEFwcGxpY2F0aW9uQ2FjaGUq
IGFwcGxpY2F0aW9uY2FjaGUoKSB7IHJldHVybiAmbV9hcHBsaWNhdGlvbmNhY2hlOyB9CgojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRmlsZVN5c3RlbSB7CiAgICBwdWJsaWM6CiAg
ICAgICAgRmlsZVN5c3RlbShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBGaWxlU3lzdGVtKiBmaWxlc3lzdGVtKCkgeyByZXR1cm4gJm1fZmlsZXN5
c3RlbTsgfQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIERPTSB7CiAg
ICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb2N1bWVudFVwZGF0ZWQoKTsKICAgICAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnbm9kZXMnIHdoaWxlIGdlbmVyYXRpbmcg
ZXZlbnQgc2V0Q2hpbGROb2Rlcy4KICAgICAgICBjbGFzcyBOb2RlcyA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgTm9kZXMoKSB7IH0KCiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZXM+IGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZXMoKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAv
KlBhc3NSZWZQdHI8Tm9kZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwog
ICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQo
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgbmFtZSAnbm9kZUlkcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBpbmxpbmVTdHls
ZUludmFsaWRhdGVkLgogICAgICAgIGNsYXNzIE5vZGVJZHMgOiBwdWJsaWMgSW5zcGVjdG9yQXJy
YXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIE5vZGVJZHMoKSB7IH0KCiAgICAgICAg
cHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oaW50IHZhbHVlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUlkcz4gY3JlYXRlKCkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlSWRzKCkpOwogICAgICAgICAgICB9CiAg
ICAgICAgfTsKCiAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUludmFsaWRhdGVkKC8qUGFzc1JlZlB0
cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpOwogICAgICAg
IHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgY2hh
cmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQoaW50IG5vZGVJ
ZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUluc2VydGVkKGlu
dCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG5vZGUpOwogICAg
ICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgbm9kZUlkKTsK
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
RE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207IH0KCiAgICBjbGFzcyBDU1MgewogICAgcHVibGlj
OgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKICAgICAg
ICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ1NTKiBj
c3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5lKCkgeyByZXR1cm4gJm1fdGltZWxp
bmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERlYnVnZ2Vy
IHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZ2xvYmFsT2JqZWN0Q2xl
YXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpTY3JpcHRJZCYqLyBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcm
IHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBpbnQgZW5kTGluZSwgaW50IGVu
ZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2NyaXB0LCBjb25zdCBTdHJpbmcm
IHNvdXJjZU1hcFVSTCk7CiAgICAgICAgdm9pZCBzY3JpcHRGYWlsZWRUb1BhcnNlKGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSwgaW50IHN0YXJ0TGluZSwgaW50
IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgICAgIHZvaWQgYnJl
YWtwb2ludFJlc29sdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50
SWQmKi8gY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2Nh
dGlvbik7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2NhbGxGcmFtZXMn
IHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAgIGNsYXNzIENhbGxGcmFtZXMg
OiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENh
bGxGcmFtZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0o
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
dGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbGxGcmFtZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2FsbEZyYW1lcygpKTsKICAgICAgICAgICAgfQogICAgICAgIH07Cgog
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFzb24nIHdoaWxlIGdlbmVy
YXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAgIHN0cnVjdCBSZWFzb24gewogICAgICAgICAgICBl
bnVtIEVudW0gewogICAgICAgICAgICAgICAgWEhSID0gNSwKICAgICAgICAgICAgICAgIERPTSA9
IDYwLAogICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciA9IDYxLAogICAgICAgICAgICAgICAg
RXhjZXB0aW9uID0gNjIsCiAgICAgICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgICAgICB9
OwogICAgICAgIH07IC8vIHN0cnVjdCBSZWFzb24KCiAgICAgICAgdm9pZCBwYXVzZWQoLypQYXNz
UmVmUHRyPENhbGxGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1l
cywgLypSZWFzb246OkVudW0qLyBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAgIHZvaWQgcmVzdW1lZCgpOwogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEZWJ1Z2dlciogZGVi
dWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBE
T01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NRGVidWdnZXIoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
Z2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NRGVidWdnZXIqIGRv
bWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
Y2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAgICAgIFByb2ZpbGVyKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBh
ZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpOwogICAg
ICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1bmsoaW50IHVpZCwgY29uc3QgU3RyaW5nJiBjaHVu
ayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFwU25hcHNob3QoaW50IHVpZCk7CiAgICAgICAgdm9p
ZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpOwogICAgICAgIHZvaWQgcmVz
ZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MoaW50
IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVyKiBwcm9maWxlcigpIHsgcmV0dXJuICZtX3Byb2Zp
bGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUo
V09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJsaWM6CiAgICAgICAgV29ya2VyKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50
IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoaW50IHdv
cmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9p
ZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyByZXR1cm4gJm1f
d29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpwcml2YXRlOgogICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIEluc3Bl
Y3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9yeSBtX21lbW9yeTsKICAgIFBhZ2UgbV9wYWdlOwog
ICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBDb25zb2xlIG1fY29uc29sZTsKICAgIE5ldHdvcmsg
bV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIERhdGFiYXNlIG1fZGF0YWJh
c2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAgICBJbmRleGVkREIgbV9pbmRleGVkZGI7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgIERPTVN0b3JhZ2UgbV9kb21zdG9yYWdlOwogICAgQXBwbGljYXRpb25D
YWNoZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBGaWxl
U3lzdGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIERP
TSBtX2RvbTsKICAgIENTUyBtX2NzczsKICAgIFRpbWVsaW5lIG1fdGltZWxpbmU7CiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERlYnVnZ2VyIG1fZGVidWdnZXI7CiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBQcm9m
aWxlciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNp
ZiBFTkFCTEUoV09SS0VSUykKICAgIFdvcmtlciBtX3dvcmtlcjsKI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQp9OwoKI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCgp9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123321</attachid>
            <date>2012-01-20 08:29:59 -0800</date>
            <delta_ts>2012-01-20 08:29:59 -0800</delta_ts>
            <desc>InspectorFrontend.cpp base version</desc>
            <filename>InspectorFrontend.base.cpp</filename>
            <type>text/plain</type>
            <size>41786</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
cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50Iik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVySWQpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkwpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3RhY2tUcmFjZSkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZSk7CiAgICBpZiAo
cmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVkaXJl
Y3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFNlcnZlZEZy
b21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RT
ZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3Jr
LnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9t
Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAo
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0U2VydmVkRnJvbUNhY2hlTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpy
ZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJO
ZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
bG9hZGVySWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0
YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdHlw
ZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2UiLCByZXNwb25zZSk7CiAg
ICByZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VSZWNlaXZl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0
d29yazo6ZGF0YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFM
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
YXRhUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLmRhdGFSZWNl
aXZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIs
IHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZGF0YUxlbmd0aCIsIGRh
dGFMZW5ndGgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuY29kZWREYXRhTGVuZ3Ro
IiwgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoZGF0YVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpOZXR3b3JrOjpsb2FkaW5nRmluaXNoZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5p
c2hlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6bG9hZGluZ0ZhaWxlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1
ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0
IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbG9hZGluZ0ZhaWxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIk5ldHdvcmsubG9hZGluZ0ZhaWxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygiZXJyb3JUZXh0IiwgZXJyb3JUZXh0KTsKICAgIGlmIChjYW5jZWxlZCkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImNhbmNlbGVkIiwgKmNhbmNlbGVkKTsKICAgIGxvYWRp
bmdGYWlsZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChsb2FkaW5nRmFpbGVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVl
c3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3Vy
Y2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hl
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5yZXF1ZXN0U2VydmVkRnJvbU1l
bW9yeUNhY2hlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJl
cXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9h
ZGVySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1l
bnRVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFt
cCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgiaW5pdGlhdG9yIiwgaW5pdGlhdG9yKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNvdXJjZSIsIHJlc291cmNlKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVl
c3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tldFdpbGxTZW5k
SGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiTmV0d29yay53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElk
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9u
c2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2Nr
ZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2Vp
dmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJ
ZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwg
dGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHJlc3Bv
bnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2Nr
ZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldENsb3NlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGRvdWJsZSB0aW1lc3RhbXApCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tl
dENsb3NlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q2xvc2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRDbG9z
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0
aW1lc3RhbXApOwogICAgd2ViU29ja2V0Q2xvc2VkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2Vi
U29ja2V0Q2xvc2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNlOjphZGREYXRhYmFzZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGFkZERhdGFiYXNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRE
YXRhYmFzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLmFkZERhdGFiYXNl
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImRhdGFiYXNlIiwg
ZGF0YWJhc2UpOwogICAgYWRkRGF0YWJhc2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGREYXRh
YmFzZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
RGF0YWJhc2U6OnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBh
c3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1u
TmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc3FsVHJhbnNhY3Rp
b25TdWNjZWVkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5zcWxUcmFu
c2FjdGlvblN1Y2NlZWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJ0cmFuc2FjdGlvbklkIiwgdHJhbnNhY3Rpb25JZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyIsIGNvbHVtbk5hbWVzKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoInZhbHVlcyIsIHZhbHVlcyk7CiAgICBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3Nh
Z2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6c3FsVHJhbnNh
Y3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzcWxFcnJvcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25G
YWlsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0
aW9uRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25GYWlsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigi
dHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIiwgc3FsRXJyb3IpOwogICAgc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbmRleGVkREI6OmRhdGFiYXNl
TmFtZXNMb2FkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkZyYW1lV2l0
aERhdGFiYXNlTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lV2l0aERh
dGFiYXNlTmFtZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlTmFtZXNM
b2FkZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRhdGFiYXNlTmFt
ZXNMb2FkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbmRleGVkREIuZGF0YWJhc2VO
YW1lc0xvYWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJm
cmFtZVdpdGhEYXRhYmFzZU5hbWVzIiwgZnJhbWVXaXRoRGF0YWJhc2VOYW1lcyk7CiAgICBkYXRh
YmFzZU5hbWVzTG9hZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGF0YWJhc2VOYW1lc0xvYWRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFn
ZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBzdG9yYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhZGRET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBh
ZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NU3RvcmFnZS5hZGRE
T01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInN0
b3JhZ2UiLCBzdG9yYWdlKTsKICAgIGFkZERPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChhZGRET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpET01TdG9yYWdlOjp1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET01TdG9yYWdlLnVwZGF0ZURPTVN0b3JhZ2UiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RvcmFnZUlkIiwgc3RvcmFnZUlkKTsK
ICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpB
cHBsaWNhdGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cykKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQXBwbGljYXRpb25DYWNoZS5hcHBsaWNhdGlvbkNhY2hl
U3RhdHVzVXBkYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibWFuaWZl
c3RVUkwiLCBtYW5pZmVzdFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhdHVz
Iiwgc3RhdHVzKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkFwcGxpY2F0aW9uQ2FjaGU6Om5l
dHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGluZSkKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIkFwcGxpY2F0aW9uQ2FjaGUubmV0d29ya1N0YXRlVXBkYXRlZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNOb3dPbmxpbmUiLCBpc05vd09ubGluZSk7
CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobmV0d29ya1N0
YXRlVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmRvY3VtZW50VXBkYXRlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRvY3VtZW50VXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmRvY3VtZW50
VXBkYXRlZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZG9jdW1lbnRV
cGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpET006OnNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAvKlBhc3NSZWZQdHI8Tm9kZXM+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHNldENoaWxkTm9kZXNNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNldENoaWxkTm9kZXNNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uc2V0Q2hp
bGROb2RlcyIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJl
bnRJZCIsIHBhcmVudElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVzIiwgbm9k
ZXMpOwogICAgc2V0Q2hpbGROb2Rlc01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNldENoaWxkTm9k
ZXNNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRP
TTo6YXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhdHRyaWJ1dGVN
b2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRl
TW9kaWZpZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uYXR0cmlidXRlTW9kaWZp
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwg
bm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CiAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICBhdHRyaWJ1dGVNb2Rp
ZmllZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZVJl
bW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NLmF0dHJpYnV0ZVJlbW92ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJu
YW1lIiwgbmFtZSk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6RE9NOjppbmxpbmVTdHlsZUludmFsaWRhdGVkKC8qUGFzc1JlZlB0cjxOb2Rl
SWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uaW5saW5lU3R5bGVJbnZhbGlkYXRlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBub2RlSWRzKTsKICAgIGlu
bGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbmxpbmVTdHlsZUlu
dmFsaWRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IGNoYXJhY3RlckRhdGEpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoYXJhY3RlckRh
dGFNb2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hhcmFj
dGVyRGF0YU1vZGlmaWVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoYXJhY3Rl
ckRhdGFNb2RpZmllZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJub2RlSWQiLCBub2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImNoYXJhY3Rl
ckRhdGEiLCBjaGFyYWN0ZXJEYXRhKTsKICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVDb3VudFVwZGF0
ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIiwgIkRPTS5jaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIGNoaWxkTm9kZUNvdW50KTsKICAgIGNoaWxkTm9k
ZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNoaWxkTm9kZUNvdW50VXBkYXRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9N
OjpjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBub2RlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVJ
bnNlcnRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2Rl
SW5zZXJ0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlSW5zZXJ0
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50Tm9k
ZUlkIiwgcGFyZW50Tm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwcmV2aW91
c05vZGVJZCIsIHByZXZpb3VzTm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJu
b2RlIiwgbm9kZSk7CiAgICBjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpET006OmNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50
IG5vZGVJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5jaGlsZE5vZGVSZW1vdmVkIik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInBhcmVudE5vZGVJZCIsIHBhcmVu
dE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsK
ICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVSZW1v
dmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpD
U1M6Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiQ1NTLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6VGltZWxpbmU6OmV2ZW50UmVjb3Jk
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBldmVudFJlY29yZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBldmVudFJlY29yZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiVGltZWxpbmUu
ZXZlbnRSZWNvcmRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJyZWNvcmQiLCByZWNvcmQpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGV2ZW50UmVjb3JkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpn
bG9iYWxPYmplY3RDbGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2xvYmFs
T2JqZWN0Q2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZ2xv
YmFsT2JqZWN0Q2xlYXJlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLmds
b2JhbE9iamVjdENsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OlNjcmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBp
bnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQ
YXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNjcmlwdFBhcnNl
ZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlw
dElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFydENvbHVtbik7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAgICBpZiAoaXNDb250ZW50U2NyaXB0KQog
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNDb250ZW50U2NyaXB0IiwgKmlzQ29u
dGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic291cmNlTWFwVVJMIiwg
c291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNj
cmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVn
Z2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jp
cHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0
YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZXJyb3JM
aW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvck1lc3Nh
Z2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0K
CnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpicmVha3BvaW50UmVzb2x2ZWQoLypj
b25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBicmVha3BvaW50SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImxvY2F0aW9uIiwgbG9jYXRpb24pOwogICAgYnJl
YWtwb2ludFJlc29sdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYnJlYWtwb2ludFJlc29sdmVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1
Z2dlcjo6cGF1c2VkKC8qUGFzc1JlZlB0cjxDYWxsRnJhbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVj
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
TkFCTEUoV09SS0VSUykKCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewoKY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICJEb2N1bWVudCIsCiAgICAiU3R5bGVz
aGVldCIsCiAgICAiSW1hZ2UiLAogICAgIkZvbnQiLAogICAgIlNjcmlwdCIsCiAgICAiWEhSIiwK
ICAgICJXZWJTb2NrZXQiLAogICAgIk90aGVyIiwKICAgICJvYmplY3QiLAogICAgImZ1bmN0aW9u
IiwKICAgICJ1bmRlZmluZWQiLAogICAgInN0cmluZyIsCiAgICAibnVtYmVyIiwKICAgICJib29s
ZWFuIiwKICAgICJhcnJheSIsCiAgICAibnVsbCIsCiAgICAibm9kZSIsCiAgICAicmVnZXhwIiwK
ICAgICJkYXRlIiwKICAgICJodG1sIiwKICAgICJ3bWwiLAogICAgInhtbCIsCiAgICAiamF2YXNj
cmlwdCIsCiAgICAibmV0d29yayIsCiAgICAiY29uc29sZS1hcGkiLAogICAgIm90aGVyIiwKICAg
ICJ0aXAiLAogICAgImxvZyIsCiAgICAid2FybmluZyIsCiAgICAiZXJyb3IiLAogICAgImRlYnVn
IiwKICAgICJkaXIiLAogICAgImRpcnhtbCIsCiAgICAidHJhY2UiLAogICAgInN0YXJ0R3JvdXAi
LAogICAgInN0YXJ0R3JvdXBDb2xsYXBzZWQiLAogICAgImVuZEdyb3VwIiwKICAgICJhc3NlcnQi
LAogICAgInBhcnNlciIsCiAgICAic2NyaXB0IiwKICAgICJ1c2VyIiwKICAgICJ1c2VyLWFnZW50
IiwKICAgICJpbnNwZWN0b3IiLAogICAgInJlZ3VsYXIiLAogICAgImFjdGl2ZSIsCiAgICAiaW5h
Y3RpdmUiLAogICAgImRpc2FibGVkIiwKICAgICJzdHlsZSIsCiAgICAibWVkaWFSdWxlIiwKICAg
ICJpbXBvcnRSdWxlIiwKICAgICJsaW5rZWRTaGVldCIsCiAgICAiaW5saW5lU2hlZXQiLAogICAg
Imdsb2JhbCIsCiAgICAibG9jYWwiLAogICAgIndpdGgiLAogICAgImNsb3N1cmUiLAogICAgImNh
dGNoIiwKICAgICJzdWJ0cmVlLW1vZGlmaWVkIiwKICAgICJhdHRyaWJ1dGUtbW9kaWZpZWQiLAog
ICAgIm5vZGUtcmVtb3ZlZCIsCiAgICAiRE9NIiwKICAgICJFdmVudExpc3RlbmVyIiwKICAgICJl
eGNlcHRpb24iCn07CgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKfQoKfSAvLyBuYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123323</attachid>
            <date>2012-01-20 08:31:33 -0800</date>
            <delta_ts>2012-01-23 12:58:42 -0800</delta_ts>
            <desc>sample of new InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>161856</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCi8vIFR5cGVkZWZzLgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0g
Ly8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQovLyBFbmQgb2YgdHlwZWRlZnMuCgoKClN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CgpuYW1lc3BhY2UgTWVtb3J5IHsKLyogTnVt
YmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8KY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEg
PDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZU5hbWVTZXQgfCBDb3VudFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5v
ZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9k
ZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlfbm9kZU5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb3VudFNldD4mIHNldENvdW50KGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb3Vu
dFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3Vu
dD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBv
ZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IENvdW50U2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0
eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExpc3RlbmVyQ291bnQ+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKSk7CiAgICB9Cn07Cgov
KiBDaGFyYWN0ZXIgZGF0YSBzdGF0aXN0aWNzIGZvciB0aGUgcGFnZS4gKi8KY2xhc3MgU3RyaW5n
U3RhdGlzdGljcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRG9tU2V0ID0gMSA8PCAwLAogICAgICAg
IEpzU2V0ID0gMSA8PCAxLAogICAgICAgIFNoYXJlZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoRG9tU2V0IHwgSnNTZXQgfCBTaGFyZWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdTdGF0
aXN0aWNzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG9tU2V0PiYgc2V0
RG9tKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEb21TZXQpLCBwcm9wZXJ0eV9kb21fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJkb20iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RG9tU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEpzU2V0PiYg
c2V0SnMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEpzU2V0KSwgcHJvcGVydHlfanNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJqcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxKc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaGFyZWRTZXQ+
JiBzZXRTaGFyZWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNoYXJlZFNldCksIHByb3BlcnR5X3NoYXJlZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNoYXJlZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTaGFyZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8U3RyaW5nU3RhdGlzdGljcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFN0cmluZ1N0YXRp
c3RpY3M+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiByZXN1bHQgPSBTdHJpbmdTdGF0aXN0aWNzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXREb20o
Li4uKQogICAgICogICAgIC5zZXRKcyguLi4pCiAgICAgKiAgICAgLnNldFNoYXJlZCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFN0cmluZ1N0YXRp
c3RpY3MoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNvdW50
JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpN
ZW1vcnk6Ok5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVD
b3VudD4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVDb3Vu
dCgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J2xpc3RlbmVyQ291bnQnIHdoaWxlIGdlbmVyYXRpbmcgRE9NR3JvdXAuCiAgICBjbGFzcyBMaXN0
ZW5lckNvdW50IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAg
TGlzdGVuZXJDb3VudCgpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gY3JlYXRlKCkgewogICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExpc3RlbmVyQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsK
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2l6ZVNldCA9IDEg
PDwgMCwKICAgICAgICBUaXRsZVNldCA9IDEgPDwgMSwKICAgICAgICBOb2RlQ291bnRTZXQgPSAx
IDw8IDIsCiAgICAgICAgTGlzdGVuZXJDb3VudFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoU2l6ZVNldCB8IFRpdGxlU2V0IHwgTm9kZUNvdW50U2V0IHwgTGlzdGVuZXJDb3Vu
dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBET01Hcm91cDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVT
ZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQpLCBwcm9wZXJ0eV90
aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVDb3VudFNldD4mIHNldE5vZGVDb3Vu
dChQYXNzUmVmUHRyPE5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUNvdW50U2V0KSwgcHJvcGVydHlfbm9kZUNvdW50X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZUNvdW50U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0
ZW5lckNvdW50KFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlzdGVuZXJDb3VudFNldCksIHByb3Bl
cnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3VwPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxE
T01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNpemUo
Li4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVDb3VudCgu
Li4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91cCgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE1lbW9yeQoK
bmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFzIGl0IHdhcyBwZXJjZWl2ZWQgYnkg
dGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNvdXJjZVR5cGUgewogICAgZW51bSBF
bnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAgU3R5bGVzaGVldCA9IDEsCiAgICAg
ICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAgICAgIFNjcmlwdCA9IDQsCiAgICAg
ICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAogICAgICAgIE90aGVyID0gNywKICAg
IH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBG
cmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElk
U2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0gMSA8PCAxLAogICAgICAgIFVybFNl
dCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNldCB8IE1pbWVUeXBlU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJh
bWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2FkZXJJZFNldD4m
IHNldExvYWRlcklkKGNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRT
ZXQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExvYWRlcklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVy
bFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBl
U2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxG
cmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0g
RnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9h
ZGVySWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlw
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZy
YW1lKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWN1cml0eU9y
aWdpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c2VjdXJpdHlPcmlnaW4iLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8K
Y2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRGcmFtZXMnIHdoaWxlIGdl
bmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICBjbGFzcyBDaGlsZEZyYW1lcyA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIENoaWxkRnJhbWVzKCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENoaWxkRnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2hpbGRGcmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRy
ZWUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJp
dmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3Mg
SXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgZW51bSB7CiAgICAgICAgICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgICAgICAg
ICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAg
ICAgICAgICAgICAgTWltZVR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IE1pbWVUeXBlU2V0KQogICAgICAgICAgICB9OwoK
ICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgICAgICAgICBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxJdGVtPiBwdHIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgSXRlbTsKICAgICAgICAg
ICAgcHVibGljOgogICAgICAgIAogICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNl
dD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWltZVR5cGVTZXQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxJdGVtPiYgKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SXRlbT4qPigm
bV9yZXN1bHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8SXRlbT4gKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEl0ZW0+KCp0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAgICAgICAgICogUmVmUHRyPEl0ZW0+IHJlc3VsdCA9IEl0ZW06OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAgICAgICAgICAgKi8K
ICAgICAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgSXRlbSgpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIGFk
ZEl0ZW0oUGFzc1JlZlB0cjxJdGVtPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMt
PnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVzb3VyY2VzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVz
b3VyY2VzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIEZyYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFJlc291cmNlc1NldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRnJhbWVTZXQgfCBSZXNvdXJjZXNTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBGcmFtZVNldD4mIHNldEZyYW1lKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBGcmFtZVNldCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RnJhbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8UmVzb3VyY2VzPiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNvdXJjZXNT
ZXQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxSZXNvdXJjZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
RnJhbWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVS
ZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3Vs
dCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VUcmVlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAwLAogICAgICAgIExpbmVDb250ZW50
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChMaW5lTnVtYmVyU2V0IHwgTGlu
ZUNvbnRlbnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCks
IHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TGluZUNvbnRlbnRTZXQ+JiBzZXRMaW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVDb250ZW50U2V0
KSwgcHJvcGVydHlfbGluZUNvbnRlbnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxMaW5lQ29udGVudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWFyY2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAq
LwpjbGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwg
MCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAxLAogICAgICAgIE1hdGNoZXNDb3VudFNldCA9
IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgRnJhbWVJZFNldCB8IE1h
dGNoZXNDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlf
dXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hl
c0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNYXRjaGVzQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1
bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3Vu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tp
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNl
dCA9IDEgPDwgMSwKICAgICAgICBEb21haW5TZXQgPSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9
IDEgPDwgMywKICAgICAgICBFeHBpcmVzU2V0ID0gMSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAx
IDw8IDUsCiAgICAgICAgSHR0cE9ubHlTZXQgPSAxIDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0g
MSA8PCA3LAogICAgICAgIFNlc3Npb25TZXQgPSAxIDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCB8IERvbWFpblNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0
IHwgU2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwgU2VjdXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tp
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBW
YWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UGF0aFNldD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF0aFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVzU2V0PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCks
IHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4
cGlyZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4m
IHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEh0dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIdHRwT25seVNldCksIHByb3BlcnR5X2h0dHBP
bmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBP
bmx5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3Vy
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNlY3VyZVNldCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U2VjdXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Np
b25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lv
biIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tp
ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAq
ICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAg
LnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0
SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRT
ZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewov
KiBNaXJyb3Igb2JqZWN0IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQgb2JqZWN0LiAq
LwpjbGFzcyBSZW1vdGVPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBS
ZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgT2JqZWN0ID0gOCwKICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAogICAgICAgICAgICBV
bmRlZmluZWQgPSAxMCwKICAgICAgICAgICAgU3RyaW5nID0gMTEsCiAgICAgICAgICAgIE51bWJl
ciA9IDEyLAogICAgICAgICAgICBCb29sZWFuID0gMTMsCiAgICAgICAgfTsKI2lmICghQVNTRVJU
X0RJU0FCTEVEKQogICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSk7CiNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQp
CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J3N1YnR5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFN1YnR5
cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEFycmF5ID0gMTQsCiAgICAgICAg
ICAgIE51bGwgPSAxNSwKICAgICAgICAgICAgTm9kZSA9IDE2LAogICAgICAgICAgICBSZWdleHAg
PSAxNywKICAgICAgICAgICAgRGF0ZSA9IDE4LAogICAgICAgIH07CiNpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpOwojZW5kaWYgIC8vICghQVNTRVJUX0RJU0FCTEVEKQogICAg
fTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8UmVtb3RlT2JqZWN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8UmVtb3RlT2JqZWN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90
ZU9iamVjdD4gcmVzdWx0ID0gUmVtb3RlT2JqZWN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRU
eXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
UmVtb3RlT2JqZWN0KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51
bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7
CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNl
dERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE9iamVjdElk
KGNvbnN0IFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b2JqZWN0OwogICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsK
ICAgICAgICBBU1NFUlQoY2FzdFJlcyk7CiNpZiAoIUFTU0VSVF9ESVNBQkxFRCkKICAgICAgICBh
c3NlcnRDb3JyZWN0VmFsdWUob2JqZWN0KTsKI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkK
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVtb3RlT2JqZWN0KSA9PSBzaXplb2YoSW5z
cGVjdG9yT2JqZWN0KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwogICAgICAgIHJldHVybiAqKHJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9iamVjdD4qPigmb2JqZWN0KSk7CiAgICB9CgojaWYg
KCFBU1NFUlRfRElTQUJMRUQpCiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOwojZW5kaWYgIC8vICghQVNTRVJUX0RJU0FC
TEVEKQp9OwoKLyogT2JqZWN0IHByb3BlcnR5IGRlc2NyaXB0b3IuICovCmNsYXNzIFByb3BlcnR5
RGVzY3JpcHRvciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAg
ICBXcml0YWJsZVNldCA9IDEgPDwgMSwKICAgICAgICBDb25maWd1cmFibGVTZXQgPSAxIDw8IDIs
CiAgICAgICAgRW51bWVyYWJsZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
TmFtZVNldCB8IFdyaXRhYmxlU2V0IHwgQ29uZmlndXJhYmxlU2V0IHwgRW51bWVyYWJsZVNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PFByb3BlcnR5RGVzY3JpcHRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlf
bmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBXcml0YWJsZVNldD4mIHNldFdyaXRhYmxlKGJv
b2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
V3JpdGFibGVTZXQpLCBwcm9wZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxXcml0YWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb25maWd1cmFibGVTZXQ+JiBzZXRDb25maWd1cmFibGUoYm9vbCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25maWd1cmFibGVT
ZXQpLCBwcm9wZXJ0eV9jb25maWd1cmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0Qm9vbGVhbigiY29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvbmZpZ3VyYWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBFbnVtZXJhYmxlU2V0PiYgc2V0RW51bWVyYWJsZShib29sIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVudW1lcmFibGVTZXQp
LCBwcm9wZXJ0eV9lbnVtZXJhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEJvb2xlYW4oImVudW1lcmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RW51bWVyYWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxQcm9wZXJ0eURlc2NyaXB0b3I+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHJv
cGVydHlEZXNjcmlwdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQ
cm9wZXJ0eURlc2NyaXB0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9y
PiByZXN1bHQgPSBQcm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICogICAgIC5zZXRXcml0YWJsZSguLi4pCiAgICAgKiAgICAgLnNldENvbmZp
Z3VyYWJsZSguLi4pCiAgICAgKiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBQcm9wZXJ0eURlc2NyaXB0b3IoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInZh
bHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsK
CgogICAgdm9pZCBzZXRHZXQoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImdldCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFNldChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic2V0
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0V2FzVGhyb3duKGJvb2wgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigid2FzVGhyb3duIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogUmVwcmVzZW50cyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50LiBFaXRoZXIgcmVtb3RlIG9iamVj
dCBpZCA8Y29kZT5vYmplY3RJZDwvY29kZT4gb3IgcHJpbWl0aXZlIDxjb2RlPnZhbHVlPC9jb2Rl
PiBvciBuZWl0aGVyIG9mIChmb3IgdW5kZWZpbmVkKSB0aGVtIHNob3VsZCBiZSBzcGVjaWZpZWQu
ICovCmNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8Q2FsbEFyZ3VtZW50PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDYWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDYWxsQXJndW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsQXJndW1lbnQ+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEFyZ3VtZW50PiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsQXJndW1lbnQ+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBDYWxsQXJndW1lbnQ6OmNyZWF0
ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxB
cmd1bWVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1
ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lk
IHNldE9iamVjdElkKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVl
KTsKICAgIH0KfTsKCn0gLy8gUnVudGltZQoKbmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xl
IG1lc3NhZ2UuICovCmNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hp
bGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAg
IGVudW0gRW51bSB7CiAgICAgICAgICAgIEh0bWwgPSAxOSwKICAgICAgICAgICAgV21sID0gMjAs
CiAgICAgICAgICAgIFhtbCA9IDIxLAogICAgICAgICAgICBKYXZhc2NyaXB0ID0gMjIsCiAgICAg
ICAgICAgIE5ldHdvcmsgPSAyMywKICAgICAgICAgICAgQ29uc29sZV9hcGkgPSAyNCwKICAgICAg
ICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFNvdXJjZQoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENv
bnNvbGVNZXNzYWdlLgogICAgc3RydWN0IExldmVsIHsKICAgICAgICBlbnVtIEVudW0gewogICAg
ICAgICAgICBUaXAgPSAyNiwKICAgICAgICAgICAgTG9nID0gMjcsCiAgICAgICAgICAgIFdhcm5p
bmcgPSAyOCwKICAgICAgICAgICAgRXJyb3IgPSAyOSwKICAgICAgICAgICAgRGVidWcgPSAzMCwK
ICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IExldmVsCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0
cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBMb2cgPSAyNywKICAg
ICAgICAgICAgRGlyID0gMzEsCiAgICAgICAgICAgIERpcnhtbCA9IDMyLAogICAgICAgICAgICBU
cmFjZSA9IDMzLAogICAgICAgICAgICBTdGFydEdyb3VwID0gMzQsCiAgICAgICAgICAgIFN0YXJ0
R3JvdXBDb2xsYXBzZWQgPSAzNSwKICAgICAgICAgICAgRW5kR3JvdXAgPSAzNiwKICAgICAgICAg
ICAgQXNzZXJ0ID0gMzcsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncGFyYW1ldGVycycgd2hpbGUgZ2VuZXJhdGluZyBD
b25zb2xlTWVzc2FnZS4KICAgIGNsYXNzIFBhcmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yQXJy
YXkgewogICAgcHJpdmF0ZToKICAgICAgICBQYXJhbWV0ZXJzKCkgeyB9CgogICAgcHVibGljOgog
ICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2
YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiBj
cmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFyYW1ldGVycygpKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAg
ICAgICBTb3VyY2VTZXQgPSAxIDw8IDAsCiAgICAgICAgTGV2ZWxTZXQgPSAxIDw8IDEsCiAgICAg
ICAgVGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU291cmNlU2V0IHwg
TGV2ZWxTZXQgfCBUZXh0U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENvbnNvbGVNZXNzYWdlOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlU2V0PiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3Vy
Y2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzb3VyY2UiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBMZXZlbFNldD4mIHNldExldmVsKExldmVsOjpFbnVtIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExldmVsU2V0KSwg
cHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TGV2ZWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVGV4dFNldD4mIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUZXh0U2V0KSwgcHJvcGVydHlfdGV4
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGV4dFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENvbnNvbGVNZXNzYWdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPENvbnNvbGVNZXNzYWdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb25zb2xlTWVz
c2FnZT4gcmVzdWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNv
dXJjZSguLi4pCiAgICAgKiAgICAgLnNldExldmVsKC4uLikKICAgICAqICAgICAuc2V0VGV4dCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENvbnNv
bGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1
ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImxpbmUi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXBlYXRDb3VudChpbnQgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJyZXBlYXRDb3VudCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRBcnJheSgicGFyYW1ldGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tU
cmFjZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdElkKGNvbnN0IFR5cGVCdWls
ZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygibmV0d29ya1JlcXVlc3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFN0YWNrIGVudHJ5
IGZvciBjb25zb2xlIGVycm9ycyBhbmQgYXNzZXJ0aW9ucy4gKi8KY2xhc3MgQ2FsbEZyYW1lIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBGdW5jdGlvbk5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgVXJs
U2V0ID0gMSA8PCAxLAogICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDIsCiAgICAgICAgQ29s
dW1uTnVtYmVyU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGdW5jdGlvbk5h
bWVTZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgQ29sdW1uTnVtYmVyU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZy
YW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJh
bWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5hbWVTZXQ+
JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9wZXJ0eV9m
dW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnVu
Y3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQpLCBw
cm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENv
bHVtbk51bWJlclNldD4mIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTnVtYmVyU2V0KSwgcHJvcGVy
dHlfY29sdW1uTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiY29sdW1uTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvbHVtbk51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxD
YWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZ1
bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExp
bmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAg
fQp9OwoKLyogQ2FsbCBmcmFtZXMgZm9yIGFzc2VydGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMuICov
CmNsYXNzIFN0YWNrVHJhY2UgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewpwcml2YXRlOgogICAg
U3RhY2tUcmFjZSgpIHsgfQoKcHVibGljOgogICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNvbnNvbGU6OkNhbGxGcmFtZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
cHVzaE9iamVjdCh2YWx1ZSk7CiAgICB9CgogICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhY2tUcmFj
ZT4gY3JlYXRlKCkgewogICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RhY2tUcmFjZSgpKTsK
ICAgIH0KfTsKCn0gLy8gQ29uc29sZQoKbmFtZXNwYWNlIE5ldHdvcmsgewovKiBUaW1pbmcgaW5m
b3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0LiAqLwpjbGFzcyBSZXNvdXJjZVRpbWluZyA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgUmVxdWVzdFRpbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgUHJveHlTdGFy
dFNldCA9IDEgPDwgMSwKICAgICAgICBQcm94eUVuZFNldCA9IDEgPDwgMiwKICAgICAgICBEbnNT
dGFydFNldCA9IDEgPDwgMywKICAgICAgICBEbnNFbmRTZXQgPSAxIDw8IDQsCiAgICAgICAgQ29u
bmVjdFN0YXJ0U2V0ID0gMSA8PCA1LAogICAgICAgIENvbm5lY3RFbmRTZXQgPSAxIDw8IDYsCiAg
ICAgICAgU3NsU3RhcnRTZXQgPSAxIDw8IDcsCiAgICAgICAgU3NsRW5kU2V0ID0gMSA8PCA4LAog
ICAgICAgIFNlbmRTdGFydFNldCA9IDEgPDwgOSwKICAgICAgICBTZW5kRW5kU2V0ID0gMSA8PCAx
MCwKICAgICAgICBSZWNlaXZlSGVhZGVyc0VuZFNldCA9IDEgPDwgMTEsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKFJlcXVlc3RUaW1lU2V0IHwgUHJveHlTdGFydFNldCB8IFByb3h5RW5kU2V0IHwg
RG5zU3RhcnRTZXQgfCBEbnNFbmRTZXQgfCBDb25uZWN0U3RhcnRTZXQgfCBDb25uZWN0RW5kU2V0
IHwgU3NsU3RhcnRTZXQgfCBTc2xFbmRTZXQgfCBTZW5kU3RhcnRTZXQgfCBTZW5kRW5kU2V0IHwg
UmVjZWl2ZUhlYWRlcnNFbmRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNvdXJjZVRpbWluZz4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VUaW1pbmc7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZXF1ZXN0VGltZVNldD4mIHNldFJlcXVlc3RUaW1lKGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBSZXF1ZXN0VGltZVNldCksIHByb3BlcnR5X3JlcXVlc3RUaW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVxdWVzdFRpbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVxdWVzdFRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgUHJveHlTdGFydFNldD4mIHNldFByb3h5U3RhcnQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBy
b3h5U3RhcnRTZXQpLCBwcm9wZXJ0eV9wcm94eVN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQcm94eVN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFByb3h5RW5kU2V0PiYgc2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFByb3h5RW5kU2V0KSwg
cHJvcGVydHlfcHJveHlFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJwcm94eUVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQ
cm94eUVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEbnNTdGFy
dFNldD4mIHNldERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEbnNTdGFydFNldCksIHByb3BlcnR5X2Ruc1N0YXJ0X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zU3RhcnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RG5zU3RhcnRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG5zRW5kU2V0PiYgc2V0RG5zRW5kKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBE
bnNFbmRTZXQpLCBwcm9wZXJ0eV9kbnNFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJkbnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RG5zRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENv
bm5lY3RTdGFydFNldD4mIHNldENvbm5lY3RTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdFN0YXJ0U2V0KSwgcHJv
cGVydHlfY29ubmVjdFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigiY29ubmVjdFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPENvbm5lY3RTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb25uZWN0RW5kU2V0PiYgc2V0Q29ubmVjdEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdEVuZFNldCksIHByb3Bl
cnR5X2Nvbm5lY3RFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJjb25uZWN0RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bm5lY3RFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3NsU3Rh
cnRTZXQ+JiBzZXRTc2xTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3NsU3RhcnRTZXQpLCBwcm9wZXJ0eV9zc2xTdGFydF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbFN0YXJ0Iiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNzbFN0YXJ0U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNzbEVuZFNldD4mIHNldFNzbEVuZChkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3NsRW5kU2V0KSwgcHJvcGVydHlfc3NsRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigic3NsRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNzbEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
ZW5kU3RhcnRTZXQ+JiBzZXRTZW5kU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlbmRTdGFydFNldCksIHByb3BlcnR5X3Nl
bmRTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNl
bmRTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZW5kU3RhcnRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2VuZEVuZFNldD4mIHNl
dFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNlbmRFbmRTZXQpLCBwcm9wZXJ0eV9zZW5kRW5kX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZEVuZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZW5kRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFJlY2VpdmVIZWFkZXJzRW5kU2V0PiYgc2V0UmVjZWl2ZUhlYWRlcnNF
bmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFJlY2VpdmVIZWFkZXJzRW5kU2V0KSwgcHJvcGVydHlfcmVjZWl2ZUhlYWRlcnNFbmRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZWNlaXZlSGVh
ZGVyc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZWNlaXZlSGVh
ZGVyc0VuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNvdXJj
ZVRpbWluZz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1pbmc6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAuc2V0UHJv
eHlTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAgICAuc2V0
RG5zU3RhcnQoLi4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAgIC5zZXRD
b25uZWN0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAqICAg
ICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAgICogICAg
IC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAqICAg
ICAuc2V0UmVjZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXNvdXJjZVRpbWluZygpKSk7CiAgICB9Cn07CgovKiBIVFRQ
IHJlcXVlc3QgZGF0YS4gKi8KY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVXJs
U2V0ID0gMSA8PCAwLAogICAgICAgIE1ldGhvZFNldCA9IDEgPDwgMSwKICAgICAgICBIZWFkZXJz
U2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBNZXRob2RTZXQg
fCBIZWFkZXJzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgUmVxdWVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWV0aG9kU2V0PiYgc2V0TWV0aG9kKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWV0aG9kU2V0
KSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1l
dGhvZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0
PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3Bl
cnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVxdWVzdD4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQgPSBSZXF1
ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNZXRo
b2QoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVxdWVzdCgpKSk7CiAgICB9CgogICAgdm9pZCBz
ZXRQb3N0RGF0YShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygicG9zdERhdGEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBIVFRQIHJlc3BvbnNlIGRhdGEu
ICovCmNsYXNzIFJlc3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAs
CiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAxLAogICAgICAgIFN0YXR1c1RleHRTZXQgPSAxIDw8
IDIsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMywKICAgICAgICBNaW1lVHlwZVNldCA9IDEg
PDwgNCwKICAgICAgICBDb25uZWN0aW9uUmV1c2VkU2V0ID0gMSA8PCA1LAogICAgICAgIENvbm5l
Y3Rpb25JZFNldCA9IDEgPDwgNiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgU3Rh
dHVzU2V0IHwgU3RhdHVzVGV4dFNldCB8IEhlYWRlcnNTZXQgfCBNaW1lVHlwZVNldCB8IENvbm5l
Y3Rpb25SZXVzZWRTZXQgfCBDb25uZWN0aW9uSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzcG9uc2U7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQp
LCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1
cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU3RhdHVzU2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTdGF0dXNUZXh0U2V0PiYgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1RleHRT
ZXQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdGF0dXNUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFk
ZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
aW1lVHlwZVNldD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWltZVR5cGVTZXQpLCBwcm9wZXJ0
eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1pbWVUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbm5lY3Rpb25SZXVz
ZWRTZXQ+JiBzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVjdGlvblJldXNlZFNldCksIHByb3Bl
cnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb25uZWN0aW9uUmV1c2VkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvbm5lY3Rpb25JZFNldD4mIHNldENvbm5lY3Rpb25JZChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29ubmVj
dGlvbklkU2V0KSwgcHJvcGVydHlfY29ubmVjdGlvbklkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdGlvbklkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvbm5lY3Rpb25JZFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxSZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc3BvbnNlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc3BvbnNl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNwb25zZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxSZXNwb25zZT4gcmVzdWx0ID0gUmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgKiAgICAg
LnNldFN0YXR1c1RleHQoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLikKICAgICAqICAg
ICAuc2V0TWltZVR5cGUoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uUmV1c2VkKC4uLikK
ICAgICAqICAgICAuc2V0Q29ubmVjdGlvbklkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVzcG9uc2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0
SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoImhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhl
YWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgicmVxdWVzdEhlYWRlcnMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRSZXF1ZXN0SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInJlcXVlc3RIZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldEZyb21EaXNrQ2FjaGUoYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRC
b29sZWFuKCJmcm9tRGlza0NhY2hlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGltaW5n
KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInRpbWluZyIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIFdlYlNvY2tldCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFdlYlNvY2tldFJlcXVlc3QgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIFJlcXVlc3RLZXkzU2V0ID0gMSA8PCAwLAogICAgICAgIEhlYWRl
cnNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFJlcXVlc3RLZXkzU2V0IHwg
SGVhZGVyc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBSZXF1ZXN0S2V5M1NldD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUmVxdWVzdEtleTNTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0S2V5M19hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RLZXkzU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29j
a2V0UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJl
cXVlc3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFJlcXVlc3RLZXkzKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlcXVlc3QoKSkp
OwogICAgfQp9OwoKLyogV2ViU29ja2V0IHJlc3BvbnNlIGRhdGEuICovCmNsYXNzIFdlYlNvY2tl
dFJlc3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDAsCiAgICAg
ICAgU3RhdHVzVGV4dFNldCA9IDEgPDwgMSwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAyLAog
ICAgICAgIENoYWxsZW5nZVJlc3BvbnNlU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChTdGF0dXNTZXQgfCBTdGF0dXNUZXh0U2V0IHwgSGVhZGVyc1NldCB8IENoYWxsZW5nZVJl
c3BvbnNlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlc3BvbnNlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzU2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBw
cm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVz
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+
JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1
c1RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0
dXNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNl
dEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9o
ZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVh
ZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENoYWxsZW5nZVJlc3BvbnNlU2V0
PiYgc2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDaGFsbGVuZ2VSZXNwb25zZVNldCks
IHByb3BlcnR5X2NoYWxsZW5nZVJlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiY2hhbGxlbmdlUmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q2hhbGxlbmdlUmVzcG9uc2VTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxX
ZWJTb2NrZXRSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2Vi
U29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAg
ICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNl
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgV2Vi
U29ja2V0UmVzcG9uc2UoKSkpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNh
Y2hlZCByZXNvdXJjZS4gKi8KY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAgICAgIEJv
ZHlTaXplU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBUeXBl
U2V0IHwgQm9keVNpemVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBw
cm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGVC
dWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJvZHlTaXplU2V0PiYg
c2V0Qm9keVNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEJvZHlTaXplU2V0KSwgcHJvcGVydHlfYm9keVNpemVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJib2R5U2l6ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCb2R5U2l6ZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENh
Y2hlZFJlc291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPENhY2hlZFJlc291cmNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWNoZWRSZXNvdXJj
ZT4gcmVzdWx0ID0gQ2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCgu
Li4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRCb2R5U2l6ZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhY2hlZFJl
c291cmNlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRP
YmplY3QoInJlc3BvbnNlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQg
dGhlIHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpjbGFzcyBJbml0aWF0b3IgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlw
ZScgd2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0b3IuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAg
ZW51bSBFbnVtIHsKICAgICAgICAgICAgUGFyc2VyID0gMzgsCiAgICAgICAgICAgIFNjcmlwdCA9
IDM5LAogICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3Qg
VHlwZQoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0
ID0gMSA8PCAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5pdGlhdG9yPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBJbml0aWF0b3I7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBl
OjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxJbml0aWF0b3I+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5pdGlh
dG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbml0aWF0b3I+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBJbml0aWF0b3IoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tU
cmFjZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgic3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZU51bWJlcihk
b3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwg
dmFsdWUpOwogICAgfQp9OwoKfSAvLyBOZXR3b3JrCgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
bmFtZXNwYWNlIERhdGFiYXNlIHsKLyogRGF0YWJhc2Ugb2JqZWN0LiAqLwpjbGFzcyBEYXRhYmFz
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgRG9tYWluU2V0
ID0gMSA8PCAxLAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgVmVyc2lvblNldCA9
IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSWRTZXQgfCBEb21haW5TZXQgfCBOYW1l
U2V0IHwgVmVyc2lvblNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPERhdGFiYXNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IElkU2V0PiYgc2V0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRG9tYWluU2V0PiYgc2V0RG9tYWluKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRG9tYWluU2V0
KSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERv
bWFpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYg
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFZlcnNpb25TZXQ+JiBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmVyc2lvblNldCks
IHByb3BlcnR5X3ZlcnNpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZl
cnNpb25TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RGF0YWJhc2U+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxEYXRhYmFzZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxEYXRhYmFzZT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8RGF0YWJhc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RGF0YWJhc2U+IHJl
c3VsdCA9IERhdGFiYXNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgKiAg
ICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5z
ZXRWZXJzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgRGF0YWJhc2UoKSkpOwogICAgfQp9OwoKfSAvLyBEYXRhYmFzZQoKI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKbmFtZXNwYWNl
IEluZGV4ZWREQiB7Ci8qIE9yaWdpbiB3aXRoIGRhdGFiYXNlIG5hbWVzIGFuZCBmcmFtZSBpZHMu
ICovCmNsYXNzIEZyYW1lV2l0aERhdGFiYXNlTmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGF0YWJhc2VOYW1l
cycgd2hpbGUgZ2VuZXJhdGluZyBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzLgogICAgY2xhc3MgRGF0
YWJhc2VOYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAg
IERhdGFiYXNlTmFtZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoU3RyaW5n
KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlTmFt
ZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZU5h
bWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgU2VjdXJpdHlPcmlnaW5T
ZXQgPSAxIDw8IDEsCiAgICAgICAgRGF0YWJhc2VOYW1lc1NldCA9IDEgPDwgMiwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoRnJhbWVJZFNldCB8IFNlY3VyaXR5T3JpZ2luU2V0IHwgRGF0YWJhc2VO
YW1lc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aERhdGFiYXNlTmFtZXM7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2VjdXJpdHlPcmlnaW5TZXQ+JiBzZXRTZWN1
cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNlY3VyaXR5T3JpZ2luU2V0KSwgcHJvcGVydHlfc2VjdXJp
dHlPcmlnaW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJz
ZWN1cml0eU9yaWdpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZWN1
cml0eU9yaWdpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEYXRh
YmFzZU5hbWVzU2V0PiYgc2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPERhdGFiYXNlTmFtZXM+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERh
dGFiYXNlTmFtZXNTZXQpLCBwcm9wZXJ0eV9kYXRhYmFzZU5hbWVzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJkYXRhYmFzZU5hbWVzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERhdGFiYXNlTmFtZXNTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiByZXN1bHQgPSBGcmFt
ZVdpdGhEYXRhYmFzZU5hbWVzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikK
ICAgICAqICAgICAuc2V0U2VjdXJpdHlPcmlnaW4oLi4uKQogICAgICogICAgIC5zZXREYXRhYmFz
ZU5hbWVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcygpKSk7CiAgICB9Cn07Cgp9IC8vIEluZGV4ZWREQgoK
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpuYW1lc3BhY2UgRE9NU3RvcmFnZSB7
Ci8qIERPTSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgSG9zdFNldCA9IDEgPDwgMCwKICAgICAgICBJc0xvY2FsU3RvcmFnZVNldCA9IDEgPDwgMSwK
ICAgICAgICBJZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSG9zdFNldCB8
IElzTG9jYWxTdG9yYWdlU2V0IHwgSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBIb3N0U2V0PiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhvc3RTZXQpLCBwcm9wZXJ0
eV9ob3N0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaG9z
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIb3N0U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzTG9jYWxTdG9yYWdlU2V0PiYgc2V0SXNM
b2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBJc0xvY2FsU3RvcmFnZVNldCksIHByb3BlcnR5X2lzTG9jYWxTdG9yYWdl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9jYWxT
dG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElzTG9jYWxTdG9y
YWdlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0
SWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPEVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5zZXRJc0xvY2FsU3Rv
cmFnZSguLi4pCiAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihhZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9y
YWdlCgpuYW1lc3BhY2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9u
IGNhY2hlIHJlc291cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBTaXpl
U2V0ID0gMSA8PCAxLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFVybFNldCB8IFNpemVTZXQgfCBUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBV
cmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVT
ZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyogRGV0
YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxpY2F0aW9u
Q2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5nIEFwcGxpY2F0aW9u
Q2FjaGUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAg
cHJpdmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5w
dXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
c291cmNlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlc291
cmNlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBNYW5pZmVzdFVSTFNldCA9IDEgPDwgMCwKICAgICAgICBTaXplU2V0ID0g
MSA8PCAxLAogICAgICAgIENyZWF0aW9uVGltZVNldCA9IDEgPDwgMiwKICAgICAgICBVcGRhdGVU
aW1lU2V0ID0gMSA8PCAzLAogICAgICAgIFJlc291cmNlc1NldCA9IDEgPDwgNCwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoTWFuaWZlc3RVUkxTZXQgfCBTaXplU2V0IHwgQ3JlYXRpb25UaW1lU2V0
IHwgVXBkYXRlVGltZVNldCB8IFJlc291cmNlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7
CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYW5pZmVzdFVSTFNldD4mIHNl
dE1hbmlmZXN0VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWFuaWZlc3RVUkxTZXQpLCBwcm9wZXJ0eV9tYW5pZmVz
dFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlm
ZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hbmlmZXN0VVJM
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRT
aXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
cmVhdGlvblRpbWVTZXQ+JiBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENyZWF0aW9uVGltZVNldCksIHBy
b3BlcnR5X2NyZWF0aW9uVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoImNyZWF0aW9uVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDcmVhdGlvblRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVXBkYXRlVGltZVNldD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVwZGF0ZVRpbWVTZXQpLCBwcm9w
ZXJ0eV91cGRhdGVUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigidXBkYXRlVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxV
cGRhdGVUaW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291
cmNlc1NldD4mIHNldFJlc291cmNlcyhQYXNzUmVmUHRyPFJlc291cmNlcz4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVzb3VyY2VzU2V0KSwg
cHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UmVzb3VyY2VzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcmVzdWx0ID0gQXBwbGlj
YXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAg
ICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0Q3JlYXRpb25UaW1lKC4uLikKICAg
ICAqICAgICAuc2V0VXBkYXRlVGltZSguLi4pCiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0
aW9uQ2FjaGUoKSkpOwogICAgfQp9OwoKLyogRnJhbWUgaWRlbnRpZmllciAtIG1hbmlmZXN0IFVS
TCBwYWlyLiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
RnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBNYW5pZmVzdFVSTFNldCA9IDEgPDwgMSwKICAg
ICAgICBTdGF0dXNTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKEZyYW1lSWRT
ZXQgfCBNYW5pZmVzdFVSTFNldCB8IFN0YXR1c1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVdpdGhNYW5pZmVz
dDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRG
cmFtZUlkKGNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJv
cGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnJhbWVJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYW5pZmVzdFVSTFNl
dD4mIHNldE1hbmlmZXN0VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWFuaWZlc3RVUkxTZXQpLCBwcm9wZXJ0eV9t
YW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hbmlm
ZXN0VVJMU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1Nl
dD4mIHNldFN0YXR1cyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU3RhdHVzU2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0
aE1hbmlmZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhN
YW5pZmVzdD4gcmVzdWx0ID0gRnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAg
ICAgLnNldFN0YXR1cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsKICAgIH0KfTsKCn0gLy8gQXBwbGljYXRp
b25DYWNoZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRl
ZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERP
TSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgTm9k
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdjaGlsZHJlbicgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgogICAgY2xhc3Mg
Q2hpbGRyZW4gOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBD
aGlsZHJlbigpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
aGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ2F0dHJpYnV0ZXMnIHdoaWxlIGdlbmVyYXRpbmcgTm9kZS4KICAgIGNsYXNzIEF0dHJp
YnV0ZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBBdHRy
aWJ1dGVzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaFN0cmluZyh2YWx1ZSk7
CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyaWJ1dGVzPiBjcmVhdGUo
KSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXR0cmlidXRlcygpKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBO
b2RlSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTm9kZVR5cGVTZXQgPSAxIDw8IDEsCiAgICAgICAg
Tm9kZU5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgTG9jYWxOYW1lU2V0ID0gMSA8PCAzLAogICAg
ICAgIE5vZGVWYWx1ZVNldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZUlk
U2V0IHwgTm9kZVR5cGVTZXQgfCBOb2RlTmFtZVNldCB8IExvY2FsTmFtZVNldCB8IE5vZGVWYWx1
ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlSWRTZXQ+JiBz
ZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTm9kZVR5cGVTZXQ+JiBzZXROb2RlVHlwZShpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZVR5cGVTZXQpLCBwcm9wZXJ0
eV9ub2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
Im5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVOYW1lU2V0PiYg
c2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFtZVNldCksIHByb3BlcnR5X25vZGVOYW1lX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZU5hbWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYWxOYW1lU2V0PiYgc2V0TG9jYWxOYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTG9jYWxOYW1lU2V0KSwgcHJvcGVydHlfbG9jYWxOYW1lX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibG9jYWxOYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvY2FsTmFtZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVmFsdWVTZXQ+JiBzZXROb2RlVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBOb2RlVmFsdWVTZXQpLCBwcm9wZXJ0eV9ub2RlVmFsdWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlVmFsdWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZVZhbHVlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOb2RlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGU+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9k
ZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAg
ICAqICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAg
ICAgKiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVWYWx1ZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IE5vZGUoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPENoaWxkcmVuPiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRB
dHRyaWJ1dGVzKFBhc3NSZWZQdHI8QXR0cmlidXRlcz4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0QXJyYXkoImF0dHJpYnV0ZXMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXREb2N1
bWVudFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygiZG9jdW1lbnRVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQdWJsaWNJZChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHVibGljSWQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTeXN0ZW1JZChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3lzdGVtSWQiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRJbnRlcm5hbFN1YnNldChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygiaW50ZXJuYWxTdWJzZXQiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRYbWxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJ4bWxWZXJzaW9uIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
bmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0K
ICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0Q29udGVu
dERvY3VtZW50KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJjb250ZW50RG9jdW1lbnQiLCB2YWx1ZSk7CiAgICB9
Cn07CgovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWlycm9y
IG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUgaXMg
YSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgVXNlQ2FwdHVyZVNldCA9IDEg
PDwgMSwKICAgICAgICBJc0F0dHJpYnV0ZVNldCA9IDEgPDwgMiwKICAgICAgICBOb2RlSWRTZXQg
PSAxIDw8IDMsCiAgICAgICAgSGFuZGxlckJvZHlTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKFR5cGVTZXQgfCBVc2VDYXB0dXJlU2V0IHwgSXNBdHRyaWJ1dGVTZXQgfCBOb2Rl
SWRTZXQgfCBIYW5kbGVyQm9keVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVT
ZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVzZUNhcHR1cmVTZXQ+
JiBzZXRVc2VDYXB0dXJlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVXNlQ2FwdHVyZVNldCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVc2VDYXB0dXJlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzQXR0cmlidXRlU2V0PiYgc2V0SXNB
dHRyaWJ1dGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBJc0F0dHJpYnV0ZVNldCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElzQXR0cmlidXRlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVJZFNldD4mIHNldE5vZGVJZChpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9k
ZUlkU2V0KSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5vZGVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIYW5k
bGVyQm9keVNldD4mIHNldEhhbmRsZXJCb2R5KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGFuZGxlckJvZHlTZXQpLCBw
cm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEhhbmRsZXJCb2R5U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFdmVudExpc3RlbmVyPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEV2ZW50TGlzdGVuZXI+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcmVzdWx0ID0gRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFVzZUNhcHR1
cmUoLi4uKQogICAgICogICAgIC5zZXRJc0F0dHJpYnV0ZSguLi4pCiAgICAgKiAgICAgLnNldE5v
ZGVJZCguLi4pCiAgICAgKiAgICAgLnNldEhhbmRsZXJCb2R5KC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRXZlbnRMaXN0ZW5lcigpKSk7CiAgICB9
CgogICAgdm9pZCBzZXRMb2NhdGlvbihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgibG9jYXRpb24i
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBBIHN0cnVjdHVyZSBob2xkaW5nIGFuIFJHQkEgY29sb3Iu
ICovCi8vIFR5cGUgb3JpZ2luYWxseSB3YXMgbmFtZWQgJ1JHQkEnLgpjbGFzcyBSZ2JhIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBSU2V0ID0gMSA8PCAwLAogICAgICAgIEdTZXQgPSAxIDw8IDEsCiAg
ICAgICAgQlNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUlNldCB8IEdTZXQg
fCBCU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8UmdiYT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgUmdiYTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJTZXQ+JiBzZXRS
KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBSU2V0KSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UlNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBHU2V0PiYgc2V0RyhpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgR1NldCks
IHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEdTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQlNldD4mIHNldEIoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJTZXQpLCBwcm9wZXJ0
eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYiIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPFJnYmE+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZ2JhPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJnYmE+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJnYmE+KCp0aGlzKTsKICAgICAgICB9
CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQ
dHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UiguLi4pCiAg
ICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAgIC5zZXRCKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmdiYSgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRBKGRvdWJsZSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImEiLCB2
YWx1ZSk7CiAgICB9Cn07CgovKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBoaWdobGlnaHRp
bmcgb2YgcGFnZSBlbGVtZW50cy4gKi8KY2xhc3MgSGlnaGxpZ2h0Q29uZmlnIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxIaWdobGlnaHRDb25maWc+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEhpZ2hsaWdodENvbmZpZzsKICAgIHB1
YmxpYzoKCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxIaWdobGlnaHRDb25maWc+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxI
aWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSGlnaGxpZ2h0Q29uZmln
KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFNob3dJbmZvKGJvb2wgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0Qm9vbGVhbigic2hvd0luZm8iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRDb250ZW50Q29sb3IoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
OlJnYmE+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicGFkZGluZ0NvbG9y
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RE9NOjpSZ2JhPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3Qo
ImJvcmRlckNvbG9yIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TWFyZ2luQ29sb3IoUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRPYmplY3QoIm1hcmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5h
bWVzcGFjZSBDU1MgewovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEg
dW5pcXVlIHdheS4gKi8KY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3R5
bGVTaGVldElkU2V0ID0gMSA8PCAwLAogICAgICAgIE9yZGluYWxTZXQgPSAxIDw8IDEsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IE9yZGluYWxTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHls
ZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHls
ZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0
PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlf
c3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0
eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmRp
bmFsU2V0PiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgT3JkaW5hbFNldCksIHByb3BlcnR5X29yZGluYWxfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9yZGluYWxTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVJZD4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0
eWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q1NTU3R5bGVJZD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NT
U3R5bGVJZD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZUlkPiByZXN1bHQgPSBDU1NTdHls
ZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAg
IC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgQ1NTU3R5bGVJZCgpKSk7CiAgICB9CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NT
dHlsZUlkPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAg
IHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgICAgYm9vbCBj
YXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgICAgIEFTU0VSVChjYXN0UmVz
KTsKI2lmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmpl
Y3QpOwojZW5kaWYgIC8vICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihDU1NTdHlsZUlkKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgdHlwZV9jYXN0
X3Byb2JsZW0pOwogICAgICAgIHJldHVybiAqKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0
eWxlSWQ+Kj4oJm9iamVjdCkpOwogICAgfQoKI2lmICghQVNTRVJUX0RJU0FCTEVEKQogICAgc3Rh
dGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKTsKI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKfTsKCi8qIFRoaXMgb2JqZWN0IGlk
ZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1J1bGVJZCA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCiAgICAgICAgU3R5bGVTaGVldElkU2V0ID0gMSA8PCAwLAogICAgICAgIE9y
ZGluYWxTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNl
dCB8IE9yZGluYWxTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlSWQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIENTU1J1bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxl
U2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT3JkaW5hbFNldD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9yZGluYWxTZXQpLCBw
cm9wZXJ0eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigib3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmRp
bmFsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGVJZD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPENTU1J1bGVJZD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NSdWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENTU1J1bGVJZD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NSdWxlSWQ+
IHJlc3VsdCA9IENTU1J1bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElk
KC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1J1bGVJZCgpKSk7CiAgICB9CiAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NSdWxlSWQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQogICAgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsK
ICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICAgICAg
QVNTRVJUKGNhc3RSZXMpOwojaWYgKCFBU1NFUlRfRElTQUJMRUQpCiAgICAgICAgYXNzZXJ0Q29y
cmVjdFZhbHVlKG9iamVjdCk7CiNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCiAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKENTU1J1bGVJZCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gKihyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm9iamVjdCkpOwogICAgfQoKI2lmICghQVNTRVJUX0RJU0FC
TEVEKQogICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKTsKI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKfTsKCi8qIENT
UyBydWxlIGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNl
dWRvSWRSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBQc2V1ZG9JZFJ1
bGVzLgogICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0
ZToKICAgICAgICBSdWxlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0o
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBQc2V1ZG9JZFNldCA9IDEgPDwgMCwKICAgICAgICBSdWxl
c1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUHNldWRvSWRTZXQgfCBSdWxl
c1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBQc2V1ZG9JZFNldD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQc2V1ZG9JZFNldCksIHByb3BlcnR5X3Bz
ZXVkb0lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHNl
dWRvSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHNldWRvSWRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxl
cyhQYXNzUmVmUHRyPFJ1bGVzPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1
ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9J
ZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVk
b0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAqICAg
ICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBQc2V1ZG9JZFJ1bGVzKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rp
b24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRy
eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdtYXRjaGVkQ1NTUnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcgSW5oZXJpdGVk
U3R5bGVFbnRyeS4KICAgIGNsYXNzIE1hdGNoZWRDU1NSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIE1hdGNoZWRDU1NSdWxlcygpIHsgfQoKICAgIHB1
YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1bGVz
PiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0Y2hlZENTU1J1
bGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIE1hdGNoZWRDU1NSdWxlc1NldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWF0Y2hlZENTU1J1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRy
eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hdGNoZWRDU1NSdWxlc1Nl
dD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxlcz4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hlZENT
U1J1bGVzU2V0KSwgcHJvcGVydHlfbWF0Y2hlZENTU1J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlZENTU1J1bGVzU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcmVzdWx0ID0gSW5oZXJpdGVkU3R5bGVFbnRy
eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5oZXJpdGVkU3R5bGVFbnRy
eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3Qo
ImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGluZm9ybWF0aW9u
IGZvciBhIERPTSBzdHlsZSBhdHRyaWJ1dGUuICovCmNsYXNzIENTU1N0eWxlQXR0cmlidXRlIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFN0eWxlU2V0ID0g
MSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgU3R5bGVTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NT
dHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5
bGVBdHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxl
QXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVBdHRyaWJ1dGUoKSkpOwog
ICAgfQp9OwoKLyogQ1NTIHN0eWxlc2hlZXQgbWV0YWluZm9ybWF0aW9uLiAqLwpjbGFzcyBDU1NT
dHlsZVNoZWV0SGVhZGVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAx
IDw8IDAsCiAgICAgICAgU291cmNlVVJMU2V0ID0gMSA8PCAxLAogICAgICAgIFRpdGxlU2V0ID0g
MSA8PCAyLAogICAgICAgIERpc2FibGVkU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChTdHlsZVNoZWV0SWRTZXQgfCBTb3VyY2VVUkxTZXQgfCBUaXRsZVNldCB8IERpc2FibGVk
U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlcjsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlVVJMU2V0PiYgc2V0U291cmNlVVJMKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU291cmNlVVJMU2V0KSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVVSTFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVT
ZXQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRp
dGxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpc2FibGVkU2V0
PiYgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBEaXNhYmxlZFNldCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpc2FibGVkU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRl
cjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAu
c2V0U291cmNlVVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5z
ZXREaXNhYmxlZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IENTU1N0eWxlU2hlZXRIZWFkZXIoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlc2hl
ZXQgY29udGVudHMuICovCmNsYXNzIENTU1N0eWxlU2hlZXRCb2R5IDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3J1bGVz
JyB3aGlsZSBnZW5lcmF0aW5nIENTU1N0eWxlU2hlZXRCb2R5LgogICAgY2xhc3MgUnVsZXMgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSdWxlcygpIHsgfQoK
ICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmpl
Y3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNy
ZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBT
dHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQgPSAxIDw8IDEsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFJ1bGVzU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldEJvZHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENT
U1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5
bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0
KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSdWxlc1NldD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8UnVsZXM+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJ1bGVzU2V0KSwgcHJv
cGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
InJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJ1bGVzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0Qm9k
eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAu
c2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFs
dWUpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1
bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIg
cHJvcGVydHkgbmFtZSAnb3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBzdHJ1
Y3QgT3JpZ2luIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVc2VyID0gNDAsCiAg
ICAgICAgICAgIFVzZXJfYWdlbnQgPSA0MSwKICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIsCiAg
ICAgICAgICAgIFJlZ3VsYXIgPSA0MywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9yaWdp
bgoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21lZGlhJyB3aGlsZSBnZW5lcmF0
aW5nIENTU1J1bGUuCiAgICBjbGFzcyBNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAg
ICBwcml2YXRlOgogICAgICAgIE1lZGlhKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQg
YWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWE+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZWRpYSgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTZWxlY3RvclRleHRTZXQgPSAxIDw8IDAs
CiAgICAgICAgU291cmNlTGluZVNldCA9IDEgPDwgMSwKICAgICAgICBPcmlnaW5TZXQgPSAxIDw8
IDIsCiAgICAgICAgU3R5bGVTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNl
bGVjdG9yVGV4dFNldCB8IFNvdXJjZUxpbmVTZXQgfCBPcmlnaW5TZXQgfCBTdHlsZVNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENT
U1J1bGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1
bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWxlY3RvclRleHRTZXQ+
JiBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWxlY3RvclRleHRTZXQpLCBwcm9wZXJ0eV9z
ZWxlY3RvclRleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJzZWxlY3RvclRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2Vs
ZWN0b3JUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJj
ZUxpbmVTZXQ+JiBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VMaW5lU2V0KSwgcHJvcGVydHlfc291cmNl
TGluZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNvdXJj
ZUxpbmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlTGluZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBzZXRP
cmlnaW4oT3JpZ2luOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE9yaWdpblNldCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JpZ2luU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUo
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9z
dHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NSdWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENTU1J1bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1J1
bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291cmNl
TGluZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0eWxl
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NT
UnVsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSdWxlSWQoUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NSdWxlSWQ+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgi
cnVsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWxlY3RvclJhbmdlKFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgic2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKFBhc3NS
ZWZQdHI8TWVkaWE+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3VyY2UuICovCmNs
YXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGFydFNldCA9IDEgPDwgMCwK
ICAgICAgICBFbmRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0YXJ0U2V0
IHwgRW5kU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFNvdXJjZVJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU3RhcnRTZXQ+JiBzZXRTdGFydChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhcnRTZXQpLCBwcm9wZXJ0eV9zdGFydF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEVuZFNldD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRW5kU2V0KSwgcHJvcGVydHlf
ZW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZW5kIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVuZFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTb3VyY2VSYW5nZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNv
dXJjZVJhbmdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPFNvdXJjZVJhbmdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxTb3VyY2VSYW5nZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0g
U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4uLikKICAgICAqICAg
ICAuc2V0RW5kKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgU291cmNlUmFuZ2UoKSkpOwogICAgfQp9OwoKY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVBy
b3BlcnR5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZh
bHVlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVT
ZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFt
ZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5h
bWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1bHQgPSBDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQog
ICAgICogICAgIC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSgpKSk7CiAgICB9Cn07Cgov
KiBDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1N0eWxlIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J2Nzc1Byb3BlcnRpZXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTU3R5bGUuCiAgICBjbGFzcyBDc3NQ
cm9wZXJ0aWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAg
Q3NzUHJvcGVydGllcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENzc1Byb3BlcnRpZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDc3NQcm9wZXJ0aWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2hvcnRoYW5kRW50cmllcycgd2hpbGUgZ2Vu
ZXJhdGluZyBDU1NTdHlsZS4KICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzKCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVl
KTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNob3J0aGFuZEVudHJpZXM+
IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaG9ydGhhbmRFbnRy
aWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIENzc1Byb3BlcnRpZXNTZXQgPSAxIDw8IDAsCiAgICAgICAgU2hvcnRoYW5k
RW50cmllc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ3NzUHJvcGVydGll
c1NldCB8IFNob3J0aGFuZEVudHJpZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDc3NQcm9wZXJ0aWVzU2V0PiYgc2V0Q3NzUHJvcGVydGllcyhQYXNz
UmVmUHRyPENzc1Byb3BlcnRpZXM+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIENzc1Byb3BlcnRpZXNTZXQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0
aWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9w
ZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENzc1Byb3BlcnRp
ZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5kRW50
cmllc1NldD4mIHNldFNob3J0aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVz
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
aG9ydGhhbmRFbnRyaWVzU2V0KSwgcHJvcGVydHlfc2hvcnRoYW5kRW50cmllc19hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaG9ydGhhbmRFbnRyaWVzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8Q1NTU3R5bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTU3R5bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPENTU1N0eWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlPiByZXN1bHQgPSBDU1NT
dHlsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Q3NzUHJvcGVydGllcyguLi4pCiAgICAgKiAg
ICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdHls
ZUlkKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXaWR0
aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygid2lk
dGgiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsKICAgIH0K
fTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBv
ZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdl
bmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVtIEVu
dW0gewogICAgICAgICAgICBBY3RpdmUgPSA0NCwKICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwK
ICAgICAgICAgICAgRGlzYWJsZWQgPSA0NiwKICAgICAgICAgICAgU3R5bGUgPSA0NywKICAgICAg
ICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8
PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9w
ZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJv
cGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0
TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5
X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFs
dWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJl
c3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAg
ICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0
eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHJp
b3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJv
b2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFNob3J0aGFuZE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNv
dXJjZVJhbmdlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdlIiwg
dmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3IuICovCmNsYXNz
IENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGluZyBDU1NNZWRpYS4K
ICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE1lZGlh
UnVsZSA9IDQ4LAogICAgICAgICAgICBJbXBvcnRSdWxlID0gNDksCiAgICAgICAgICAgIExpbmtl
ZFNoZWV0ID0gNTAsCiAgICAgICAgICAgIElubGluZVNoZWV0ID0gNTEsCiAgICAgICAgfTsKICAg
IH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgVGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VTZXQgPSAxIDw8IDEsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFRleHRTZXQgfCBTb3VyY2VTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NNZWRpYT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTTWVkaWE7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUZXh0U2V0PiYgc2V0VGV4dChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRleHRTZXQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJj
ZVNldD4mIHNldFNvdXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
b3VyY2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJl
c3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLikKICAgICAq
ICAgICAuc2V0U291cmNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VV
UkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07
CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxl
RW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNlbGVjdG9yU2V0ID0gMSA8PCAwLAogICAgICAg
IFVybFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAyLAogICAgICAg
IFRpbWVTZXQgPSAxIDw8IDMsCiAgICAgICAgSGl0Q291bnRTZXQgPSAxIDw8IDQsCiAgICAgICAg
TWF0Y2hDb3VudFNldCA9IDEgPDwgNSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JT
ZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgVGltZVNldCB8IEhpdENvdW50U2V0IHwgTWF0
Y2hDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbGVjdG9yU2V0PiYgc2V0U2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTZWxlY3RvclNldCksIHByb3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U2VsZWN0b3JTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlf
dXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZVNldD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVTZXQpLCBwcm9wZXJ0eV90
aW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidGltZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhpdENvdW50U2V0PiYgc2V0SGl0Q291bnQoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhp
dENvdW50U2V0KSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxIaXRDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNYXRjaENvdW50U2V0PiYgc2V0TWF0Y2hDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hDb3VudFNldCksIHByb3Bl
cnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1h
dGNoQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0
b3JQcm9maWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3Rv
clByb2ZpbGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2Vs
ZWN0b3JQcm9maWxlRW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50
cnk+IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRTZWxlY3RvciguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExp
bmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0
Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlRW50cnkoKSkp
OwogICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdoaWxl
IGdlbmVyYXRpbmcgU2VsZWN0b3JQcm9maWxlLgogICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBJbnNw
ZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIERhdGEoKSB7IH0KCiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0
b3JQcm9maWxlRW50cnk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9i
amVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhPiBj
cmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YSgpKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBU
b3RhbFRpbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgRGF0YVNldCA9IDEgPDwgMSwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoVG90YWxUaW1lU2V0IHwgRGF0YVNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQcm9m
aWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVG90YWxUaW1lU2V0PiYg
c2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUb3RhbFRpbWVTZXQpLCBwcm9wZXJ0eV90b3RhbFRpbWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ0b3RhbFRpbWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VG90YWxUaW1lU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBzZXREYXRhKFBhc3NSZWZQdHI8
RGF0YT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgRGF0YVNldCksIHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RGF0YVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxlY3Rv
clByb2ZpbGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclByb2Zp
bGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAgLnNl
dERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5l
dyBTZWxlY3RvclByb2ZpbGUoKSkpOwogICAgfQp9OwoKfSAvLyBDU1MKCm5hbWVzcGFjZSBUaW1l
bGluZSB7Ci8qIFRpbWVsaW5lIHJlY29yZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
cmVjb3JkZWQgYWN0aXZpdHkuICovCmNsYXNzIFRpbWVsaW5lRXZlbnQgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hp
bGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGltZWxpbmVFdmVudC4KICAgIGNsYXNzIENoaWxkcmVu
IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRyZW4o
KSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDaGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIERhdGFTZXQg
PSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQgfCBEYXRhU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGlt
ZWxpbmVFdmVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
VGltZWxpbmVFdmVudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVT
ZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRGF0YVNldD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERhdGFTZXQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgiZGF0YSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxEYXRhU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFRpbWVsaW5l
RXZlbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxUaW1lbGluZUV2ZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFRpbWVsaW5lRXZlbnQ+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8VGltZWxpbmVFdmVudD4gcmVzdWx0ID0gVGltZWxpbmVFdmVudDo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBUaW1lbGluZUV2ZW50KCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8Q2hpbGRyZW4+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0K
fTsKCn0gLy8gVGltZWxpbmUKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBM
b2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2NyaXB0SWRTZXQgPSAxIDw8IDAsCiAgICAg
ICAgTGluZU51bWJlclNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2NyaXB0
SWRTZXQgfCBMaW5lTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU2NyaXB0SWRTZXQ+JiBzZXRTY3JpcHRJZChjb25zdCBUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OlNjcmlwdElkJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTY3JpcHRJZFNldCksIHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2NyaXB0SWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExp
bmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPExvY2F0aW9uPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTG9jYXRpb24oKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgIH0KI2lmICghQVNTRVJU
X0RJU0FCTEVEKQogICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKfTsK
Ci8qIEphdmFTY3JpcHQgY2FsbCBmcmFtZS4gQXJyYXkgb2YgY2FsbCBmcmFtZXMgZm9ybSB0aGUg
Y2FsbCBzdGFjay4gKi8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Njb3BlQ2hhaW4nIHdo
aWxlIGdlbmVyYXRpbmcgQ2FsbEZyYW1lLgogICAgY2xhc3MgU2NvcGVDaGFpbiA6IHB1YmxpYyBJ
bnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFNjb3BlQ2hhaW4oKSB7IH0KCiAg
ICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpTY29wZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjb3BlQ2hh
aW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY29wZUNoYWlu
KCkpOwogICAgICAgIH0KI2lmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgIHN0YXRpYyB2b2lk
IGFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSk7CiNl
bmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBDYWxsRnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBG
dW5jdGlvbk5hbWVTZXQgPSAxIDw8IDEsCiAgICAgICAgTG9jYXRpb25TZXQgPSAxIDw8IDIsCiAg
ICAgICAgU2NvcGVDaGFpblNldCA9IDEgPDwgMywKICAgICAgICBUaGlzU2V0ID0gMSA8PCA0LAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChDYWxsRnJhbWVJZFNldCB8IEZ1bmN0aW9uTmFtZVNldCB8
IExvY2F0aW9uU2V0IHwgU2NvcGVDaGFpblNldCB8IFRoaXNTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxGcmFtZTsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENhbGxGcmFtZUlkU2V0PiYgc2V0Q2FsbEZy
YW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ2FsbEZyYW1lSWRT
ZXQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENhbGxGcmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEZ1bmN0aW9uTmFtZVNldD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZ1bmN0
aW9uTmFtZVNldCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxGdW5jdGlvbk5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTG9jYXRpb25TZXQ+JiBzZXRMb2NhdGlvbihQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwgcHJvcGVydHlfbG9jYXRp
b25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJsb2NhdGlv
biIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2NhdGlvblNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2Nv
cGVDaGFpbihQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNjb3BlQ2hhaW5TZXQpLCBwcm9wZXJ0eV9zY29w
ZUNoYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJzY29w
ZUNoYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNjb3BlQ2hhaW5T
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGhpc1NldD4mIHNldFRo
aXMoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaGlzU2V0KSwg
cHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGhpc1NldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQg
PSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAg
ICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYXRpb24oLi4u
KQogICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAgICAuc2V0VGhpcyguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxGcmFt
ZSgpKSk7CiAgICB9CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHJ1bnRpbWVDYXN0
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNP
YmplY3QoJm9iamVjdCk7CiAgICAgICAgQVNTRVJUKGNhc3RSZXMpOwojaWYgKCFBU1NFUlRfRElT
QUJMRUQpCiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdCk7CiNlbmRpZiAgLy8gKCFB
U1NFUlRfRElTQUJMRUQpCiAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENhbGxGcmFtZSkg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICBy
ZXR1cm4gKihyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm9iamVjdCkpOwog
ICAgfQoKI2lmICghQVNTRVJUX0RJU0FCTEVEKQogICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVj
dFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKI2VuZGlmICAvLyAoIUFT
U0VSVF9ESVNBQkxFRCkKfTsKCi8qIFNjb3BlIGRlc2NyaXB0aW9uLiAqLwpjbGFzcyBTY29wZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgogICAgc3RydWN0IFR5cGUg
ewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEdsb2JhbCA9IDUyLAogICAgICAgICAg
ICBMb2NhbCA9IDUzLAogICAgICAgICAgICBXaXRoID0gNTQsCiAgICAgICAgICAgIENsb3N1cmUg
PSA1NSwKICAgICAgICAgICAgQ2F0Y2ggPSA1NiwKICAgICAgICB9OwojaWYgKCFBU1NFUlRfRElT
QUJMRUQpCiAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKICAg
IH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0IHwgT2JqZWN0U2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2NvcGU+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0
KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgib2JqZWN0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxTY29wZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNjb3BlPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxT
Y29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQog
ICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBTY29wZSgpKSk7CiAgICB9CiNpZiAoIUFTU0VSVF9ESVNBQkxFRCkK
ICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSk7CiNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCn07Cgp9IC8vIERlYnVn
Z2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERPTURlYnVnZ2VyIHsKLyogRE9NIGJyZWFrcG9p
bnQgdHlwZS4gKi8Kc3RydWN0IERPTUJyZWFrcG9pbnRUeXBlIHsKICAgIGVudW0gRW51bSB7CiAg
ICAgICAgU3VidHJlZV9tb2RpZmllZCA9IDU3LAogICAgICAgIEF0dHJpYnV0ZV9tb2RpZmllZCA9
IDU4LAogICAgICAgIE5vZGVfcmVtb3ZlZCA9IDU5LAogICAgfTsKfTsgLy8gc3RydWN0IERPTUJy
ZWFrcG9pbnRUeXBlCgp9IC8vIERPTURlYnVnZ2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgp9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgoKY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQgewpwdWJsaWM6CiAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqKTsKCgogICAgY2xhc3MgSW5zcGVjdG9yIHsKICAgIHB1YmxpYzoKICAgICAgICBJ
bnNwZWN0b3IoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoaW50IHRlc3RDYWxs
SWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAgICAgICB2b2lkIGluc3BlY3QoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsK
ICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihpbnQgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBi
b29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW50IGlkKTsKICAg
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5z
cGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAmbV9pbnNwZWN0b3I7IH0KCiAgICBjbGFzcyBN
ZW1vcnkgewogICAgcHVibGljOgogICAgICAgIE1lbW9yeShJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJu
ICZtX21lbW9yeTsgfQoKICAgIGNsYXNzIFBhZ2UgewogICAgcHVibGljOgogICAgICAgIFBhZ2Uo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAg
IHZvaWQgbG9hZEV2ZW50RmlyZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBmcmFt
ZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSk7CiAgICAgICAgdm9pZCBmcmFtZURldGFjaGVk
KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBm
cmFtZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50
aW1lIHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVy
biAmbV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAg
Q29uc29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpOwogICAgICAgIHZvaWQgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZChpbnQgY291bnQp
OwogICAgICAgIHZvaWQgbWVzc2FnZXNDbGVhcmVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENvbnNvbGUqIGNvbnNvbGUoKSB7IHJl
dHVybiAmbV9jb25zb2xlOyB9CgogICAgY2xhc3MgTmV0d29yayB7CiAgICBwdWJsaWM6CiAgICAg
ICAgTmV0d29yayhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgfQogICAgICAgIHZvaWQgcmVxdWVzdFdpbGxCZVNlbnQoLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Lypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBs
b2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gc3RhY2tUcmFjZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNw
b25zZSk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbUNhY2hlKC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAg
ICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRv
dWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSov
IGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAg
IHZvaWQgZGF0YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFM
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNo
ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRpbmdGYWls
ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCwg
Y29uc3QgYm9vbCogY29uc3QgY2FuY2VsZWQpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZy
b21NZW1vcnlDYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8g
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZy
YW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRv
Y3VtZW50VVJMLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9y
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2Nr
ZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tl
dENyZWF0ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgICAgdm9pZCB3ZWJT
b2NrZXRDbG9zZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIHNl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
Z2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTmV0d29yayogbmV0d29y
aygpIHsgcmV0dXJuICZtX25ldHdvcms7IH0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAg
Y2xhc3MgRGF0YWJhc2UgewogICAgcHVibGljOgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBh
ZGREYXRhYmFzZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBuYW1lICdjb2x1bW5OYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBldmVu
dCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZC4KICAgICAgICBjbGFzcyBDb2x1bW5OYW1lcyA6IHB1
YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgQ29sdW1u
TmFtZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVz
aFN0cmluZyh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvbHVtbk5hbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENvbHVtbk5hbWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAg
Ly8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ3ZhbHVlcycgd2hpbGUgZ2VuZXJhdGluZyBl
dmVudCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZC4KICAgICAgICBjbGFzcyBWYWx1ZXMgOiBwdWJs
aWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIFZhbHVlcygp
IHsgfQoKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8VmFsdWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFZhbHVlcygpKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHZvaWQg
c3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQoaW50IHRyYW5zYWN0aW9uSWQsIC8qUGFzc1JlZlB0cjxD
b2x1bW5OYW1lcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb2x1bW5OYW1lcywgLypQ
YXNzUmVmUHRyPFZhbHVlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMpOwog
ICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxFcnJvcik7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsg
cmV0dXJuICZtX2RhdGFiYXNlOyB9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgY2xhc3MgSW5kZXhlZERCIHsKICAgIHB1Ymxp
YzoKICAgICAgICBJbmRleGVkREIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRhdGFiYXNlTmFtZXNMb2FkZWQoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkZyYW1lV2l0aERhdGFiYXNlTmFtZXM+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lV2l0aERhdGFiYXNlTmFtZXMpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBJbmRl
eGVkREIqIGluZGV4ZWRkYigpIHsgcmV0dXJuICZtX2luZGV4ZWRkYjsgfQoKI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgRE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9NU3RvcmFnZSgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBzdG9yYWdlKTsKICAgICAgICB2b2lkIHVwZGF0ZURPTVN0b3JhZ2UoaW50IHN0b3JhZ2VJ
ZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIERPTVN0b3JhZ2UqIGRvbXN0b3JhZ2UoKSB7IHJldHVybiAmbV9kb21zdG9yYWdlOyB9Cgog
ICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQXBwbGljYXRp
b25DYWNoZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoLypjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGludCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29y
a1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGlj
YXRpb25jYWNoZSgpIHsgcmV0dXJuICZtX2FwcGxpY2F0aW9uY2FjaGU7IH0KCiNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCiAgICBjbGFzcyBGaWxlU3lzdGVtIHsKICAgIHB1YmxpYzoKICAgICAgICBG
aWxlU3lzdGVtKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0
dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9
OwoKICAgIEZpbGVTeXN0ZW0qIGZpbGVzeXN0ZW0oKSB7IHJldHVybiAmbV9maWxlc3lzdGVtOyB9
CgojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRE9NIHsKICAgIHB1Ymxp
YzoKICAgICAgICBET00oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRvY3VtZW50VXBkYXRlZCgpOwogICAgICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdub2Rlcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBz
ZXRDaGlsZE5vZGVzLgogICAgICAgIGNsYXNzIE5vZGVzIDogcHVibGljIEluc3BlY3RvckFycmF5
IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBOb2RlcygpIHsgfQoKICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Tm9kZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9k
ZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNldENoaWxkTm9k
ZXMoaW50IHBhcmVudElkLCAvKlBhc3NSZWZQdHI8Tm9kZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICB2b2lk
IGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnbm9kZUlkcycgd2hpbGUgZ2VuZXJhdGlu
ZyBldmVudCBpbmxpbmVTdHlsZUludmFsaWRhdGVkLgogICAgICAgIGNsYXNzIE5vZGVJZHMgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIE5vZGVJ
ZHMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oaW50IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoTnVtYmVyKHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUlkcz4g
Y3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlSWRzKCkp
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUludmFs
aWRhdGVkKC8qUGFzc1JlZlB0cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG5vZGVJZHMpOwogICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3Vu
dFVwZGF0ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lkIGNo
aWxkTm9kZUluc2VydGVkKGludCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwgLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG5vZGUpOwogICAgICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50Tm9k
ZUlkLCBpbnQgbm9kZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgRE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207IH0KCiAgICBjbGFz
cyBDU1MgewogICAgcHVibGljOgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJlc3Vs
dENoYW5nZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgQ1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1l
bGluZSB7CiAgICBwdWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVjb3Jk
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5lKCkg
eyByZXR1cm4gJm1fdGltZWxpbmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgIGNsYXNzIERlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgZ2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKC8qY29u
c3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZCYqLyBjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBp
bnQgZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2Ny
aXB0LCBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcFVSTCk7CiAgICAgICAgdm9pZCBzY3JpcHRGYWls
ZWRUb1BhcnNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSwg
aW50IHN0YXJ0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OwogICAgICAgIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQmKi8gY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVy
IG5hbWUgJ2NhbGxGcmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAg
IGNsYXNzIENhbGxGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgIENhbGxGcmFtZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAg
ICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmpl
Y3QodmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YWxsRnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENhbGxGcmFtZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBOYW1l
ZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAncmVhc29uJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBh
dXNlZC4KICAgICAgICBzdHJ1Y3QgUmVhc29uIHsKICAgICAgICAgICAgZW51bSBFbnVtIHsKICAg
ICAgICAgICAgICAgIFhIUiA9IDUsCiAgICAgICAgICAgICAgICBET00gPSA2MCwKICAgICAgICAg
ICAgICAgIEV2ZW50TGlzdGVuZXIgPSA2MSwKICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiA9IDYy
LAogICAgICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICAgICAgfTsKICAgICAgICB9OyAv
LyBzdHJ1Y3QgUmVhc29uCgogICAgICAgIHZvaWQgcGF1c2VkKC8qUGFzc1JlZlB0cjxDYWxsRnJh
bWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpF
bnVtKi8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhKTsKICAgICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGVidWdnZXIqIGRlYnVnZ2VyKCkgeyByZXR1
cm4gJm1fZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRE9NRGVidWdnZXIgewog
ICAgcHVibGljOgogICAgICAgIERPTURlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTURlYnVnZ2VyKiBkb21kZWJ1Z2dlcigpIHsg
cmV0dXJuICZtX2RvbWRlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIFByb2ZpbGVy
IHsKICAgIHB1YmxpYzoKICAgICAgICBQcm9maWxlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkUHJvZmlsZUhlYWRl
cihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lkIGFkZEhl
YXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAgICAgIHZv
aWQgZmluaXNoSGVhcFNuYXBzaG90KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVjb3JkaW5n
UHJvZmlsZShib29sIGlzUHJvZmlsaW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmlsZXMoKTsK
ICAgICAgICB2b2lkIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90
YWwpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBQcm9maWxlciogcHJvZmlsZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoKI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBj
bGFzcyBXb3JrZXIgewogICAgcHVibGljOgogICAgICAgIFdvcmtlcihJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgd29ya2Vy
Q3JlYXRlZChpbnQgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGluc3BlY3RvckNv
bm5lY3RlZCk7CiAgICAgICAgdm9pZCB3b3JrZXJUZXJtaW5hdGVkKGludCB3b3JrZXJJZCk7CiAg
ICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgZGlzY29ubmVjdGVk
RnJvbVdvcmtlcigpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBXb3JrZXIqIHdvcmtlcigpIHsgcmV0dXJuICZtX3dvcmtlcjsgfQoKI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKcHJpdmF0ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0
b3I7CiAgICBNZW1vcnkgbV9tZW1vcnk7CiAgICBQYWdlIG1fcGFnZTsKICAgIFJ1bnRpbWUgbV9y
dW50aW1lOwogICAgQ29uc29sZSBtX2NvbnNvbGU7CiAgICBOZXR3b3JrIG1fbmV0d29yazsKI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBEYXRhYmFzZSBtX2RhdGFiYXNlOwojZW5kaWYgLy8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgSW5k
ZXhlZERCIG1faW5kZXhlZGRiOwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAg
ICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNh
dGlvbmNhY2hlOwojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRmlsZVN5c3RlbSBtX2ZpbGVz
eXN0ZW07CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBET00gbV9kb207CiAgICBD
U1MgbV9jc3M7CiAgICBUaW1lbGluZSBtX3RpbWVsaW5lOwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiAgICBEZWJ1Z2dlciBtX2RlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERPTURl
YnVnZ2VyIG1fZG9tZGVidWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgUHJvZmlsZXIgbV9wcm9maWxl
cjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktF
UlMpCiAgICBXb3JrZXIgbV93b3JrZXI7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKfTsKCiNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQojZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123324</attachid>
            <date>2012-01-20 08:32:46 -0800</date>
            <delta_ts>2012-01-23 12:59:39 -0800</delta_ts>
            <desc>sample of new InspectorFrontend.cpp </desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>47861</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
cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50Iik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVySWQpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkwpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3RhY2tUcmFjZSkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZSk7CiAgICBpZiAo
cmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVkaXJl
Y3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFNlcnZlZEZy
b21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RT
ZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3Jr
LnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9t
Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAo
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0U2VydmVkRnJvbUNhY2hlTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpy
ZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJO
ZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
bG9hZGVySWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0
YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdHlw
ZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2UiLCByZXNwb25zZSk7CiAg
ICByZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VSZWNlaXZl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0
d29yazo6ZGF0YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFM
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
YXRhUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLmRhdGFSZWNl
aXZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIs
IHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZGF0YUxlbmd0aCIsIGRh
dGFMZW5ndGgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuY29kZWREYXRhTGVuZ3Ro
IiwgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoZGF0YVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpOZXR3b3JrOjpsb2FkaW5nRmluaXNoZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5p
c2hlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6bG9hZGluZ0ZhaWxlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1
ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0
IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbG9hZGluZ0ZhaWxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIk5ldHdvcmsubG9hZGluZ0ZhaWxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygiZXJyb3JUZXh0IiwgZXJyb3JUZXh0KTsKICAgIGlmIChjYW5jZWxlZCkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImNhbmNlbGVkIiwgKmNhbmNlbGVkKTsKICAgIGxvYWRp
bmdGYWlsZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChsb2FkaW5nRmFpbGVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVl
c3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3Vy
Y2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hl
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5yZXF1ZXN0U2VydmVkRnJvbU1l
bW9yeUNhY2hlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJl
cXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9h
ZGVySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1l
bnRVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFt
cCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgiaW5pdGlhdG9yIiwgaW5pdGlhdG9yKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNvdXJjZSIsIHJlc291cmNlKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVl
c3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tldFdpbGxTZW5k
SGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiTmV0d29yay53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElk
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9u
c2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2Nr
ZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2Vp
dmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJ
ZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwg
dGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHJlc3Bv
bnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2Nr
ZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldENsb3NlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGRvdWJsZSB0aW1lc3RhbXApCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tl
dENsb3NlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q2xvc2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRDbG9z
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0
aW1lc3RhbXApOwogICAgd2ViU29ja2V0Q2xvc2VkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2Vi
U29ja2V0Q2xvc2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNlOjphZGREYXRhYmFzZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGFkZERhdGFiYXNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRE
YXRhYmFzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLmFkZERhdGFiYXNl
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImRhdGFiYXNlIiwg
ZGF0YWJhc2UpOwogICAgYWRkRGF0YWJhc2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGREYXRh
YmFzZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
RGF0YWJhc2U6OnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBh
c3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1u
TmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc3FsVHJhbnNhY3Rp
b25TdWNjZWVkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5zcWxUcmFu
c2FjdGlvblN1Y2NlZWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJ0cmFuc2FjdGlvbklkIiwgdHJhbnNhY3Rpb25JZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyIsIGNvbHVtbk5hbWVzKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoInZhbHVlcyIsIHZhbHVlcyk7CiAgICBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3Nh
Z2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6c3FsVHJhbnNh
Y3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzcWxFcnJvcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25G
YWlsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0
aW9uRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25GYWlsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigi
dHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIiwgc3FsRXJyb3IpOwogICAgc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbmRleGVkREI6OmRhdGFiYXNl
TmFtZXNMb2FkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkZyYW1lV2l0
aERhdGFiYXNlTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lV2l0aERh
dGFiYXNlTmFtZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlTmFtZXNM
b2FkZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRhdGFiYXNlTmFt
ZXNMb2FkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbmRleGVkREIuZGF0YWJhc2VO
YW1lc0xvYWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJm
cmFtZVdpdGhEYXRhYmFzZU5hbWVzIiwgZnJhbWVXaXRoRGF0YWJhc2VOYW1lcyk7CiAgICBkYXRh
YmFzZU5hbWVzTG9hZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGF0YWJhc2VOYW1lc0xvYWRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFn
ZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBzdG9yYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhZGRET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBh
ZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NU3RvcmFnZS5hZGRE
T01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInN0
b3JhZ2UiLCBzdG9yYWdlKTsKICAgIGFkZERPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChhZGRET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpET01TdG9yYWdlOjp1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET01TdG9yYWdlLnVwZGF0ZURPTVN0b3JhZ2UiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RvcmFnZUlkIiwgc3RvcmFnZUlkKTsK
ICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpB
cHBsaWNhdGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cykKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQXBwbGljYXRpb25DYWNoZS5hcHBsaWNhdGlvbkNhY2hl
U3RhdHVzVXBkYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibWFuaWZl
c3RVUkwiLCBtYW5pZmVzdFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhdHVz
Iiwgc3RhdHVzKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkFwcGxpY2F0aW9uQ2FjaGU6Om5l
dHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGluZSkKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIkFwcGxpY2F0aW9uQ2FjaGUubmV0d29ya1N0YXRlVXBkYXRlZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNOb3dPbmxpbmUiLCBpc05vd09ubGluZSk7
CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobmV0d29ya1N0
YXRlVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmRvY3VtZW50VXBkYXRlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRvY3VtZW50VXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmRvY3VtZW50
VXBkYXRlZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZG9jdW1lbnRV
cGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpET006OnNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAvKlBhc3NSZWZQdHI8Tm9kZXM+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHNldENoaWxkTm9kZXNNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNldENoaWxkTm9kZXNNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uc2V0Q2hp
bGROb2RlcyIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJl
bnRJZCIsIHBhcmVudElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVzIiwgbm9k
ZXMpOwogICAgc2V0Q2hpbGROb2Rlc01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNldENoaWxkTm9k
ZXNNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRP
TTo6YXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhdHRyaWJ1dGVN
b2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRl
TW9kaWZpZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uYXR0cmlidXRlTW9kaWZp
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwg
bm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CiAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICBhdHRyaWJ1dGVNb2Rp
ZmllZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZVJl
bW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NLmF0dHJpYnV0ZVJlbW92ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJu
YW1lIiwgbmFtZSk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6RE9NOjppbmxpbmVTdHlsZUludmFsaWRhdGVkKC8qUGFzc1JlZlB0cjxOb2Rl
SWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uaW5saW5lU3R5bGVJbnZhbGlkYXRlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBub2RlSWRzKTsKICAgIGlu
bGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbmxpbmVTdHlsZUlu
dmFsaWRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IGNoYXJhY3RlckRhdGEpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoYXJhY3RlckRh
dGFNb2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hhcmFj
dGVyRGF0YU1vZGlmaWVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoYXJhY3Rl
ckRhdGFNb2RpZmllZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJub2RlSWQiLCBub2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImNoYXJhY3Rl
ckRhdGEiLCBjaGFyYWN0ZXJEYXRhKTsKICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVDb3VudFVwZGF0
ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIiwgIkRPTS5jaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIGNoaWxkTm9kZUNvdW50KTsKICAgIGNoaWxkTm9k
ZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNoaWxkTm9kZUNvdW50VXBkYXRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9N
OjpjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBub2RlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVJ
bnNlcnRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2Rl
SW5zZXJ0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlSW5zZXJ0
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50Tm9k
ZUlkIiwgcGFyZW50Tm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwcmV2aW91
c05vZGVJZCIsIHByZXZpb3VzTm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJu
b2RlIiwgbm9kZSk7CiAgICBjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpET006OmNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50
IG5vZGVJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5jaGlsZE5vZGVSZW1vdmVkIik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInBhcmVudE5vZGVJZCIsIHBhcmVu
dE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsK
ICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVSZW1v
dmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpD
U1M6Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiQ1NTLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6VGltZWxpbmU6OmV2ZW50UmVjb3Jk
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBldmVudFJlY29yZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBldmVudFJlY29yZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiVGltZWxpbmUu
ZXZlbnRSZWNvcmRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJyZWNvcmQiLCByZWNvcmQpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGV2ZW50UmVjb3JkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpn
bG9iYWxPYmplY3RDbGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2xvYmFs
T2JqZWN0Q2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZ2xv
YmFsT2JqZWN0Q2xlYXJlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLmds
b2JhbE9iamVjdENsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OlNjcmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBp
bnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQ
YXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNjcmlwdFBhcnNl
ZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlw
dElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFydENvbHVtbik7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAgICBpZiAoaXNDb250ZW50U2NyaXB0KQog
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNDb250ZW50U2NyaXB0IiwgKmlzQ29u
dGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic291cmNlTWFwVVJMIiwg
c291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNj
cmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVn
Z2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jp
cHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0
YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZXJyb3JM
aW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvck1lc3Nh
Z2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0K
CnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpicmVha3BvaW50UmVzb2x2ZWQoLypj
b25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBicmVha3BvaW50SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImxvY2F0aW9uIiwgbG9jYXRpb24pOwogICAgYnJl
YWtwb2ludFJlc29sdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYnJlYWtwb2ludFJlc29sdmVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1
Z2dlcjo6cGF1c2VkKC8qUGFzc1JlZlB0cjxDYWxsRnJhbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVj
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
TkFCTEUoV09SS0VSUykKCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewoKY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICJEb2N1bWVudCIsCiAgICAiU3R5bGVz
aGVldCIsCiAgICAiSW1hZ2UiLAogICAgIkZvbnQiLAogICAgIlNjcmlwdCIsCiAgICAiWEhSIiwK
ICAgICJXZWJTb2NrZXQiLAogICAgIk90aGVyIiwKICAgICJvYmplY3QiLAogICAgImZ1bmN0aW9u
IiwKICAgICJ1bmRlZmluZWQiLAogICAgInN0cmluZyIsCiAgICAibnVtYmVyIiwKICAgICJib29s
ZWFuIiwKICAgICJhcnJheSIsCiAgICAibnVsbCIsCiAgICAibm9kZSIsCiAgICAicmVnZXhwIiwK
ICAgICJkYXRlIiwKICAgICJodG1sIiwKICAgICJ3bWwiLAogICAgInhtbCIsCiAgICAiamF2YXNj
cmlwdCIsCiAgICAibmV0d29yayIsCiAgICAiY29uc29sZS1hcGkiLAogICAgIm90aGVyIiwKICAg
ICJ0aXAiLAogICAgImxvZyIsCiAgICAid2FybmluZyIsCiAgICAiZXJyb3IiLAogICAgImRlYnVn
IiwKICAgICJkaXIiLAogICAgImRpcnhtbCIsCiAgICAidHJhY2UiLAogICAgInN0YXJ0R3JvdXAi
LAogICAgInN0YXJ0R3JvdXBDb2xsYXBzZWQiLAogICAgImVuZEdyb3VwIiwKICAgICJhc3NlcnQi
LAogICAgInBhcnNlciIsCiAgICAic2NyaXB0IiwKICAgICJ1c2VyIiwKICAgICJ1c2VyLWFnZW50
IiwKICAgICJpbnNwZWN0b3IiLAogICAgInJlZ3VsYXIiLAogICAgImFjdGl2ZSIsCiAgICAiaW5h
Y3RpdmUiLAogICAgImRpc2FibGVkIiwKICAgICJzdHlsZSIsCiAgICAibWVkaWFSdWxlIiwKICAg
ICJpbXBvcnRSdWxlIiwKICAgICJsaW5rZWRTaGVldCIsCiAgICAiaW5saW5lU2hlZXQiLAogICAg
Imdsb2JhbCIsCiAgICAibG9jYWwiLAogICAgIndpdGgiLAogICAgImNsb3N1cmUiLAogICAgImNh
dGNoIiwKICAgICJzdWJ0cmVlLW1vZGlmaWVkIiwKICAgICJhdHRyaWJ1dGUtbW9kaWZpZWQiLAog
ICAgIm5vZGUtcmVtb3ZlZCIsCiAgICAiRE9NIiwKICAgICJFdmVudExpc3RlbmVyIiwKICAgICJl
eGNlcHRpb24iCn07CgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKfQoKfSAvLyBuYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIKCiNpZiAoIUFTU0VSVF9ESVNBQkxFRCkKc3RhdGljIHZvaWQgYXNzZXJ0SXNBbnko
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCnsKICAgIC8vIE5vLW9wLgp9CnN0YXRp
YyB2b2lkIGFzc2VydElzU3RyaW5nKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQp7
CiAgICBTdHJpbmcgdjsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc1N0cmluZygmdik7CiAg
ICBBU1NFUlQoY2FzdFJlcyk7Cn0Kc3RhdGljIHZvaWQgYXNzZXJ0SXNJbnQoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCnsKICAgIGludCB2OwogICAgYm9vbCBjYXN0UmVzID0gdmFs
dWUtPmFzTnVtYmVyKCZ2KTsKICAgIEFTU0VSVChjYXN0UmVzKTsKfQp2b2lkIFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OlR5cGU6OmFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKewogICAgV1RGOjpTdHJpbmcgczsKICAgIGJvb2wg
Y2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpOwogICAgQVNTRVJUKGNhc3RfcmVzKTsKICAg
IEFTU0VSVChzID09ICJvYmplY3QiIHx8IHMgPT0gImZ1bmN0aW9uIiB8fCBzID09ICJ1bmRlZmlu
ZWQiIHx8IHMgPT0gInN0cmluZyIgfHwgcyA9PSAibnVtYmVyIiB8fCBzID09ICJib29sZWFuIik7
Cn0Kdm9pZCBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpTdWJ0eXBlOjphc3Nl
cnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCnsKICAgIFdU
Rjo6U3RyaW5nIHM7CiAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsKICAg
IEFTU0VSVChjYXN0X3Jlcyk7CiAgICBBU1NFUlQocyA9PSAiYXJyYXkiIHx8IHMgPT0gIm51bGwi
IHx8IHMgPT0gIm5vZGUiIHx8IHMgPT0gInJlZ2V4cCIgfHwgcyA9PSAiZGF0ZSIpOwp9CnZvaWQg
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6YXNzZXJ0Q29ycmVjdFZhbHVlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvYmplY3Q7CiAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7
CiAgICBBU1NFUlQoY2FzdFJlcyk7CiAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0Owog
ICAgaXQgPSBvYmplY3QtPmZpbmQoInR5cGUiKTsKICAgIEFTU0VSVChpdCAhPSBvYmplY3QtPmVu
ZCgpKTsKICAgIFR5cGU6OmFzc2VydENvcnJlY3RWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KGl0LT5zZWNvbmQpKTsKICAgIGludCBjb3VudCA9IDE7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgi
c3VidHlwZSIpOwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgIFN1YnR5cGU6OmFz
c2VydENvcnJlY3RWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKICAg
ICAgICArK2NvdW50OwogICAgfQogICAgaXQgPSBvYmplY3QtPmZpbmQoImNsYXNzTmFtZSIpOwog
ICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwogICAgICAgICsrY291bnQ7CiAgICB9CiAgICBp
dCA9IG9iamVjdC0+ZmluZCgidmFsdWUiKTsKICAgIGlmIChpdCAhPSBvYmplY3QtPmVuZCgpKSB7
CiAgICBhc3NlcnRJc0FueShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKICAg
ICAgICArK2NvdW50OwogICAgfQogICAgaXQgPSBvYmplY3QtPmZpbmQoImRlc2NyaXB0aW9uIik7
CiAgICBpZiAoaXQgIT0gb2JqZWN0LT5lbmQoKSkgewogICAgYXNzZXJ0SXNTdHJpbmcoUmVmUHRy
PEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CiAgICAgICAgKytjb3VudDsKICAgIH0KICAg
IGl0ID0gb2JqZWN0LT5maW5kKCJvYmplY3RJZCIpOwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5k
KCkpIHsKICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29u
ZCkpOwogICAgICAgICsrY291bnQ7CiAgICB9CiAgICBBU1NFUlQoY291bnQgPT0gb2JqZWN0LT5z
aXplKCkpOwp9CnZvaWQgVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZDo6YXNzZXJ0Q29ycmVj
dFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3Qo
Jm9iamVjdCk7CiAgICBBU1NFUlQoY2FzdFJlcyk7CiAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIGl0OwogICAgaXQgPSBvYmplY3QtPmZpbmQoInN0eWxlU2hlZXRJZCIpOwogICAgQVNTRVJU
KGl0ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0SXNTdHJpbmcoUmVmUHRyPEluc3BlY3Rv
clZhbHVlPihpdC0+c2Vjb25kKSk7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgib3JkaW5hbCIpOwog
ICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0SXNJbnQoUmVmUHRyPElu
c3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CiAgICBpbnQgY291bnQgPSAyOwogICAgQVNTRVJU
KGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTsKfQp2b2lkIFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1
bGVJZDo6YXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICBib29sIGNhc3RSZXMg
PSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICBBU1NFUlQoY2FzdFJlcyk7CiAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0OwogICAgaXQgPSBvYmplY3QtPmZpbmQoInN0eWxlU2hl
ZXRJZCIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0SXNTdHJp
bmcoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CiAgICBpdCA9IG9iamVjdC0+
ZmluZCgib3JkaW5hbCIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgYXNz
ZXJ0SXNJbnQoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CiAgICBpbnQgY291
bnQgPSAyOwogICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTsKfQp2b2lkIFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0OwogICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgQVNT
RVJUKGNhc3RSZXMpOwogICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdDsKICAgIGl0ID0g
b2JqZWN0LT5maW5kKCJzY3JpcHRJZCIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkp
OwogICAgYXNzZXJ0SXNTdHJpbmcoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7
CiAgICBpdCA9IG9iamVjdC0+ZmluZCgibGluZU51bWJlciIpOwogICAgQVNTRVJUKGl0ICE9IG9i
amVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0SXNJbnQoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+
c2Vjb25kKSk7CiAgICBpbnQgY291bnQgPSAyOwogICAgaXQgPSBvYmplY3QtPmZpbmQoImNvbHVt
bk51bWJlciIpOwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgIGFzc2VydElzSW50
KFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwogICAgICAgICsrY291bnQ7CiAg
ICB9CiAgICBBU1NFUlQoY291bnQgPT0gb2JqZWN0LT5zaXplKCkpOwp9CnZvaWQgVHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU6OlNjb3BlQ2hhaW46OmFzc2VydENvcnJlY3RWYWx1ZShQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcnJheTsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7CiAg
ICBBU1NFUlQoY2FzdFJlcyk7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxl
bmd0aCgpOyArK2kpIHsKICAgICAgICBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNjb3BlOjphc3Nl
cnRDb3JyZWN0VmFsdWUoYXJyYXktPmdldChpKSk7CiAgICB9Cn0Kdm9pZCBUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkNhbGxGcmFtZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAg
ICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICBBU1NFUlQoY2Fz
dFJlcyk7CiAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0OwogICAgaXQgPSBvYmplY3Qt
PmZpbmQoImNhbGxGcmFtZUlkIik7CiAgICBBU1NFUlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7CiAg
ICBhc3NlcnRJc1N0cmluZyhSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKICAg
IGl0ID0gb2JqZWN0LT5maW5kKCJmdW5jdGlvbk5hbWUiKTsKICAgIEFTU0VSVChpdCAhPSBvYmpl
Y3QtPmVuZCgpKTsKICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQt
PnNlY29uZCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQoImxvY2F0aW9uIik7CiAgICBBU1NFUlQo
aXQgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9u
Ojphc3NlcnRDb3JyZWN0VmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7
CiAgICBpdCA9IG9iamVjdC0+ZmluZCgic2NvcGVDaGFpbiIpOwogICAgQVNTRVJUKGl0ICE9IG9i
amVjdC0+ZW5kKCkpOwogICAgU2NvcGVDaGFpbjo6YXNzZXJ0Q29ycmVjdFZhbHVlKFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQoInRoaXMi
KTsKICAgIEFTU0VSVChpdCAhPSBvYmplY3QtPmVuZCgpKTsKICAgIFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q6OmFzc2VydENvcnJlY3RWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KGl0LT5zZWNvbmQpKTsKICAgIGludCBjb3VudCA9IDU7CiAgICBBU1NFUlQoY291bnQgPT0g
b2JqZWN0LT5zaXplKCkpOwp9CnZvaWQgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29wZTo6VHlw
ZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQp7
CiAgICBXVEY6OlN0cmluZyBzOwogICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0cmluZygm
cyk7CiAgICBBU1NFUlQoY2FzdF9yZXMpOwogICAgQVNTRVJUKHMgPT0gImdsb2JhbCIgfHwgcyA9
PSAibG9jYWwiIHx8IHMgPT0gIndpdGgiIHx8IHMgPT0gImNsb3N1cmUiIHx8IHMgPT0gImNhdGNo
Iik7Cn0Kdm9pZCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNjb3BlOjphc3NlcnRDb3JyZWN0VmFs
dWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdDsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2Jq
ZWN0KTsKICAgIEFTU0VSVChjYXN0UmVzKTsKICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
aXQ7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgidHlwZSIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVj
dC0+ZW5kKCkpOwogICAgVHlwZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4oaXQtPnNlY29uZCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQoIm9iamVjdCIpOwogICAg
QVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdDo6YXNzZXJ0Q29ycmVjdFZhbHVlKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQt
PnNlY29uZCkpOwogICAgaW50IGNvdW50ID0gMjsKICAgIEFTU0VSVChjb3VudCA9PSBvYmplY3Qt
PnNpemUoKSk7Cn0KCiNlbmRpZiAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKCn0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123325</attachid>
            <date>2012-01-20 08:34:12 -0800</date>
            <delta_ts>2012-01-23 13:00:17 -0800</delta_ts>
            <desc>Diff</desc>
            <filename>diff</filename>
            <type>application/octet-stream</type>
            <size>27408</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">MzEwYzMxMAo8ICAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1l
bW9yeTo6Tm9kZUNvdW50PiB2YWx1ZSkKLS0tCj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCjMyNmMzMjYKPCAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291bnQ+IHZhbHVlKQotLS0KPiAgICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVu
ZXJDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjM3N2MzNzcKPCAg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlQ291bnRTZXQ+JiBzZXROb2RlQ291bnQoUGFzc1Jl
ZlB0cjxOb2RlQ291bnQ+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2Rl
Q291bnRTZXQ+JiBzZXROb2RlQ291bnQoLypQYXNzUmVmUHRyPE5vZGVDb3VudD4qLyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMzg0YzM4NAo8ICAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0ZW5lckNvdW50KFBhc3NSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpc3RlbmVyQ291
bnRTZXQ+JiBzZXRMaXN0ZW5lckNvdW50KC8qUGFzc1JlZlB0cjxMaXN0ZW5lckNvdW50PiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQo0NzZjNDc2CjwgICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTG9hZGVySWRTZXQ+JiBzZXRMb2FkZXJJZChjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6TG9hZGVySWQmIHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2Fk
ZXJJZFNldD4mIHNldExvYWRlcklkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRl
cklkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCjU0MSw1NTZkNTQwCjwgICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVz
b3VyY2VUcmVlLgo8ICAgICBjbGFzcyBDaGlsZEZyYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CjwgICAgIHByaXZhdGU6CjwgICAgICAgICBDaGlsZEZyYW1lcygpIHsgfQo8IAo8ICAgICBw
dWJsaWM6CjwgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IHZhbHVlKQo8ICAgICAgICAgewo8ICAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwo8ICAgICAgICAgfQo8IAo8ICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2hpbGRGcmFtZXM+IGNyZWF0ZSgpIHsKPCAgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENoaWxkRnJhbWVzKCkpOwo8ICAgICAgICAgfQo8ICAgICB9Owo8IAo2MDRhNTg5
LDU5NQo+ICAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2Fs
cmVhZHlfc2V0KTsKPiAgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCB2YWx1ZSk7Cj4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVT
ZXQ+KCk7Cj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAgIAo2MzdjNjI4CjwgICAgICAgICB2
b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJdGVtPiB2YWx1ZSkKLS0tCj4gICAgICAgICB2b2lkIGFk
ZEl0ZW0oLypQYXNzUmVmUHRyPEl0ZW0+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQo2NDZhNjM4LDY1Mwo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjaGls
ZEZyYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBGcmFtZVJlc291cmNlVHJlZS4KPiAgICAgY2xhc3Mg
Q2hpbGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICBwcml2YXRlOgo+ICAg
ICAgICAgQ2hpbGRGcmFtZXMoKSB7IH0KPiAKPiAgICAgcHVibGljOgo+ICAgICAgICAgdm9pZCBh
ZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+IAo+ICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IGNyZWF0ZSgpIHsKPiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENoaWxkRnJhbWVzKCkpOwo+ICAgICAgICAgfQo+ICAgICB9Owo+
IAo2NzJjNjc5CjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVTZXQ+JiBzZXRGcmFtZShQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gdmFsdWUpCi0tLQo+ICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEZyYW1lU2V0PiYgc2V0RnJhbWUoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjY3
OWM2ODYKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZXNvdXJjZXNTZXQ+JiBzZXRSZXNvdXJj
ZXMoUGFzc1JlZlB0cjxSZXNvdXJjZXM+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBSZXNvdXJjZXNTZXQ+JiBzZXRSZXNvdXJjZXMoLypQYXNzUmVmUHRyPFJlc291cmNlcz4q
LyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKNzA5YzcxNgo8ICAgICB2b2lkIHNl
dENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IHZhbHVlKQotLS0KPiAgICAgdm9p
ZCBzZXRDaGlsZEZyYW1lcygvKlBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gdmFsdWUpCjgxN2M4MjQKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBG
cmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJ
ZCYgdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRG
cmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKMTAwMSwxMDAzZDEwMDcKPCAjaWYgKCFBU1NFUlRfRElTQUJMRUQpCjwgICAg
ICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpOwo8ICNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCjEwMTUsMTAxN2Qx
MDE4CjwgI2lmICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0
Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKPCAjZW5kaWYg
IC8vICghQVNTRVJUX0RJU0FCTEVEKQoxMDUwYTEwNTIsMTA1OAo+ICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCj4gICAgICAgICB7
Cj4gICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0
eV90eXBlX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwo+ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsK
PiAgICAgICAgIH0KPiAKMTA3N2ExMDg2LDEwOTAKPiAgICAgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCj4gICAgIHsKPiAgICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlw
ZSIsIHZhbHVlKTsKPiAgICAgfQo+IAoxMDk1YzExMDgKPCAgICAgdm9pZCBzZXRPYmplY3RJZChj
b25zdCBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHZhbHVlKQotLS0KPiAg
ICAgdm9pZCBzZXRPYmplY3RJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3RJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQoxMDk5LDExMTNkMTExMQo8ICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQo8ICAgICB7CjwgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CjwgICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVj
dCk7CjwgICAgICAgICBBU1NFUlQoY2FzdFJlcyk7CjwgI2lmICghQVNTRVJUX0RJU0FCTEVEKQo8
ICAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdCk7CjwgI2VuZGlmICAvLyAoIUFTU0VS
VF9ESVNBQkxFRCkKPCAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZW1vdGVPYmplY3Qp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CjwgICAgICAg
ICByZXR1cm4gKihyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZW1vdGVPYmplY3Q+Kj4oJm9iamVj
dCkpOwo8ICAgICB9CjwgCjwgI2lmICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOwo8
ICNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCjExOTljMTE5Nwo8ICAgICB2b2lkIHNldFZh
bHVlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUp
Ci0tLQo+ICAgICB2b2lkIHNldFZhbHVlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKMTIw
NmMxMjA0CjwgICAgIHZvaWQgc2V0R2V0KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldEdldCgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCjEyMTFjMTIwOQo8ICAgICB2b2lkIHNldFNldChQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBz
ZXRTZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoxMjc2YzEyNzQKPCAgICAgdm9pZCBz
ZXRPYmplY3RJZChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCjEzMzJjMTMzMAo8ICAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCi0tLQo+ICAgICAgICAgdm9pZCBh
ZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKMTM3NGExMzczLDEzNzkKPiAgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCB2YWx1ZSk7Cj4gICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTb3VyY2VTZXQ+KCk7Cj4gICAgICAgICB9Cj4gCjEzODFhMTM4NywxMzkzCj4g
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGV2ZWxTZXQ+JiBzZXRMZXZlbChjb25zdCBTdHJpbmcm
IHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBMZXZlbFNldCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIHZhbHVlKTsKPiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPExldmVsU2V0PigpOwo+ICAgICAgICAgfQo+IAoxNDE3YTE0MzAsMTQzNAo+ICAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgewo+ICAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwo+ICAgICB9Cj4gCjE0MzNjMTQ1MAo8ICAgICB2
b2lkIHNldFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiB2YWx1ZSkKLS0tCj4gICAg
IHZvaWQgc2V0UGFyYW1ldGVycygvKlBhc3NSZWZQdHI8UGFyYW1ldGVycz4qLyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMTQzOGMxNDU1CjwgICAgIHZvaWQgc2V0U3RhY2tUcmFj
ZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiB2YWx1ZSkKLS0t
Cj4gICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjE0NDNj
MTQ2MAo8ICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0SWQoY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0
SWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCjE1MzljMTU1Ngo8ICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q29uc29sZTo6Q2FsbEZyYW1lPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgYWRkSXRlbSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNhbGxGcmFtZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjE5MThjMTkzNQo8ICAgICB2b2lkIHNldFRpbWluZyhQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gdmFsdWUpCi0t
LQo+ICAgICB2b2lkIHNldFRpbWluZygvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OlJlc291cmNlVGltaW5nPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKMjEx
NmEyMTM0LDIxNDAKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShj
b25zdCBTdHJpbmcmIHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cj4gICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKPiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7Cj4gICAgICAgICB9Cj4gCjIxNDhjMjE3Mgo8
ICAgICB2b2lkIHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0UmVzcG9uc2UoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCjIxOTZhMjIyMSwyMjI3Cj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNl
dD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwo+ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7
Cj4gICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwo+ICAgICAgICAgfQo+
IAoyMjE5YzIyNTAKPCAgICAgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRTdGFja1Ry
YWNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMjM3M2MyNDA0CjwgICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRnJhbWVJZFNldD4mIHNldEZyYW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkZyYW1lSWQmIHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlk
U2V0PiYgc2V0RnJhbWVJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiov
IGNvbnN0IFN0cmluZyYgdmFsdWUpCjIzODdjMjQxOAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8
IERhdGFiYXNlTmFtZXNTZXQ+JiBzZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8RGF0YWJhc2VO
YW1lcz4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFiYXNlTmFtZXNT
ZXQ+JiBzZXREYXRhYmFzZU5hbWVzKC8qUGFzc1JlZlB0cjxEYXRhYmFzZU5hbWVzPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoyNTg1YzI2MTYKPCAgICAgICAgIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+IHZhbHVlKQotLS0KPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjI2NTFjMjY4Mgo8ICAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNlc1NldD4mIHNldFJlc291cmNlcyhQYXNzUmVm
UHRyPFJlc291cmNlcz4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291
cmNlc1NldD4mIHNldFJlc291cmNlcygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoyNzE0YzI3NDUKPCAgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
RnJhbWVJZCYgdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+
JiBzZXRGcmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29u
c3QgU3RyaW5nJiB2YWx1ZSkKMjc3MmMyODAzCjwgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiB2YWx1ZSkKLS0tCj4gICAgICAgICB2b2lkIGFk
ZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoyODkyYzI5MjMKPCAgICAgdm9pZCBzZXRDaGlsZHJlbihQ
YXNzUmVmUHRyPENoaWxkcmVuPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0Q2hpbGRyZW4oLypQ
YXNzUmVmUHRyPENoaWxkcmVuPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoy
ODk3YzI5MjgKPCAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8QXR0cmlidXRlcz4g
dmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldEF0dHJpYnV0ZXMoLypQYXNzUmVmUHRyPEF0dHJpYnV0
ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjI5MzljMjk3MAo8ICAgICB2
b2lkIHNldENvbnRlbnREb2N1bWVudChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+
IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRDb250ZW50RG9jdW1lbnQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQozMDM3YzMwNjgKPCAgICAgdm9pZCBzZXRMb2NhdGlvbihQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRMb2NhdGlvbigv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjMxNzZjMzIwNwo8ICAgICB2b2lkIHNldENvbnRlbnRD
b2xvcihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+IHZhbHVlKQotLS0KPiAgICAg
dm9pZCBzZXRDb250ZW50Q29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQozMTgxYzMyMTIKPCAgICAgdm9p
ZCBzZXRQYWRkaW5nQ29sb3IoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiB2YWx1
ZSkKLS0tCj4gICAgIHZvaWQgc2V0UGFkZGluZ0NvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKMzE4NmMz
MjE3CjwgICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9N
OjpSZ2JhPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQozMTkxYzMyMjIKPCAgICAgdm9pZCBzZXRNYXJnaW5Db2xvcihQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpET006OlJnYmE+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRNYXJnaW5Db2xvcigv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCjMyNjQsMzI3OGQzMjk0CjwgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1N0eWxlSWQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQo8
ICAgICB7CjwgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CjwgICAgICAg
ICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CjwgICAgICAgICBBU1NF
UlQoY2FzdFJlcyk7CjwgI2lmICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICAgICAgYXNzZXJ0Q29y
cmVjdFZhbHVlKG9iamVjdCk7CjwgI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKPCAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihDU1NTdHlsZUlkKSA9PSBzaXplb2YoSW5zcGVjdG9y
T2JqZWN0KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwo8ICAgICAgICAgcmV0dXJuICoocmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVJZD4qPigmb2JqZWN0KSk7CjwgICAgIH0KPCAKPCAjaWYg
KCFBU1NFUlRfRElTQUJMRUQpCjwgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSk7CjwgI2VuZGlmICAvLyAoIUFTU0VSVF9E
SVNBQkxFRCkKMzM0NSwzMzU5ZDMzNjAKPCAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUlk
PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKPCAgICAgewo8
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0Owo8ICAgICAgICAgYm9vbCBj
YXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwo8ICAgICAgICAgQVNTRVJUKGNhc3RS
ZXMpOwo8ICNpZiAoIUFTU0VSVF9ESVNBQkxFRCkKPCAgICAgICAgIGFzc2VydENvcnJlY3RWYWx1
ZShvYmplY3QpOwo8ICNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCjwgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoQ1NTUnVsZUlkKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwg
dHlwZV9jYXN0X3Byb2JsZW0pOwo8ICAgICAgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8Q1NTUnVsZUlkPio+KCZvYmplY3QpKTsKPCAgICAgfQo8IAo8ICNpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKPCAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKPCAjZW5kaWYgIC8vICghQVNTRVJUX0RJU0FCTEVEKQoz
MzcxYzMzNzIKPCAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OkNTU1J1bGU+IHZhbHVlKQotLS0KPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCjM0MTNjMzQxNAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0PiYg
c2V0UnVsZXMoUGFzc1JlZlB0cjxSdWxlcz4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMoLypQYXNzUmVmUHRyPFJ1bGVzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozNDUzYzM0NTQKPCAgICAgICAgIHZvaWQgYWRkSXRl
bShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IHZhbHVlKQotLS0KPiAgICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjM0ODdjMzQ4OAo8ICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1hdGNoZWRDU1NSdWxlc1NldD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQ
YXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxlcz4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1hdGNoZWRDU1NSdWxlc1NldD4mIHNldE1hdGNoZWRDU1NSdWxlcygvKlBhc3NSZWZQ
dHI8TWF0Y2hlZENTU1J1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoz
NTE2YzM1MTcKPCAgICAgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0SW5saW5lU3R5bGUoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKMzU1N2MzNTU4CjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5
bGVTZXQ+JiBzZXRTdHlsZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiB2
YWx1ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTZXQ+JiBzZXRTdHlsZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQozNjgxYzM2ODIKPCAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IHZhbHVlKQotLS0KPiAgICAgICAgIHZv
aWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjM3MjNjMzcyNAo8ICAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMoUGFzc1JlZlB0cjxSdWxlcz4gdmFsdWUpCi0t
LQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMoLypQYXNzUmVm
UHRyPFJ1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozNzc4YzM3NzkK
PCAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU01l
ZGlhPiB2YWx1ZSkKLS0tCj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU01lZGlhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKMzgzNmMzODM3LDM4NDQKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNldD4mIHNl
dFN0eWxlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IHZhbHVlKQotLS0K
PiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBzZXRPcmlnaW4oY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgT3JpZ2luU2V0KSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKPiAgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCB2YWx1ZSk7Cj4gICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxPcmlnaW5TZXQ+KCk7Cj4gICAgICAgICB9Cj4gCj4gICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU3R5bGVTZXQ+JiBzZXRTdHlsZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoz
ODY4YzM4NzYKPCAgICAgdm9pZCBzZXRSdWxlSWQoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NSdWxlSWQ+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRSdWxlSWQoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCjM4NzhjMzg4Ngo8ICAgICB2b2lkIHNldFNlbGVjdG9yUmFuZ2UoUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNl
dFNlbGVjdG9yUmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKMzg4M2MzODkxCjwgICAgIHZv
aWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxNZWRpYT4gdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldE1l
ZGlhKC8qUGFzc1JlZlB0cjxNZWRpYT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKNDAyOWM0MDM3CjwgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NQcm9wZXJ0eT4gdmFsdWUpCi0tLQo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCjQwODBjNDA4OAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENzc1Byb3BlcnRpZXNTZXQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8Q3NzUHJvcGVy
dGllcz4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IENzc1Byb3BlcnRpZXNT
ZXQ+JiBzZXRDc3NQcm9wZXJ0aWVzKC8qUGFzc1JlZlB0cjxDc3NQcm9wZXJ0aWVzPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQo0MDg3YzQwOTUKPCAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTaG9ydGhhbmRFbnRyaWVzU2V0PiYgc2V0U2hvcnRoYW5kRW50cmllcyhQYXNzUmVm
UHRyPFNob3J0aGFuZEVudHJpZXM+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTaG9ydGhhbmRFbnRyaWVzU2V0PiYgc2V0U2hvcnRoYW5kRW50cmllcygvKlBhc3NSZWZQdHI8
U2hvcnRoYW5kRW50cmllcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKNDEx
N2M0MTI1CjwgICAgIHZvaWQgc2V0U3R5bGVJZChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlSWQ+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRTdHlsZUlkKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKNDEyN2M0MTM1CjwgICAgIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldFJhbmdl
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjQyNDJhNDI1MSw0MjU1Cj4gICAgIHZvaWQgc2V0U3Rh
dHVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCj4gICAgIHsKPiAgICAgICAgIHRoaXMtPnNldFN0cmlu
Zygic3RhdHVzIiwgdmFsdWUpOwo+ICAgICB9Cj4gCjQyNDhjNDI2MQo8ICAgICB2b2lkIHNldFJh
bmdlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQotLS0K
PiAgICAgdm9pZCBzZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNl
UmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo0MzA1YTQzMTksNDMy
NQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4mIHNldFNvdXJjZShjb25zdCBT
dHJpbmcmIHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTb3VyY2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFkeV9zZXQpOwo+ICAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsKPiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVNldD4oKTsKPiAgICAgICAgIH0KPiAKNDQ1MGM0NDcw
CjwgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxl
Y3RvclByb2ZpbGVFbnRyeT4gdmFsdWUpCi0tLQo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjQ0OTJjNDUxMgo8ICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERhdGFTZXQ+JiBzZXREYXRhKFBhc3NSZWZQdHI8RGF0YT4gdmFsdWUpCi0tLQo+ICAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBzZXREYXRhKC8qUGFzc1JlZlB0cjxEYXRh
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQo0NTM1YzQ1NTUKPCAgICAgICAg
IHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudD4gdmFsdWUpCi0tLQo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQo0NjA3YzQ2MjcKPCAgICAgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRy
PENoaWxkcmVuPiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0Q2hpbGRyZW4oLypQYXNzUmVmUHRy
PENoaWxkcmVuPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQo0NjQ1YzQ2NjUK
PCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY3JpcHRJZFNldD4mIHNldFNjcmlwdElkKGNvbnN0
IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHZhbHVlKQotLS0KPiAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBTY3JpcHRJZFNldD4mIHNldFNjcmlwdElkKC8qY29uc3QgVHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQo0Njg2LDQ2ODhk
NDcwNQo8ICNpZiAoIUFTU0VSVF9ESVNBQkxFRCkKPCAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29y
cmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKPCAjZW5kaWYgIC8v
ICghQVNTRVJUX0RJU0FCTEVEKQo0NzAwYzQ3MTcKPCAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NvcGU+IHZhbHVlKQotLS0KPiAgICAgICAg
IHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29wZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjQ3MDgsNDcxMGQ0NzI0CjwgI2lm
ICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKPCAjZW5kaWYgIC8vICghQVNT
RVJUX0RJU0FCTEVEKQo0NzQxYzQ3NTUKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDYWxsRnJh
bWVJZFNldD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2Fs
bEZyYW1lSWQmIHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDYWxsRnJhbWVJ
ZFNldD4mIHNldENhbGxGcmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxs
RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQo0NzU1YzQ3NjkKPCAgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBMb2NhdGlvblNldD4mIHNldExvY2F0aW9uKFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IExvY2F0aW9uU2V0PiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo0
NzYyYzQ3NzYKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2Nv
cGVDaGFpbihQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2NvcGVDaGFpbigvKlBhc3NSZWZQdHI8U2Nv
cGVDaGFpbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKNDc2OWM0NzgzCjwg
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGhpc1NldD4mIHNldFRoaXMoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGhpc1NldD4mIHNldFRoaXMoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQo0ODAxLDQ4MTVkNDgxNAo8ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHJ1bnRp
bWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQo8ICAgICB7CjwgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CjwgICAgICAgICBib29sIGNhc3RSZXMg
PSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CjwgICAgICAgICBBU1NFUlQoY2FzdFJlcyk7Cjwg
I2lmICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVj
dCk7CjwgI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKPCAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihDYWxsRnJhbWUpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCB0eXBlX2Nh
c3RfcHJvYmxlbSk7CjwgICAgICAgICByZXR1cm4gKihyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
YWxsRnJhbWU+Kj4oJm9iamVjdCkpOwo8ICAgICB9CjwgCjwgI2lmICghQVNTRVJUX0RJU0FCTEVE
KQo8ICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpOwo8ICNlbmRpZiAgLy8gKCFBU1NFUlRfRElTQUJMRUQpCjQ4MzAsNDgz
MmQ0ODI4CjwgI2lmICghQVNTRVJUX0RJU0FCTEVEKQo8ICAgICAgICAgc3RhdGljIHZvaWQgYXNz
ZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKPCAjZW5k
aWYgIC8vICghQVNTRVJUX0RJU0FCTEVEKQo0ODY3YzQ4NjMsNDg3MAo8ICAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQo+ICAgICAgICAgewo+ICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIs
IHZhbHVlKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7Cj4gICAg
ICAgICB9Cj4gCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKNDg5Niw0ODk4ZDQ4OTgKPCAjaWYgKCFBU1NF
UlRfRElTQUJMRUQpCjwgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSk7CjwgI2VuZGlmICAvLyAoIUFTU0VSVF9ESVNBQkxF
RCkKNTEyNWM1MTI1CjwgICAgICAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRPTTo6Tm9kZT4gdmFsdWUpCi0tLQo+ICAgICAgICAgICAgIHZvaWQgYWRkSXRlbSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCjUyMDVjNTIwNQo8ICAgICAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiB2YWx1ZSkKLS0tCj4gICAg
ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkNhbGxGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCjg0MSwxMDE2
ZDg0MAo8ICNpZiAoIUFTU0VSVF9ESVNBQkxFRCkKPCBzdGF0aWMgdm9pZCBhc3NlcnRJc0FueShQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKPCB7CjwgICAgIC8vIE5vLW9wLgo8IH0K
PCBzdGF0aWMgdm9pZCBhc3NlcnRJc1N0cmluZyhQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2
YWx1ZSkKPCB7CjwgICAgIFN0cmluZyB2Owo8ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNT
dHJpbmcoJnYpOwo8ICAgICBBU1NFUlQoY2FzdFJlcyk7CjwgfQo8IHN0YXRpYyB2b2lkIGFzc2Vy
dElzSW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQo8IHsKPCAgICAgaW50IHY7
CjwgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc051bWJlcigmdik7CjwgICAgIEFTU0VSVChj
YXN0UmVzKTsKPCB9Cjwgdm9pZCBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpU
eXBlOjphc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUp
Cjwgewo8ICAgICBXVEY6OlN0cmluZyBzOwo8ICAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFz
U3RyaW5nKCZzKTsKPCAgICAgQVNTRVJUKGNhc3RfcmVzKTsKPCAgICAgQVNTRVJUKHMgPT0gIm9i
amVjdCIgfHwgcyA9PSAiZnVuY3Rpb24iIHx8IHMgPT0gInVuZGVmaW5lZCIgfHwgcyA9PSAic3Ry
aW5nIiB8fCBzID09ICJudW1iZXIiIHx8IHMgPT0gImJvb2xlYW4iKTsKPCB9Cjwgdm9pZCBUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpTdWJ0eXBlOjphc3NlcnRDb3JyZWN0VmFs
dWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCjwgewo8ICAgICBXVEY6OlN0cmlu
ZyBzOwo8ICAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsKPCAgICAgQVNT
RVJUKGNhc3RfcmVzKTsKPCAgICAgQVNTRVJUKHMgPT0gImFycmF5IiB8fCBzID09ICJudWxsIiB8
fCBzID09ICJub2RlIiB8fCBzID09ICJyZWdleHAiIHx8IHMgPT0gImRhdGUiKTsKPCB9Cjwgdm9p
ZCBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Ojphc3NlcnRDb3JyZWN0VmFsdWUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCjwgewo8ICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3Q7CjwgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgm
b2JqZWN0KTsKPCAgICAgQVNTRVJUKGNhc3RSZXMpOwo8ICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0
ZXJhdG9yIGl0Owo8ICAgICBpdCA9IG9iamVjdC0+ZmluZCgidHlwZSIpOwo8ICAgICBBU1NFUlQo
aXQgIT0gb2JqZWN0LT5lbmQoKSk7CjwgICAgIFR5cGU6OmFzc2VydENvcnJlY3RWYWx1ZShSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgaW50IGNvdW50ID0gMTsKPCAg
ICAgaXQgPSBvYmplY3QtPmZpbmQoInN1YnR5cGUiKTsKPCAgICAgaWYgKGl0ICE9IG9iamVjdC0+
ZW5kKCkpIHsKPCAgICAgU3VidHlwZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwo8ICAgICAgICAgKytjb3VudDsKPCAgICAgfQo8ICAgICBp
dCA9IG9iamVjdC0+ZmluZCgiY2xhc3NOYW1lIik7CjwgICAgIGlmIChpdCAhPSBvYmplY3QtPmVu
ZCgpKSB7CjwgICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQtPnNl
Y29uZCkpOwo8ICAgICAgICAgKytjb3VudDsKPCAgICAgfQo8ICAgICBpdCA9IG9iamVjdC0+Zmlu
ZCgidmFsdWUiKTsKPCAgICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKPCAgICAgYXNzZXJ0
SXNBbnkoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CjwgICAgICAgICArK2Nv
dW50Owo8ICAgICB9CjwgICAgIGl0ID0gb2JqZWN0LT5maW5kKCJkZXNjcmlwdGlvbiIpOwo8ICAg
ICBpZiAoaXQgIT0gb2JqZWN0LT5lbmQoKSkgewo8ICAgICBhc3NlcnRJc1N0cmluZyhSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgICAgICsrY291bnQ7CjwgICAgIH0K
PCAgICAgaXQgPSBvYmplY3QtPmZpbmQoIm9iamVjdElkIik7CjwgICAgIGlmIChpdCAhPSBvYmpl
Y3QtPmVuZCgpKSB7CjwgICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4o
aXQtPnNlY29uZCkpOwo8ICAgICAgICAgKytjb3VudDsKPCAgICAgfQo8ICAgICBBU1NFUlQoY291
bnQgPT0gb2JqZWN0LT5zaXplKCkpOwo8IH0KPCB2b2lkIFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0
eWxlSWQ6OmFzc2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKPCB7CjwgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKPCAgICAgYm9vbCBj
YXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwo8ICAgICBBU1NFUlQoY2FzdFJlcyk7
CjwgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQ7CjwgICAgIGl0ID0gb2JqZWN0LT5m
aW5kKCJzdHlsZVNoZWV0SWQiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8
ICAgICBhc3NlcnRJc1N0cmluZyhSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsK
PCAgICAgaXQgPSBvYmplY3QtPmZpbmQoIm9yZGluYWwiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9i
amVjdC0+ZW5kKCkpOwo8ICAgICBhc3NlcnRJc0ludChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0
LT5zZWNvbmQpKTsKPCAgICAgaW50IGNvdW50ID0gMjsKPCAgICAgQVNTRVJUKGNvdW50ID09IG9i
amVjdC0+c2l6ZSgpKTsKPCB9Cjwgdm9pZCBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlSWQ6OmFz
c2VydENvcnJlY3RWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKPCB7Cjwg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKPCAgICAgYm9vbCBjYXN0UmVzID0g
dmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwo8ICAgICBBU1NFUlQoY2FzdFJlcyk7CjwgICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQ7CjwgICAgIGl0ID0gb2JqZWN0LT5maW5kKCJzdHls
ZVNoZWV0SWQiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8ICAgICBhc3Nl
cnRJc1N0cmluZyhSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgaXQg
PSBvYmplY3QtPmZpbmQoIm9yZGluYWwiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5k
KCkpOwo8ICAgICBhc3NlcnRJc0ludChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQp
KTsKPCAgICAgaW50IGNvdW50ID0gMjsKPCAgICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6
ZSgpKTsKPCB9Cjwgdm9pZCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjphc3NlcnRD
b3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCjwgewo8ICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CjwgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc09iamVjdCgmb2JqZWN0KTsKPCAgICAgQVNTRVJUKGNhc3RSZXMpOwo8ICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIGl0Owo8ICAgICBpdCA9IG9iamVjdC0+ZmluZCgic2NyaXB0SWQi
KTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8ICAgICBhc3NlcnRJc1N0cmlu
ZyhSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgaXQgPSBvYmplY3Qt
PmZpbmQoImxpbmVOdW1iZXIiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8
ICAgICBhc3NlcnRJc0ludChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAg
ICAgaW50IGNvdW50ID0gMjsKPCAgICAgaXQgPSBvYmplY3QtPmZpbmQoImNvbHVtbk51bWJlciIp
Owo8ICAgICBpZiAoaXQgIT0gb2JqZWN0LT5lbmQoKSkgewo8ICAgICBhc3NlcnRJc0ludChSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgICAgICsrY291bnQ7CjwgICAg
IH0KPCAgICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTsKPCB9Cjwgdm9pZCBUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZTo6U2NvcGVDaGFpbjo6YXNzZXJ0Q29ycmVjdFZh
bHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQo8IHsKPCAgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcnJheTsKPCAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXko
JmFycmF5KTsKPCAgICAgQVNTRVJUKGNhc3RSZXMpOwo8ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKPCAgICAgICAgIFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6U2NvcGU6OmFzc2VydENvcnJlY3RWYWx1ZShhcnJheS0+Z2V0KGkpKTsKPCAgICAgfQo8
IH0KPCB2b2lkIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lOjphc3NlcnRDb3JyZWN0
VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCjwgewo8ICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CjwgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09i
amVjdCgmb2JqZWN0KTsKPCAgICAgQVNTRVJUKGNhc3RSZXMpOwo8ICAgICBJbnNwZWN0b3JPYmpl
Y3Q6Oml0ZXJhdG9yIGl0Owo8ICAgICBpdCA9IG9iamVjdC0+ZmluZCgiY2FsbEZyYW1lSWQiKTsK
PCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8ICAgICBhc3NlcnRJc1N0cmluZyhS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgaXQgPSBvYmplY3QtPmZp
bmQoImZ1bmN0aW9uTmFtZSIpOwo8ICAgICBBU1NFUlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7Cjwg
ICAgIGFzc2VydElzU3RyaW5nKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwo8
ICAgICBpdCA9IG9iamVjdC0+ZmluZCgibG9jYXRpb24iKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9i
amVjdC0+ZW5kKCkpOwo8ICAgICBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjphc3Nl
cnRDb3JyZWN0VmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25kKSk7CjwgICAg
IGl0ID0gb2JqZWN0LT5maW5kKCJzY29wZUNoYWluIik7CjwgICAgIEFTU0VSVChpdCAhPSBvYmpl
Y3QtPmVuZCgpKTsKPCAgICAgU2NvcGVDaGFpbjo6YXNzZXJ0Q29ycmVjdFZhbHVlKFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4oaXQtPnNlY29uZCkpOwo8ICAgICBpdCA9IG9iamVjdC0+ZmluZCgidGhp
cyIpOwo8ICAgICBBU1NFUlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7CjwgICAgIFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OmFzc2VydENvcnJlY3RWYWx1ZShSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KGl0LT5zZWNvbmQpKTsKPCAgICAgaW50IGNvdW50ID0gNTsKPCAgICAgQVNTRVJU
KGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTsKPCB9Cjwgdm9pZCBUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OlNjb3BlOjpUeXBlOjphc3NlcnRDb3JyZWN0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCjwgewo8ICAgICBXVEY6OlN0cmluZyBzOwo8ICAgICBib29sIGNhc3RfcmVz
ID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsKPCAgICAgQVNTRVJUKGNhc3RfcmVzKTsKPCAgICAgQVNT
RVJUKHMgPT0gImdsb2JhbCIgfHwgcyA9PSAibG9jYWwiIHx8IHMgPT0gIndpdGgiIHx8IHMgPT0g
ImNsb3N1cmUiIHx8IHMgPT0gImNhdGNoIik7CjwgfQo8IHZvaWQgVHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpTY29wZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQo8IHsKPCAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0Owo8ICAgICBi
b29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CjwgICAgIEFTU0VSVChjYXN0
UmVzKTsKPCAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdDsKPCAgICAgaXQgPSBvYmpl
Y3QtPmZpbmQoInR5cGUiKTsKPCAgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwo8ICAg
ICBUeXBlOjphc3NlcnRDb3JyZWN0VmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vj
b25kKSk7CjwgICAgIGl0ID0gb2JqZWN0LT5maW5kKCJvYmplY3QiKTsKPCAgICAgQVNTRVJUKGl0
ICE9IG9iamVjdC0+ZW5kKCkpOwo8ICAgICBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0Ojphc3NlcnRDb3JyZWN0VmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPihpdC0+c2Vjb25k
KSk7CjwgICAgIGludCBjb3VudCA9IDI7CjwgICAgIEFTU0VSVChjb3VudCA9PSBvYmplY3QtPnNp
emUoKSk7CjwgfQo8IAo8ICNlbmRpZiAvLyAoIUFTU0VSVF9ESVNBQkxFRCkKPCAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123601</attachid>
            <date>2012-01-23 12:55:56 -0800</date>
            <delta_ts>2012-01-23 13:30:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76676-20120124005553.patch</filename>
            <type>text/plain</type>
            <size>56612</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZjM3YmIyZjk1OThiZDgyODg4ZGM3MDIzZDQ3MmFl
YjkwYzUzM2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMS0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogYWRkIG9wdGlvbmFsIHJ1bnRpbWUgdmFsaWRh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVy
YXRvciBhbGdvcml0aG0gaXMgcmVkb25lIHNpZ25pZmljYW50bHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VU
eXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RfaW1wbCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZyk6Cisg
ICAgICAgIChSYXdUeXBlcy5TdHJpbmcuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKToKKyAgICAg
ICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAg
ICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLkludC5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIpOgorICAgICAgICAoUmF3VHlwZXMuTnVt
YmVyLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkJvb2wpOgor
ICAgICAgICAoUmF3VHlwZXMuQm9vbC5nZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QpOgorICAgICAg
ICAoUmF3VHlwZXMuQm9vbC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXMuT2JqZWN0KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3VHlwZXMu
QW55LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAg
ICAgICAgKFJhd1R5cGVzLkFycmF5LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAg
IChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
VHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAg
ICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcucmVzb2x2ZV9pbm5lcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGlu
Zy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3Mu
Y3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1C
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJp
bmcpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFp
blN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6Cisg
ICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluU3RyaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3Rl
eHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBl
ZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZlN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5yZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZlN0cmluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nKToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5k
aW5nLnJlc29sdmVfaW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2Rl
Y2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcucmVzb2x2ZV9pbm5lci5Qcm9wZXJ0eURhdGEpOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcu
cmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRl
X3R5cGVfZGVjbGFyYXRpb25fLkNsYXNzQmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NC
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkNs
YXNzQmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIpOgorICAgICAgICAoZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
Z2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKEFkSG9jVHlw
ZUNvbnRleHRJbXBsLmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRl
eHRJbXBsLmdldF90eXBlX25hbWVfZml4Lk5hbWVGaXgpOgorICAgICAgICAoQWRIb2NUeXBlQ29u
dGV4dEltcGwuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeC5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBZEhvY1R5cGVDb250ZXh0SW1wbC5hZGRfdHlwZSk6CisgICAgICAgIChQbGFpbk9iamVj
dEJpbmRpbmcpOgorICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVfaW5uZXIuQWRIb2NUeXBlQ29u
dGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250
ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZXNvbHZlX2lu
bmVyLkFkSG9jVHlwZUNvbnRleHQuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeCk6CisgICAgICAg
IChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25h
bWVfZml4Lk5hbWVGaXgub3V0cHV0X2NvbW1lbnQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJl
c29sdmVfaW5uZXIuQWRIb2NUeXBlQ29udGV4dC5hZGRfdHlwZSk6CisgICAgICAgIChBcnJheUJp
bmRpbmcucmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEFycmF5QmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfbmFtZSk6CisgICAgICAgIChU
eXBlRGF0YSk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfZG9tYWluX25hbWUpOgorICAgICAgICAo
cmVzb2x2ZV9wYXJhbV90eXBlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QpOgor
ICAgICAgICAoTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChOZWVk
UnVudGltZUNhc3RSZXF1ZXN0LmFja25vd2xlZGdlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2Fz
dFJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKToKKyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzKToK
KyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzLkZvcndhcmRMaXN0ZW5lcik6CisgICAgICAgIChy
ZXNvbHZlX2FsbF90eXBlcy5Gb3J3YXJkTGlzdGVuZXIuYWRkX3R5cGVfZGF0YSk6CisgICAgICAg
IChyZXNvbHZlX2FsbF90eXBlcy5SZXNvbHZlQ29udGV4dCk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkFkSG9jVHlwZUNvbnRleHQp
OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuQWRIb2NUeXBlQ29udGV4dC5hZGRf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lcik6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lci5hZGRfdHlwZV9kYXRhKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkV2
ZW50UmVzb2x2ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuRXZl
bnRHZW5lcmF0ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXMuR2Vu
ZXJhdGVDb250ZXh0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzLmNyZWF0ZV90
eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzLmdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6c2l6ZSk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNGQzNTY2OTY5
NjMzZDRkNjFjYzlhNzVkZmViMjQ0MjYwOWNlMWQ3Zi4uNGY3YjQ5NjVjYTlkNzEyMjcxNmIzN2Y1
YmQxZGU3NTE0YTVhYjQ4MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU2LDYgKzU2LDkgQEAgVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7CiB9CiAKIAorVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFtd
KQorCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5lcyIpCkBAIC0xNzQsNiArMTc3LDggQEAgY2xh
c3MgQ2FwaXRhbGl6ZXI6CiAKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAi
RE9NIiwgIkNTUyJdKQogCitWQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJUX0RJU0FCTEVE
IgorCiAKIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBAY2xhc3NtZXRob2QKQEAgLTI0NSw2
ICsyNTAsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKIAogICAgIGNsYXNzIEJhc2VU
eXBlKG9iamVjdCk6CisgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
CisKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgogICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0
X2NfcGFyYW1fdHlwZQpAQCAtMjU3LDYgKzI2NCwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3Qp
OgogICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAg
IHJldHVybiAiJiIKIAorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHJlcXVlc3Rf
cmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgaWYgbm90IGNscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgUmF3VHlwZXMudHlw
ZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xzKQorICAgICAgICAgICAgICAgIGNs
cy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QoY2xzLCB3cml0ZXIpOgor
ICAgICAgICAgICAgcGFyYW1zID0gY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCkKKyAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdGF0aWMgdm9pZCBhc3NlcnQlcyhJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpXG4iICUgcGFyYW1zLm5hbWUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgJXMgdjtcbiIgJSBwYXJh
bXMudmFyX3R5cGUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hcyVzKCZ2KTtcbiIgJSBwYXJhbXMuYXNfbWV0aG9kX25hbWUpCisgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVChjYXN0UmVzKTtcbiIpCisgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgifVxuXG5cbiIpCisKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgIHJl
dHVybiAiYXNzZXJ0JXMiICUgY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCkubmFtZQor
CisgICAgdHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXyA9IFtdCisKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kcyhjbHMsIHdyaXRlcik6CisgICAg
ICAgIGZvciB0IGluIGNscy50eXBlc190b19nZW5lcmF0ZV92YWxpZGF0b3JfOgorICAgICAgICAg
ICAgaWYgdC5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgdC5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2Qod3JpdGVyKQorCisKICAgICBjbGFzcyBTdHJpbmcoQmFz
ZVR5cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5
cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBAIC0yNzksNiArMzE1LDE0IEBAIGNsYXNz
IFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6CiAgICAg
ICAgICAgICByZXR1cm4gInN0cmluZyIKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgorICAgICAgICAgICAgY2xhc3MgVmFs
aWRhdGVNZXRob2RQYXJhbXM6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJTdHJpbmciCisgICAg
ICAgICAgICAgICAgdmFyX3R5cGUgPSAiU3RyaW5nIgorICAgICAgICAgICAgICAgIGFzX21ldGhv
ZF9uYW1lID0gIlN0cmluZyIKKyAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFt
cworCiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmciKQogICAgICAg
ICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IFN0cmluZyYiKQogCkBAIC0yOTksNiAr
MzQzLDE0IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfanNfYmlu
ZF90eXBlKCk6CiAgICAgICAgICAgICByZXR1cm4gIm51bWJlciIKIAorICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgorICAgICAg
ICAgICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6CisgICAgICAgICAgICAgICAgbmFtZSA9
ICJJbnQiCisgICAgICAgICAgICAgICAgdmFyX3R5cGUgPSAiaW50IgorICAgICAgICAgICAgICAg
IGFzX21ldGhvZF9uYW1lID0gIk51bWJlciIKKyAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1l
dGhvZFBhcmFtcworCiAgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgi
aW50IikKIAogICAgIGNsYXNzIE51bWJlcihCYXNlVHlwZSk6CkBAIC0zMTgsNiArMzcwLDEwIEBA
IGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6
CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKIAorICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKKwogICAgICAgICBkZWZhdWx0X2Nf
cGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCiAKICAgICBjbGFzcyBCb29sKEJhc2VU
eXBlKToKQEAgLTM0OSw2ICs0MDUsMTAgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAg
ICAgZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CiAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0
ZV9tZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQor
CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJib29sIikKICAgICAgICAgX3Jl
Zl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBib29sKiBjb25zdCIsICIqJXMiKQogCkBAIC0z
ODIsNiArNDQyLDEwIEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRf
b3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMo
KToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAgICAgICAgX3BsYWlu
X2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKICAgICAgICAg
X3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQog
CkBAIC00MTEsNiArNDc1LDE3IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRl
ZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgogICAgICAgICAgICAgcmV0dXJuIFRy
dWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2Qod3JpdGVyKToKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdGF0aWMgdm9p
ZCBhc3NlcnRBbnkoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxuIikKKyAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJ7XG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBOby1v
cC5cbiIpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifVxuXG5cbiIpCisKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCk6
CisgICAgICAgICAgICByZXR1cm4gImFzc2VydEFueSIKKwogICAgICAgICBfcGxhaW5fY190eXBl
ID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCiAgICAgICAgIF9yZWZfY190
eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQogCkBAIC00NDYs
NiArNTIxLDEwIEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfb3V0
cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAgICAgICAgX3BsYWluX2Nf
dHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JBcnJheT4iKQogICAgICAgICBfcmVm
X2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKIApAQCAt
NTU3LDcgKzYzNiw4IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICBjbGFzcyBIZWxw
ZXI6CiAgICAgICAgICAgICBpc19hZF9ob2MgPSBGYWxzZQotICAgICAgICAgICAgZnVsbF9uYW1l
X3ByZWZpeCA9ICJUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCisg
ICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSAiVHlwZUJ1aWxkZXI6OiIgKyBj
b250ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9m
b3JfaW1wbCA9ICJUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCiAK
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3Jp
dGVyKToKQEAgLTU3OCw3ICs2NTgsOCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgZGVmIGNy
ZWF0ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgogICAgICAgICBjbGFzcyBIZWxwZXI6CiAgICAg
ICAgICAgICBpc19hZF9ob2MgPSBUcnVlCi0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4ID0g
IiIKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9ICIiCisgICAgICAgICAg
ICBmdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsID0gYWRfaG9jX3R5cGVfY29udGV4dC5jb250YWlu
ZXJfZnVsbF9uYW1lX3ByZWZpeAogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAg
ICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01OTYsMTQgKzY3NywzMSBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICBpZiAiZW51bSIgaW4ganNvbl90eXBhYmxlOgogCiAg
ICAgICAgICAgICAgICAgY2xhc3MgRW51bUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigp
OgorICAgICAgICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCisg
ICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisK
KyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXVlc3Q6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gVHJ1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQorCisgICAgICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX2lu
dGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoZW51bV9i
aW5kaW5nX2Nscyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjRklYTUU6IGdlbmVyYXRlIGFk
LWhvYyBlbnVtcyB0b28gb25jZSB3ZSBmaWd1cmUgb3V0IGhvdyB0byBiZXR0ZXIgaW1wbGVtZW50
IHRoZW0gaW4gQysrLgogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudF9vdXQgPSBoZWxw
ZXIuaXNfYWRfaG9jCiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0
b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3
YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVf
dHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGFibGVbImVudW0iXQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKQEAgLTYyNSw2ICs3MjMsMjkgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMiICUgZW51bV9wb3MpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIsXG4iKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH07XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5l
ZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGltcGxlbWVudGVkIikKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVu
dGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgdm9pZCBhc3Nl
cnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUg
VkFMSURBVE9SX0lGREVGX05BTUUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0ZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVl
KVxuIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgZW51bV9uYW1lKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgie1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIFdURjo6U3RyaW5nIHM7XG4iKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0
X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKGNhc3RfcmVz
KTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZW51bSkg
PiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl9s
aXN0ID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51
bV9pdGVtIGluIGVudW06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fbGlzdC5h
cHBlbmQoInMgPT0gXCIlc1wiIiAlIGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlQoJXMp
O1xuIiAlIGpvaW4oY29uZGl0aW9uX2xpc3QsICIgfHwgIikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4iKQorCisK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0
cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVu
dW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgi
XG5cbiIpCkBAIC02NDAsOCArNzYxLDEyIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCiAKICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2Nh
bGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxs
X25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFz
c2VydENvcnJlY3RWYWx1ZSIKKworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCAr
IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlw
ZV9uYW1lLmNsYXNzX25hbWUgKyAiOjpFbnVtIgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVz
c2lvbl9wYXR0ZXJuKCk6CkBAIC02NTYsMTAgKzc4MSwyNiBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAgICAgICAgICAgICAgICAgaWYgaGVscGVyLmlzX2FkX2hvYzoKIAogICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBQbGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNv
bHZlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKKwogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2Fs
bF90ZXh0KGNscyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQorCiAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNl
X3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLlN0cmluZwpAQCAtNjc3LDExICs4MTgsMjMgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAg
ICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICAgICAgY2xhc3MgVHlwZWRlZlN0
cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9y
dW50aW1lX2Nhc3QocmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhd1R5cGVzLlN0cmlu
Zy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorCiAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdl
bmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVy
KHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3Jp
dGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1l
Lm91dHB1dF9jb21tZW50KHdyaXRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIFN0cmluZyAiKQpAQCAtNjk4LDYgKzg1MSwxMCBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQ29kZUdlbmVyYXRvcgogCisgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKKwogICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlw
ZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcK
QEAgLTcwOCw3ICs4NjUsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9p
bl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gImNvbnN0ICVzJXMmIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCwgZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUpCiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVk
ZWZTdHJpbmcKIApAQCAtNzE2LDExICs4NzMsNzEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAg
ICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwYWJsZToKIAogICAgICAgICAgICAg
ICAgIGNsYXNzIENsYXNzQmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6CisgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIG5l
ZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgbmVlZF9p
bnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKKworICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNv
bHZlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0
YV86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnRpZXMgPSBqc29uX3R5cGFibGVbInByb3BlcnRpZXMiXQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWFpbiA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25hbCA9IFtdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBb
XQorCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBwcm9wZXJ0aWVzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBl
Q29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgcmVzb2x2
ZV9jb250ZXh0LCBhZF9ob2NfdHlwZV9saXN0LCBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3Jf
aW1wbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gcmVzb2x2ZV9wYXJh
bV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGJpbmRpbmcuZ2V0
X2NvZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dl
bmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKHJlc29sdmVfY29udGV4dC5mb3J3YXJkX2xpc3RlbmVyKQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUHJvcGVydHlEYXRhOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBiaW5kaW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9wCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBwcm9wLmdldCgib3B0aW9uYWwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWwuYXBwZW5kKFByb3BlcnR5RGF0YSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluLmFwcGVu
ZChQcm9wZXJ0eURhdGEpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFJlc29sdmVE
YXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGllcyA9IG1haW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wcm9wZXJ0aWVzID0gb3B0aW9u
YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBhZF9ob2NfdHlw
ZV9jb250ZXh0LmFkX2hvY190eXBlX2xpc3QKKworICAgICAgICAgICAgICAgICAgICAgICAgY2xz
LnJlc29sdmVfZGF0YV8gPSBSZXNvbHZlRGF0YQorCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgYWRfaG9jIGluIGFkX2hvY190eXBlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRfaG9jLnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQorCisgICAgICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2Vy
X3J1bnRpbWVfY2FzdChjbHMsIHJlcXVlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bm90IHJlcXVlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
ICAgICAgICAgICAgICAgICBjbHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdlKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNscy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0
X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xz
Lm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBwIGluIGNscy5yZXNvbHZlX2RhdGFfLm1haW5fcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFs
X3J1bnRpbWVfY2FzdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVz
b2x2ZV9kYXRhXy5vcHRpb25hbF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHAucGFyYW1fdHlwZV9iaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkK
KworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF9jb2RlX2dlbmVyYXRvcihjbGFzc19iaW5kaW5nX2Nscyk6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0
ZV90eXBlX2J1aWxkZXIoY2xzLCB3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIoY2xzLCB3cml0ZXIs
IGdlbmVyYXRlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNv
bHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFfCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1
dF9jb21tZW50KHdyaXRlcikKQEAgLTczMCwxNCArOTQ3LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInB1Ymxp
YzpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRl
ciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9wZXJ0aWVzIl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVzID0gW10KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVydGllcyA9IFtdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHByb3BlcnRpZXM6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGluIHAgYW5kIHBbIm9wdGlv
bmFsIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxf
cHJvcGVydGllcy5hcHBlbmQocCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9w
ZXJ0aWVzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWRf
aG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBlczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVf
Z2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVf
Z2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVf
Z2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVy
YXRlX2NvbnRleHQpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmVfbXVsdGlsaW5lKAogIiIiICAgIGVudW0gewpAQCAtNzQ1LDEwICs5NTgsMTAgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogIiIiKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlX2VudW1faXRlbXMgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBsZW4obWFpbl9wcm9wZXJ0aWVzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSA+IDA6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcCBpbiBtYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2Ft
ZWxfY2FzZV90b191cHBlcihwWyJuYW1lIl0pICsgIlNldCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVy
dGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWUg
PSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfZGF0YS5wWyJuYW1l
Il0pICsgIlNldCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZV9lbnVtX2l0ZW1zLmFwcGVuZChpdGVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSAxIDw8ICVzLFxuIiAl
IChpdGVtX25hbWUsIHBvcykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zICs9IDEKQEAgLTc4MCwxMiArOTkzLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICIi
IiAlIChhbGxfZmllbGRzX3NldF92YWx1ZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBtYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wWyJuYW1lIl0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dCA9IGNscy5B
ZEhvY1R5cGVDb250ZXh0SW1wbChwcm9wX25hbWUsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
LCBhZF9ob2NfdHlwZV93cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVy
dGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHBy
b3BfZGF0YS5wWyJuYW1lIl0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNvbnRleHRfZG9t
YWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5k
aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9
IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgpAQCAtODA0
LDEwICsxMDE1LDYgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSkpCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFt
X3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9y
d2FyZF9saXN0ZW5lcikKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9z
ICs9IDEKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9t
dWx0aWxpbmUoIiIiCkBAIC04MjksOCArMTAzNiw4IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvKlxuIikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgp
IiAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgICAqICAgICAuc2V0
JXMoLi4uKSIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BbIm5h
bWUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4g
cmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJcbiAgICAgKiAgICAgLnNldCVzKC4u
LikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX2RhdGEucFsi
bmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9t
dWx0aWxpbmUoIjtcbiAgICAgKi9cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKApAQCAtODQwLDExICsxMDQ3LDkgQEAgY2xhc3Mg
VHlwZUJpbmRpbmdzOgogICAgIH0KICIiIiAlIGNsYXNzX25hbWUpCiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gb3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dCA9
IGNscy5BZEhvY1R5cGVDb250ZXh0SW1wbChwcm9wX25hbWUsIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVf
cGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29s
dmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRhLnBhcmFt
X3R5cGVfYmluZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVy
X25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihw
cm9wX25hbWUpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJh
bV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2Jp
bmRpbmcpOgpAQCAtODUyLDM4ICsxMDU3LDU4IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFs
dWUpXG4iICUgcGFyYW1fdHlwZV9vcHQuZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHBhcmFtX3R5cGVf
YmluZGluZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICB7XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNldCVzKFwiJXNcIiwgJXMpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJhbV90eXBl
X2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BbIm5h
bWUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFy
YW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBw
cm9wX2RhdGEucFsibmFtZSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFy
YW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5n
ZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldHRlcl9uYW1lIGluIElOU1BFQ1RP
Ul9PQkpFQ1RfU0VUVEVSX05BTUVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0Ojolcztcblxu
IiAlIHNldHRlcl9uYW1lKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJ9O1xuXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
QWRIb2NUeXBlQ29udGV4dEltcGw6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCB3cml0ZXIsIGZvcndh
cmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w
cm9wZXJ0eV9uYW1lID0gcHJvcGVydHlfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFtZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXIgPSB3cml0ZXIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZF9saXN0ZW5lciA9IGZvcndhcmRfbGlzdGVu
ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9m
aXgoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1l
Rml4OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUg
PSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHNlbGYucHJvcGVydHlfbmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NfYmluZGluZ19jbHMu
bmVlZF91c2VyX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBydW50aW1lQ2Fz
dChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSlcbiIgJSBjbGFzc19uYW1lKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlQoY2FzdFJlcyk7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lm
ICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUob2Jq
ZWN0LmdldCgpKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoJXMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCB0eXBl
X2Nhc3RfcHJvYmxlbSk7XG4iICUgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiAqKHJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPCVzPio+KCZvYmplY3QpKTtcbiIgJSBjbGFzc19uYW1lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRpbmdfY2xzLm5lZWRf
aW50ZXJuYWxfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0
aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYg
IC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlk
YXRvcl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKVxuIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xh
c3NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3Q7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmpl
Y3QpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVChjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIGl0O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICBpdCA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIHByb3BfZGF0YS5wWyJu
YW1lIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpO1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAlcyhpdC0+c2Vjb25kLmdldCgpKTtcbiIgJSBwcm9wX2RhdGEucGFyYW1fdHlw
ZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCkpCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBjb3Vu
dCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSkKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2Rh
dGEub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpdCA9IG9iamVjdC0+ZmluZChc
IiVzXCIpO1xuIiAlIHByb3BfZGF0YS5wWyJuYW1lIl0pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaWYgKGl0ICE9
IG9iamVjdC0+ZW5kKCkpIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKGl0LT5zZWNvbmQuZ2V0
KCkpO1xuIiAlIHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxs
X3RleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgKytjb3VudDtcbiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxu
IikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCIgICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTtcbiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
In1cblxuXG4iKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBv
dXRwdXRfY29tbWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
JXMnIHdoaWxlIGdlbmVyYXRpbmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2VsZi5j
bGFzc19uYW1lKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5hbWVGaXgKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5l
cmF0ZV90eXBlX2J1aWxkZXIoc2VsZiwgY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVy
KHNlbGYud3JpdGVyLCBzZWxmLmZvcndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6CkBAIC05MDIsOSArMTEyNywx
MyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb2RlR2VuZXJhdG9yCiAKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsg
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKICAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4ICsgZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiUGFzc1JlZlB0cjwiICsgaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVk
X3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKQEAgLTkxNCwxNCArMTE0Myw1MSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCByZXNvbHZlX2Nv
bnRleHQsIGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4KToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9wZXJ0eV9uYW1l
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFt
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250ZXh0ID0gcmVz
b2x2ZV9jb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZF9ob2NfdHlw
ZV9saXN0ID0gYWRfaG9jX3R5cGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCAr
IGNsYXNzX25hbWUgKyAiOjoiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlw
ZV9uYW1lX2ZpeChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1l
Rml4OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRh
bGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9w
ZXJ0eV9uYW1lLCBzZWxmLmNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5hbWVGaXgKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBl
KHNlbGYsIGJpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9j
X3R5cGVfbGlzdC5hcHBlbmQoYmluZGluZykKKwogICAgICAgICAgICAgICAgIHJldHVybiBDbGFz
c0JpbmRpbmcKICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICBjbGFzcyBQbGFp
bk9iamVjdEJpbmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2Fz
dChyZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCiAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCisg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9w
dGlvbmFsKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jh
d190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRf
dGV4dCgpCkBAIC05MzgsMTIgKzEyMDQsNjcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAg
ICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6CiAKICAgICAgICAgICAgIGNs
YXNzIEFycmF5QmluZGluZzoKLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIHJlc29s
dmVfZGF0YV8gPSBOb25lCisgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3RfID0gRmFsc2UKKworICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAg
ICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4KKworICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQorICAgICAgICAg
ICAgICAgICAgICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzX25hbWUgPSAiSXRlbSIKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOYW1lRml4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5kKGJpbmRp
bmcpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYmluZGluZyA9IHJlc29sdmVfcGFy
YW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9j
VHlwZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgICAgICBpdGVtX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisKKyAg
ICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2NvZGVf
Z2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UocmVzb2x2ZV9j
b250ZXh0LmZvcndhcmRfbGlzdGVuZXIpCisKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgUmVz
b2x2ZURhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0
ZW1fYmluZGluZworICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IGFk
X2hvY190eXBlcworCisgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVz
b2x2ZURhdGEKKworICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0LnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQor
CisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIHJlcXVl
c3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKKworICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRp
bWVfY2FzdChjbHMpOgorICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3RfID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXy5p
dGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisKKyAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2Vu
ZXJhdG9yKGFycmF5X2JpbmRpbmdfY2xzKToKIAogICAgICAgICAgICAgICAgICAgICBjbGFzcyBD
b2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZv
cndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5
cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIp
CkBAIC05NTYsMjcgKzEyNzcsMTQgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVy
KCIgICAgIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNv
bl90eXBhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGFy
cmF5X2JpbmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9ICJJdGVtIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBhZF9ob2NfdHlwZSBpbiByZXNvbHZlX2RhdGEuYWRfaG9jX3R5cGVfbGlz
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBhZF9o
b2NfdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0
ZXIsIGdlbmVyYXRlX2NvbnRleHQpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcihjb2RlX2dlbmVy
YXRvcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5l
cmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZm9yd2FyZF9s
aXN0ZW5lcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmlu
ZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRf
ZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlX2JpbmRp
bmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhv
ZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKGl0ZW1fdHlwZV9iaW5kaW5nKToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQpA
QCAtOTkyLDkgKzEzMDAsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
JXMoKSk7XG4iICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29kZV9n
ZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9y
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rl
cl91c2UoZm9yd2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBh
cnJheV9iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRP
Ul9JRkRFRl9OQU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0
LnZhbGlkYXRvcl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBj
bGFzc19uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJ7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5O1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTtcbiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVChjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJh
eS0+bGVuZ3RoKCk7ICsraSkge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKGFycmF5LT5nZXQoaSkuZ2V0KCkp
O1xuIiAlIHJlc29sdmVfZGF0YS5pdGVtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICB9XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIn07XG5cbiIpCiAKQEAgLTEwMTUsOSArMTMzNSwxMyBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5l
cmF0b3IKIAorICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3Nf
bmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKKwogICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25h
bCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFzc1JlZlB0cjwlcyVzPiIgJSAoaGVs
cGVyLmZ1bGxfbmFtZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4iICUgKGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQogCiAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3Zh
bHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgpAQCAtMTAzOCw5ICsxMzYyLDIxIEBAIGNsYXNzIFJh
d1R5cGVCaW5kaW5nOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfdHlwZSk6CiAgICAgICAg
IHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKIAorICAgIGRlZiByZXNvbHZlX2lubmVyKHNlbGYs
IHJlc29sdmVfY29udGV4dCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZXF1ZXN0X3VzZXJf
cnVudGltZV9jYXN0KHNlbGYsIHJlcXVlc3QpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVu
c3VwcG9ydGVkIikKKworICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChzZWxm
KToKKyAgICAgICAgc2VsZi5yYXdfdHlwZV8ucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9j
YXN0KCkKKwogICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6CiAgICAgICAgIHJldHVy
biBOb25lCiAKKyAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQorCiAg
ICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChzZWxmLCBvcHRpb25hbCk6CiAgICAgICAgIHJldHVy
biBzZWxmLnJhd190eXBlXy5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9u
YWwpLmdldF90ZXh0KCkKIApAQCAtMTA4NSw2ICsxNDIxLDEyIEBAIGNsYXNzIFR5cGVEYXRhKG9i
amVjdCk6CiAgICAgZGVmIGdldF9qc29uX3R5cGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
Lmpzb25fdHlwZV8KIAorICAgIGRlZiBnZXRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuanNvbl90eXBlX1siaWQiXQorCisgICAgZGVmIGdldF9kb21haW5fbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4iXQorCiAKIGNsYXNzIERvbWFp
bkRhdGE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZG9tYWluKToKQEAgLTExMzUsOSAr
MTQ3Nyw3IEBAIGRlZiByZXNvbHZlX3BhcmFtX3R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2Rv
bWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAgICAgcmV0dXJuIHR5cGVfZGF0
YS5nZXRfYmluZGluZygpCiAgICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CiAgICAg
ICAgIHJlc3VsdCA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24o
anNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQot
ICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHJlc3VsdC5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAg
ICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQu
Y2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9nZW5lcmF0b3IpCisgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQuYWRkX3R5cGUocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAg
ICAgZWxzZToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQpAQCAtMTcx
Niw2ICsyMDU2LDEwIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewog
CiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCisjaWYgIiIiICsgVkFMSURBVE9SX0lGREVG
X05BTUUgKyAiIiIKKyR2YWxpZGF0b3JDb2RlCisjZW5kaWYgLy8gIiIiICsgVkFMSURBVE9SX0lG
REVGX05BTUUgKyAiIiIKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKQEAgLTE3MzcsNiArMjA4MSw2MyBAQCAkZG9tYWluSW5pdGlhbGl6ZXJz
CiB0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCiAKIAorY2xhc3MgTmVlZFJ1bnRpbWVDYXN0
UmVxdWVzdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYWNrXyA9IE5v
bmUKKworICAgIGRlZiBhY2tub3dsZWRnZShzZWxmKToKKyAgICAgICAgc2VsZi5hY2tfID0gVHJ1
ZQorCisgICAgZGVmIGlzX2Fja25vd2xlZGdlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
YWNrXworCisKK2RlZiByZXNvbHZlX2FsbF90eXBlcygpOgorICAgIHJ1bnRpbWVfY2FzdF9nZW5l
cmF0ZV9yZXF1ZXN0cyA9IHt9CisgICAgZm9yIHR5cGVfbmFtZSBpbiBUWVBFU19XSVRIX1JVTlRJ
TUVfQ0FTVF9TRVQ6CisgICAgICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0c1t0eXBl
X25hbWVdID0gTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdCgpCisKKyAgICBjbGFzcyBGb3J3YXJkTGlz
dGVuZXI6CisgICAgICAgIHR5cGVfZGF0YV9zZXQgPSBzZXQoKQorICAgICAgICBhbHJlYWR5X2Rl
Y2xhcmVkX3NldCA9IHNldCgpCisKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBh
ZGRfdHlwZV9kYXRhKGNscywgdHlwZV9kYXRhKToKKyAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBu
b3QgaW4gY2xzLmFscmVhZHlfZGVjbGFyZWRfc2V0OgorICAgICAgICAgICAgICAgIGNscy50eXBl
X2RhdGFfc2V0LmFkZCh0eXBlX2RhdGEpCisKKyAgICBjbGFzcyBSZXNvbHZlQ29udGV4dDoKKyAg
ICAgICAgZm9yd2FyZF9saXN0ZW5lciA9IEZvcndhcmRMaXN0ZW5lcgorCisgICAgZm9yIGRvbWFp
bl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBk
b21haW5fZGF0YS50eXBlcygpOgorICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9yd2Fy
ZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgorICAgICAgICAgICAgRm9yd2FyZExpc3RlbmVy
LmFscmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCisKKyAgICAgICAgICAgIGJpbmRp
bmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQorICAgICAgICAgICAgYmluZGluZy5yZXNvbHZl
X2lubmVyKFJlc29sdmVDb250ZXh0KQorCisgICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFw
LmRvbWFpbnMoKToKKyAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygp
OgorICAgICAgICAgICAgZnVsbF90eXBlX25hbWUgPSAiJXMuJXMiICUgKHR5cGVfZGF0YS5nZXRf
ZG9tYWluX25hbWUoKSwgdHlwZV9kYXRhLmdldF9uYW1lKCkpCisgICAgICAgICAgICByZXF1ZXN0
ID0gcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzLnBvcChmdWxsX3R5cGVfbmFtZSwgTm9u
ZSkKKyAgICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQorICAgICAg
ICAgICAgaWYgcmVxdWVzdDoKKyAgICAgICAgICAgICAgICBiaW5kaW5nLnJlcXVlc3RfdXNlcl9y
dW50aW1lX2Nhc3QocmVxdWVzdCkKKworICAgICAgICAgICAgaWYgcmVxdWVzdCBhbmQgbm90IHJl
cXVlc3QuaXNfYWNrbm93bGVkZ2VkKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QgaW4gIiArIGZ1bGxfdHlwZV9uYW1lKQor
CisgICAgZm9yIGZ1bGxfdHlwZV9uYW1lIGluIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0
czoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNh
c3QuIFR5cGUgIiArIGZ1bGxfdHlwZV9uYW1lICsgIiBub3QgZm91bmQiKQorCisgICAgcmV0dXJu
IEZvcndhcmRMaXN0ZW5lcgorCisKK2dsb2JhbF9mb3J3YXJkX2xpc3RlbmVyID0gcmVzb2x2ZV9h
bGxfdHlwZXMoKQorCisKKwogZGVmIGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHJhd190eXBlLCBh
bm5vdGF0ZWRfdHlwZSk6CiAgICAgaWYgYW5ub3RhdGVkX3R5cGUgIT0gcmF3X3R5cGU6CiAgICAg
ICAgIHJldHVybiAiLyolcyovICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcmF3X3R5cGUpCkBAIC0x
ODE2LDkgKzIyMTcsMTQgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGZyb250ZW5kX2NvbnN0cnVj
dG9yX2luaXRfbGlzdCA9IFtdCiAgICAgdHlwZV9idWlsZGVyX2ZyYWdtZW50cyA9IFtdCiAgICAg
dHlwZV9idWlsZGVyX2ZvcndhcmRzID0gW10KKyAgICB2YWxpZGF0b3JfaW1wbF9saXN0ID0gW10K
KyAgICB2YWxpZGF0b3JfaW1wbF9yYXdfdHlwZXNfbGlzdCA9IFtdCisKIAogICAgIEBzdGF0aWNt
ZXRob2QKICAgICBkZWYgZ28oKToKKyAgICAgICAgR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xp
c3QuYXBwZW5kKEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9yYXdfdHlwZXNfbGlzdCkKKwogICAg
ICAgICBHZW5lcmF0b3IucHJvY2Vzc190eXBlcyh0eXBlX21hcCkKIAogICAgICAgICBmaXJzdF9j
eWNsZV9ndWFyZGFibGVfbGlzdF9saXN0ID0gWwpAQCAtMTkwNSwxMyArMjMxMSwxMCBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmV2ZXJzZWQoc29ydGVkX2N5
Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QpOgogICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfY2xvc2UobCkKIAorICAgICAgICBSYXdUeXBlcy5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RzKFdyaXRlcihHZW5lcmF0b3IudmFsaWRhdG9yX2ltcGxfcmF3X3R5cGVzX2xpc3Qs
ICIiKSkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2
ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKLSAg
ICAgICAgY2xhc3MgTm9PcEZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKHR5cGVfZGF0YSk6Ci0gICAgICAgICAg
ICAgICAgcGFzcwotCiAgICAgICAgIGV2ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KICAg
ICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQogICAgICAgICBtZXRob2RfbGluZV9saXN0ID0gW10K
QEAgLTE5MzUsNyArMjMzOCwxMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgICAgICAg
ICBvcHRpb25hbCA9IG9wdGlvbmFsX21hc2sgYW5kIGpzb25fb3B0aW9uYWwKIAorICAgICAgICAg
ICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBbXQorCiAgICAgICAgICAgICAgICAgY2xhc3MgQWRI
b2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX2Z1bGxfbmFtZV9w
cmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCisKICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6CkBAIC0xOTQ4LDExICsyMzU1LDMw
IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1l
Rml4CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9nZW5lcmF0b3IpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVy
KGFkX2hvY190eXBlX3dyaXRlciwgTm9PcEZvcndhcmRMaXN0ZW5lcikKKyAgICAgICAgICAgICAg
ICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRf
aG9jX3R5cGVfbGlzdC5hcHBlbmQoYmluZGluZykKIAogICAgICAgICAgICAgICAgIHBhcmFtX3R5
cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25h
bWUsIEFkSG9jVHlwZUNvbnRleHQpCiAKKyAgICAgICAgICAgICAgICBjbGFzcyBFdmVudEZvcndh
cmRMaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgY2xhc3MgRXZlbnRSZXNvbHZlQ29udGV4
dDoKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9saXN0ZW5lciA9IEV2ZW50Rm9yd2FyZExp
c3RlbmVyCisKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiBhZF9ob2NfdHlwZV9saXN0Ogor
ICAgICAgICAgICAgICAgICAgICB0eXBlLnJlc29sdmVfaW5uZXIoRXZlbnRSZXNvbHZlQ29udGV4
dCkKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50R2VuZXJhdGVDb250ZXh0OgorICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gIm5vdCBzdXBwb3J0ZWQgaW4gRXZlbnRH
ZW5lcmF0ZUNvbnRleHQiCisKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiBhZF9ob2NfdHlw
ZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IgPSB0eXBlLmdldF9jb2RlX2dl
bmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRvcjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVf
d3JpdGVyLCBFdmVudEdlbmVyYXRlQ29udGV4dCkKKwogICAgICAgICAgICAgICAgIGFubm90YXRl
ZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQoY190eXBlLmdldF90ZXh0KCksIHBhcmFt
X3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoanNvbl9vcHRpb25hbCkpCiAKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAlIChhbm5vdGF0ZWRfdHlw
ZSwgcGFyYW1ldGVyX25hbWUpKQpAQCAtMjA3OCwxNCArMjUwNCw4IEBAIGNsYXNzIEdlbmVyYXRv
cjoKICAgICBkZWYgcHJvY2Vzc190eXBlcyh0eXBlX21hcCk6CiAgICAgICAgIG91dHB1dCA9IEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzCiAKLSAgICAgICAgY2xhc3MgRm9yd2FyZExp
c3RlbmVyOgotICAgICAgICAgICAgdHlwZV9kYXRhX3NldCA9IHNldCgpCi0gICAgICAgICAgICBh
bHJlYWR5X2RlY2xhcmVkX3NldCA9IHNldCgpCi0KLSAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEoY2xzLCB0eXBlX2RhdGEpOgotICAgICAgICAg
ICAgICAgIGlmIHR5cGVfZGF0YSBub3QgaW4gY2xzLmFscmVhZHlfZGVjbGFyZWRfc2V0OgotICAg
ICAgICAgICAgICAgICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQorICAgICAg
ICBjbGFzcyBHZW5lcmF0ZUNvbnRleHQ6CisgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0g
V3JpdGVyKEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0LCAiIikKIAogICAgICAgICBkZWYg
Z2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXQsIHR5cGVfZGF0YV9jYWxsYmFjayk6CiAgICAg
ICAgICAgICB3cml0ZXIgPSBXcml0ZXIob3V0LCAiIikKQEAgLTIxMTksMTMgKzI1MzksMTEgQEAg
Y2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgIGRlZiBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxl
cihnZW5lcmF0ZV9wYXNzX2lkKToKICAgICAgICAgICAgIGRlZiBjYWxsX3R5cGVfYnVpbGRlcih0
eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAgICAgICAgICMgRG8gbm90IGdlbmVy
YXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdlci4KLSAgICAgICAgICAgICAgICBG
b3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5cGVfZGF0YSkKLQogICAg
ICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkuZ2V0
X2NvZGVfZ2VuZXJhdG9yKCkKICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvciBhbmQg
Z2VuZXJhdGVfcGFzc19pZCA9PSBjb2RlX2dlbmVyYXRvci5nZXRfZ2VuZXJhdGVfcGFzc19pZCgp
OgogICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXJfZ2V0dGVyKCkKLSAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwg
Rm9yd2FyZExpc3RlbmVyKQorCisgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdl
bmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIEdlbmVyYXRlQ29udGV4dCkKICAgICAgICAgICAg
IHJldHVybiBjYWxsX3R5cGVfYnVpbGRlcgogCiAgICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5z
X2NvZGUob3V0cHV0LCBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxlcihUeXBlQnVpbGRlclBhc3Mu
TUFJTikpCkBAIC0yMTMzLDcgKzI1NTEsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBGb3J3YXJkIGRlY2xhcmF0
aW9ucy5cbiIpCiAKICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2sodHlwZV9k
YXRhLCB3cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBpbiBGb3J3YXJk
TGlzdGVuZXIudHlwZV9kYXRhX3NldDoKKyAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBpbiBnbG9i
YWxfZm9yd2FyZF9saXN0ZW5lci50eXBlX2RhdGFfc2V0OgogICAgICAgICAgICAgICAgIGJpbmRp
bmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQogICAgICAgICAgICAgICAgIGJpbmRpbmcuZ2V0
X2NvZGVfZ2VuZXJhdG9yKCkuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3cml0ZXJfZ2V0
dGVyKCkpCiAgICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9mb3J3YXJkcywgZ2VuZXJhdGVfZm9yd2FyZF9jYWxsYmFjaykKQEAgLTIxODgsNyAr
MjYwNiw4IEBAIGJhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3Rp
dHV0ZShOb25lLAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2Nw
cC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZy
b250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAogICAgIG1ldGhvZHM9am9pbihHZW5l
cmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpLAotICAgIGVudW1Db25zdGFudFZhbHVl
cz1FbnVtQ29uc3RhbnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSkpCisgICAgZW51bUNvbnN0
YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRfY29kZSgpLAorICAgIHZh
bGlkYXRvckNvZGU9am9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xp
c3QpLCAiIikpKQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2Nw
cC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IGUxMDBhZGVhZDIxZDAw
ZTYyMWUzMmU2MDllMTk1NmJhZTk5Y2NiZTcuLjcwN2MyNzZhZWFlNjllZjdmNTNmZTU4YjNiYTBm
MWYzYjYyZDM2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKQEAgLTIwNSw2ICsyMDUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogCisgICAgaW50IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CisKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JP
YmplY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123602</attachid>
            <date>2012-01-23 12:58:42 -0800</date>
            <delta_ts>2012-01-24 10:43:11 -0800</delta_ts>
            <desc>Sample of new InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>161714</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCi8vIFR5cGVkZWZzLgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0g
Ly8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQovLyBFbmQgb2YgdHlwZWRlZnMuCgoKClN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CgpuYW1lc3BhY2UgTWVtb3J5IHsKLyogTnVt
YmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8KY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEg
PDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZU5hbWVTZXQgfCBDb3VudFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5v
ZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9k
ZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlfbm9kZU5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb3VudFNldD4mIHNldENvdW50KGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb3Vu
dFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3Vu
dD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBv
ZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IENvdW50U2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0
eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExpc3RlbmVyQ291bnQ+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKSk7CiAgICB9Cn07Cgov
KiBDaGFyYWN0ZXIgZGF0YSBzdGF0aXN0aWNzIGZvciB0aGUgcGFnZS4gKi8KY2xhc3MgU3RyaW5n
U3RhdGlzdGljcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRG9tU2V0ID0gMSA8PCAwLAogICAgICAg
IEpzU2V0ID0gMSA8PCAxLAogICAgICAgIFNoYXJlZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoRG9tU2V0IHwgSnNTZXQgfCBTaGFyZWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdTdGF0
aXN0aWNzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG9tU2V0PiYgc2V0
RG9tKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEb21TZXQpLCBwcm9wZXJ0eV9kb21fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJkb20iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RG9tU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEpzU2V0PiYg
c2V0SnMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEpzU2V0KSwgcHJvcGVydHlfanNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJqcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxKc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaGFyZWRTZXQ+
JiBzZXRTaGFyZWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNoYXJlZFNldCksIHByb3BlcnR5X3NoYXJlZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNoYXJlZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTaGFyZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8U3RyaW5nU3RhdGlzdGljcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFN0cmluZ1N0YXRp
c3RpY3M+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiByZXN1bHQgPSBTdHJpbmdTdGF0aXN0aWNzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXREb20o
Li4uKQogICAgICogICAgIC5zZXRKcyguLi4pCiAgICAgKiAgICAgLnNldFNoYXJlZCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFN0cmluZ1N0YXRp
c3RpY3MoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNvdW50
JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpN
ZW1vcnk6Ok5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVD
b3VudD4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVDb3Vu
dCgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J2xpc3RlbmVyQ291bnQnIHdoaWxlIGdlbmVyYXRpbmcgRE9NR3JvdXAuCiAgICBjbGFzcyBMaXN0
ZW5lckNvdW50IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAg
TGlzdGVuZXJDb3VudCgpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gY3JlYXRlKCkgewogICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExpc3RlbmVyQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsK
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2l6ZVNldCA9IDEg
PDwgMCwKICAgICAgICBUaXRsZVNldCA9IDEgPDwgMSwKICAgICAgICBOb2RlQ291bnRTZXQgPSAx
IDw8IDIsCiAgICAgICAgTGlzdGVuZXJDb3VudFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoU2l6ZVNldCB8IFRpdGxlU2V0IHwgTm9kZUNvdW50U2V0IHwgTGlzdGVuZXJDb3Vu
dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBET01Hcm91cDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVT
ZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQpLCBwcm9wZXJ0eV90
aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVDb3VudFNldD4mIHNldE5vZGVDb3Vu
dChQYXNzUmVmUHRyPE5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUNvdW50U2V0KSwgcHJvcGVydHlfbm9kZUNvdW50X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZUNvdW50U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0
ZW5lckNvdW50KFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlzdGVuZXJDb3VudFNldCksIHByb3Bl
cnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3VwPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxE
T01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNpemUo
Li4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVDb3VudCgu
Li4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91cCgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE1lbW9yeQoK
bmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFzIGl0IHdhcyBwZXJjZWl2ZWQgYnkg
dGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNvdXJjZVR5cGUgewogICAgZW51bSBF
bnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAgU3R5bGVzaGVldCA9IDEsCiAgICAg
ICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAgICAgIFNjcmlwdCA9IDQsCiAgICAg
ICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAogICAgICAgIE90aGVyID0gNywKICAg
IH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBG
cmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElk
U2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0gMSA8PCAxLAogICAgICAgIFVybFNl
dCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNldCB8IE1pbWVUeXBlU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJh
bWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2FkZXJJZFNldD4m
IHNldExvYWRlcklkKGNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRT
ZXQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExvYWRlcklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVy
bFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBl
U2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxG
cmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0g
RnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9h
ZGVySWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlw
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZy
YW1lKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWN1cml0eU9y
aWdpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c2VjdXJpdHlPcmlnaW4iLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8K
Y2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRGcmFtZXMnIHdoaWxlIGdl
bmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICBjbGFzcyBDaGlsZEZyYW1lcyA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIENoaWxkRnJhbWVzKCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENoaWxkRnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2hpbGRGcmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRy
ZWUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJp
dmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3Mg
SXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgZW51bSB7CiAgICAgICAgICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgICAgICAg
ICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAg
ICAgICAgICAgICAgTWltZVR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IE1pbWVUeXBlU2V0KQogICAgICAgICAgICB9OwoK
ICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgICAgICAgICBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxJdGVtPiBwdHIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgSXRlbTsKICAgICAgICAg
ICAgcHVibGljOgogICAgICAgIAogICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNl
dD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWltZVR5cGVTZXQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxJdGVtPiYgKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SXRlbT4qPigm
bV9yZXN1bHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8SXRlbT4gKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEl0ZW0+KCp0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAgICAgICAgICogUmVmUHRyPEl0ZW0+IHJlc3VsdCA9IEl0ZW06OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAgICAgICAgICAgKi8K
ICAgICAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgSXRlbSgpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIGFk
ZEl0ZW0oUGFzc1JlZlB0cjxJdGVtPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMt
PnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVzb3VyY2VzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVz
b3VyY2VzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIEZyYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFJlc291cmNlc1NldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRnJhbWVTZXQgfCBSZXNvdXJjZXNTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBGcmFtZVNldD4mIHNldEZyYW1lKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBGcmFtZVNldCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RnJhbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8UmVzb3VyY2VzPiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNvdXJjZXNT
ZXQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxSZXNvdXJjZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
RnJhbWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVS
ZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3Vs
dCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VUcmVlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAwLAogICAgICAgIExpbmVDb250ZW50
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChMaW5lTnVtYmVyU2V0IHwgTGlu
ZUNvbnRlbnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCks
IHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TGluZUNvbnRlbnRTZXQ+JiBzZXRMaW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVDb250ZW50U2V0
KSwgcHJvcGVydHlfbGluZUNvbnRlbnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxMaW5lQ29udGVudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWFyY2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAq
LwpjbGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwg
MCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAxLAogICAgICAgIE1hdGNoZXNDb3VudFNldCA9
IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgRnJhbWVJZFNldCB8IE1h
dGNoZXNDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlf
dXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hl
c0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNYXRjaGVzQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1
bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3Vu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tp
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNl
dCA9IDEgPDwgMSwKICAgICAgICBEb21haW5TZXQgPSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9
IDEgPDwgMywKICAgICAgICBFeHBpcmVzU2V0ID0gMSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAx
IDw8IDUsCiAgICAgICAgSHR0cE9ubHlTZXQgPSAxIDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0g
MSA8PCA3LAogICAgICAgIFNlc3Npb25TZXQgPSAxIDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCB8IERvbWFpblNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0
IHwgU2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwgU2VjdXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tp
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBW
YWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UGF0aFNldD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF0aFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVzU2V0PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCks
IHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4
cGlyZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4m
IHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEh0dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIdHRwT25seVNldCksIHByb3BlcnR5X2h0dHBP
bmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBP
bmx5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3Vy
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNlY3VyZVNldCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U2VjdXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Np
b25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lv
biIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tp
ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAq
ICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAg
LnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0
SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRT
ZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewov
KiBNaXJyb3Igb2JqZWN0IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQgb2JqZWN0LiAq
LwpjbGFzcyBSZW1vdGVPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBS
ZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgT2JqZWN0ID0gOCwKICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAogICAgICAgICAgICBV
bmRlZmluZWQgPSAxMCwKICAgICAgICAgICAgU3RyaW5nID0gMTEsCiAgICAgICAgICAgIE51bWJl
ciA9IDEyLAogICAgICAgICAgICBCb29sZWFuID0gMTMsCiAgICAgICAgfTsKI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICB9OyAvLyBzdHJ1
Y3QgVHlwZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxl
IGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFN1YnR5cGUgewogICAgICAgIGVu
dW0gRW51bSB7CiAgICAgICAgICAgIEFycmF5ID0gMTQsCiAgICAgICAgICAgIE51bGwgPSAxNSwK
ICAgICAgICAgICAgTm9kZSA9IDE2LAogICAgICAgICAgICBSZWdleHAgPSAxNywKICAgICAgICAg
ICAgRGF0ZSA9IDE4LAogICAgICAgIH07CiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgc3Rh
dGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRp
ZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVt
IHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVtb3RlT2JqZWN0Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlbW90ZU9i
amVjdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVtb3RlT2JqZWN0
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90ZU9iamVjdD4gcmVzdWx0ID0gUmVtb3RlT2JqZWN0
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVtb3RlT2JqZWN0KCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRW
YWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmpl
Y3RJZCIsIHZhbHVlKTsKICAgIH0KICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4g
cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgICAgIGJvb2wgY2FzdFJlcyA9
IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKICAgICAgICBBU1NFUlQoY2FzdFJlcyk7CiNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7
CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihSZW1vdGVPYmplY3QpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CiAgICAgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVtb3RlT2Jq
ZWN0Pio+KCZvYmplY3QpKTsKICAgIH0KCiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICBzdGF0aWMg
dm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKI2VuZGlmICAv
LyAhQVNTRVJUX0RJU0FCTEVECn07CgovKiBPYmplY3QgcHJvcGVydHkgZGVzY3JpcHRvci4gKi8K
Y2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0g
MSA8PCAwLAogICAgICAgIFdyaXRhYmxlU2V0ID0gMSA8PCAxLAogICAgICAgIENvbmZpZ3VyYWJs
ZVNldCA9IDEgPDwgMiwKICAgICAgICBFbnVtZXJhYmxlU2V0ID0gMSA8PCAzLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChOYW1lU2V0IHwgV3JpdGFibGVTZXQgfCBDb25maWd1cmFibGVTZXQgfCBF
bnVtZXJhYmxlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVT
ZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1l
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFdyaXRhYmxlU2V0PiYg
c2V0V3JpdGFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBXcml0YWJsZVNldCksIHByb3BlcnR5X3dyaXRhYmxlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oIndyaXRhYmxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdyaXRhYmxlU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvbmZpZ3VyYWJsZVNldD4mIHNldENvbmZpZ3VyYWJsZShi
b29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbmZpZ3VyYWJsZVNldCksIHByb3BlcnR5X2NvbmZpZ3VyYWJsZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25maWd1cmFibGUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29uZmlndXJhYmxlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVudW1lcmFibGVTZXQ+JiBzZXRFbnVtZXJhYmxlKGJv
b2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RW51bWVyYWJsZVNldCksIHByb3BlcnR5X2VudW1lcmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZW51bWVyYWJsZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFbnVtZXJhYmxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFByb3Bl
cnR5RGVzY3JpcHRvcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxQcm9w
ZXJ0eURlc2NyaXB0b3I+IHJlc3VsdCA9IFByb3BlcnR5RGVzY3JpcHRvcjo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFdyaXRhYmxlKC4uLikKICAgICAq
ICAgICAuc2V0Q29uZmlndXJhYmxlKC4uLikKICAgICAqICAgICAuc2V0RW51bWVyYWJsZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFByb3BlcnR5
RGVzY3JpcHRvcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE9iamVjdCgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldEdldChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgiZ2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJzZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXYXNUaHJvd24oYm9v
bCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJ3YXNUaHJvd24iLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBSZXByZXNlbnRzIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnQuIEVpdGhl
ciByZW1vdGUgb2JqZWN0IGlkIDxjb2RlPm9iamVjdElkPC9jb2RlPiBvciBwcmltaXRpdmUgPGNv
ZGU+dmFsdWU8L2NvZGU+IG9yIG5laXRoZXIgb2YgKGZvciB1bmRlZmluZWQpIHRoZW0gc2hvdWxk
IGJlIHNwZWNpZmllZC4gKi8KY2xhc3MgQ2FsbEFyZ3VtZW50IDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxBcmd1bWVudDsKICAgIHB1YmxpYzoKCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENhbGxBcmd1bWVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxBcmd1bWVu
dD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxD
YWxsQXJndW1lbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxB
cmd1bWVudD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsQXJndW1lbnQ+IHJlc3VsdCA9IENhbGxB
cmd1bWVudDo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgQ2FsbEFyZ3VtZW50KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFZhbHVl
KCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6c2V0VmFs
dWU7CgoKICAgIHZvaWQgc2V0T2JqZWN0SWQoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9i
amVjdElkIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBSdW50aW1lCgpuYW1lc3BhY2UgQ29uc29s
ZSB7Ci8qIENvbnNvbGUgbWVzc2FnZS4gKi8KY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFNv
dXJjZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgSHRtbCA9IDE5LAogICAgICAg
ICAgICBXbWwgPSAyMCwKICAgICAgICAgICAgWG1sID0gMjEsCiAgICAgICAgICAgIEphdmFzY3Jp
cHQgPSAyMiwKICAgICAgICAgICAgTmV0d29yayA9IDIzLAogICAgICAgICAgICBDb25zb2xlX2Fw
aSA9IDI0LAogICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1
Y3QgU291cmNlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGV2ZWwnIHdoaWxl
IGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgTGV2ZWwgewogICAgICAgIGVu
dW0gRW51bSB7CiAgICAgICAgICAgIFRpcCA9IDI2LAogICAgICAgICAgICBMb2cgPSAyNywKICAg
ICAgICAgICAgV2FybmluZyA9IDI4LAogICAgICAgICAgICBFcnJvciA9IDI5LAogICAgICAgICAg
ICBEZWJ1ZyA9IDMwLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgTGV2ZWwKCiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVN
ZXNzYWdlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
IExvZyA9IDI3LAogICAgICAgICAgICBEaXIgPSAzMSwKICAgICAgICAgICAgRGlyeG1sID0gMzIs
CiAgICAgICAgICAgIFRyYWNlID0gMzMsCiAgICAgICAgICAgIFN0YXJ0R3JvdXAgPSAzNCwKICAg
ICAgICAgICAgU3RhcnRHcm91cENvbGxhcHNlZCA9IDM1LAogICAgICAgICAgICBFbmRHcm91cCA9
IDM2LAogICAgICAgICAgICBBc3NlcnQgPSAzNywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0
IFR5cGUKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdwYXJhbWV0ZXJzJyB3aGls
ZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgY2xhc3MgUGFyYW1ldGVycyA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFBhcmFtZXRlcnMoKSB7IH0K
CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlz
LT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhcmFtZXRlcnM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
YXJhbWV0ZXJzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIFNvdXJjZVNldCA9IDEgPDwgMCwKICAgICAgICBMZXZlbFNldCA9
IDEgPDwgMSwKICAgICAgICBUZXh0U2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChTb3VyY2VTZXQgfCBMZXZlbFNldCB8IFRleHRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb25zb2xlTWVzc2FnZT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBzZXRTb3VyY2Uo
U291cmNlOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNvdXJjZVNldCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVl
KHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExldmVsU2V0PiYgc2V0TGV2ZWwoTGV2ZWw6
OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTGV2ZWxTZXQpLCBwcm9wZXJ0eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImxldmVsIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMZXZlbFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUZXh0U2V0PiYgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRleHRTZXQp
LCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUZXh0U2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvbnNvbGVNZXNzYWdlPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Q29uc29sZU1lc3NhZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvbnNvbGVNZXNzYWdlPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPENvbnNvbGVNZXNzYWdlPiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0U291cmNlKC4uLikKICAgICAqICAgICAuc2V0TGV2ZWwoLi4uKQogICAgICog
ICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgQ29uc29sZU1lc3NhZ2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShUeXBl
OjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIGdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldExpbmUoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE51bWJlcigibGluZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcGVhdENvdW50KGlu
dCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0UGFyYW1ldGVycyhQYXNzUmVmUHRyPFBhcmFtZXRlcnM+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
b25zb2xlOjpTdGFja1RyYWNlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgi
c3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0SWQo
Y29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJuZXR3b3JrUmVxdWVzdElkIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogU3RhY2sgZW50cnkgZm9yIGNvbnNvbGUgZXJyb3JzIGFuZCBhc3NlcnRpb25zLiAqLwpjbGFz
cyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEZ1bmN0aW9uTmFtZVNldCA9IDEgPDwg
MCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDEsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwg
MiwKICAgICAgICBDb2x1bW5OdW1iZXJTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKEZ1bmN0aW9uTmFtZVNldCB8IFVybFNldCB8IExpbmVOdW1iZXJTZXQgfCBDb2x1bW5OdW1i
ZXJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxDYWxsRnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENhbGxGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZ1
bmN0aW9uTmFtZVNldD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZ1bmN0aW9uTmFtZVNl
dCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxGdW5jdGlvbk5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJs
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlu
ZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29sdW1uTnVtYmVyU2V0PiYgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OdW1i
ZXJTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29sdW1uTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAg
ICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldENvbHVtbk51bWJlcigu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxG
cmFtZSgpKSk7CiAgICB9Cn07CgovKiBDYWxsIGZyYW1lcyBmb3IgYXNzZXJ0aW9ucyBvciBlcnJv
ciBtZXNzYWdlcy4gKi8KY2xhc3MgU3RhY2tUcmFjZSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CnByaXZhdGU6CiAgICBTdGFja1RyYWNlKCkgeyB9CgpwdWJsaWM6CiAgICB2b2lkIGFkZEl0ZW0o
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q2FsbEZyYW1lPiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgIH0KCiAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdGFja1RyYWNlPiBjcmVhdGUoKSB7CiAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dGFja1RyYWNlKCkpOwogICAgfQp9OwoKfSAvLyBDb25zb2xlCgpuYW1lc3BhY2UgTmV0d29yayB7
Ci8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QuICovCmNsYXNzIFJlc291cmNl
VGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSZXF1ZXN0VGltZVNldCA9IDEgPDwgMCwKICAg
ICAgICBQcm94eVN0YXJ0U2V0ID0gMSA8PCAxLAogICAgICAgIFByb3h5RW5kU2V0ID0gMSA8PCAy
LAogICAgICAgIERuc1N0YXJ0U2V0ID0gMSA8PCAzLAogICAgICAgIERuc0VuZFNldCA9IDEgPDwg
NCwKICAgICAgICBDb25uZWN0U3RhcnRTZXQgPSAxIDw8IDUsCiAgICAgICAgQ29ubmVjdEVuZFNl
dCA9IDEgPDwgNiwKICAgICAgICBTc2xTdGFydFNldCA9IDEgPDwgNywKICAgICAgICBTc2xFbmRT
ZXQgPSAxIDw8IDgsCiAgICAgICAgU2VuZFN0YXJ0U2V0ID0gMSA8PCA5LAogICAgICAgIFNlbmRF
bmRTZXQgPSAxIDw8IDEwLAogICAgICAgIFJlY2VpdmVIZWFkZXJzRW5kU2V0ID0gMSA8PCAxMSwK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUmVxdWVzdFRpbWVTZXQgfCBQcm94eVN0YXJ0U2V0IHwg
UHJveHlFbmRTZXQgfCBEbnNTdGFydFNldCB8IERuc0VuZFNldCB8IENvbm5lY3RTdGFydFNldCB8
IENvbm5lY3RFbmRTZXQgfCBTc2xTdGFydFNldCB8IFNzbEVuZFNldCB8IFNlbmRTdGFydFNldCB8
IFNlbmRFbmRTZXQgfCBSZWNlaXZlSGVhZGVyc0VuZFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVRpbWluZzsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlcXVlc3RUaW1lU2V0PiYgc2V0
UmVxdWVzdFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJlcXVlc3RUaW1lU2V0KSwgcHJvcGVydHlfcmVxdWVzdFRpbWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXF1ZXN0VGltZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQcm94eVN0YXJ0U2V0PiYgc2V0UHJv
eHlTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgUHJveHlTdGFydFNldCksIHByb3BlcnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFByb3h5U3RhcnRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUHJveHlFbmRTZXQ+JiBzZXRQcm94eUVuZChkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
UHJveHlFbmRTZXQpLCBwcm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFByb3h5RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERuc1N0YXJ0U2V0PiYgc2V0RG5zU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERuc1N0YXJ0U2V0KSwgcHJvcGVy
dHlfZG5zU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJkbnNTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEbnNTdGFy
dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEbnNFbmRTZXQ+JiBz
ZXREbnNFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERuc0VuZFNldCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxEbnNFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29ubmVjdFN0YXJ0U2V0PiYgc2V0Q29ubmVjdFN0YXJ0KGRvdWJsZSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0
U3RhcnRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvbm5lY3RFbmRTZXQ+JiBzZXRDb25uZWN0RW5kKGRvdWJsZSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0
RW5kU2V0KSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29ubmVjdEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTc2xTdGFydFNldD4mIHNldFNzbFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTc2xTdGFydFNldCksIHByb3Bl
cnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3NsU3Rh
cnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3NsRW5kU2V0PiYg
c2V0U3NsRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTc2xFbmRTZXQpLCBwcm9wZXJ0eV9zc2xFbmRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzc2xFbmQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U3NsRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNlbmRTdGFydFNldD4mIHNldFNlbmRTdGFydChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VuZFN0YXJ0U2V0
KSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNlbmRTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
ZW5kRW5kU2V0PiYgc2V0U2VuZEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VuZEVuZFNldCksIHByb3BlcnR5X3NlbmRFbmRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5kRW5kIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlbmRFbmRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVjZWl2ZUhlYWRlcnNFbmRTZXQ+JiBzZXRS
ZWNlaXZlSGVhZGVyc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUmVjZWl2ZUhlYWRlcnNFbmRTZXQpLCBwcm9wZXJ0eV9yZWNl
aXZlSGVhZGVyc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFJlY2VpdmVIZWFkZXJzRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPFJlc291cmNlVGltaW5nPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzb3VyY2VUaW1pbmc+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVzb3Vy
Y2VUaW1pbmc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlc291cmNl
VGltaW5nPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc291cmNlVGltaW5nPiByZXN1bHQgPSBSZXNv
dXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UmVxdWVzdFRpbWUoLi4uKQogICAg
ICogICAgIC5zZXRQcm94eVN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0UHJveHlFbmQoLi4uKQog
ICAgICogICAgIC5zZXREbnNTdGFydCguLi4pCiAgICAgKiAgICAgLnNldERuc0VuZCguLi4pCiAg
ICAgKiAgICAgLnNldENvbm5lY3RTdGFydCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3RFbmQo
Li4uKQogICAgICogICAgIC5zZXRTc2xTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFNzbEVuZCgu
Li4pCiAgICAgKiAgICAgLnNldFNlbmRTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFNlbmRFbmQo
Li4uKQogICAgICogICAgIC5zZXRSZWNlaXZlSGVhZGVyc0VuZCguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc291cmNlVGltaW5nKCkpKTsKICAg
IH0KfTsKCi8qIEhUVFAgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBSZXF1ZXN0IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgTWV0aG9kU2V0ID0gMSA8PCAxLAog
ICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFVybFNl
dCB8IE1ldGhvZFNldCB8IEhlYWRlcnNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVy
dHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJs
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXRob2RTZXQ+JiBzZXRNZXRob2QoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBNZXRob2RTZXQpLCBwcm9wZXJ0eV9tZXRob2RfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXRob2QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TWV0aG9kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFk
ZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxS
ZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlcXVlc3Q+
IHJlc3VsdCA9IFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAg
KiAgICAgLnNldE1ldGhvZCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXF1ZXN0KCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEhUVFAg
cmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgUmVzcG9uc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVy
bFNldCA9IDEgPDwgMCwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDEsCiAgICAgICAgU3RhdHVz
VGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAzLAogICAgICAgIE1p
bWVUeXBlU2V0ID0gMSA8PCA0LAogICAgICAgIENvbm5lY3Rpb25SZXVzZWRTZXQgPSAxIDw8IDUs
CiAgICAgICAgQ29ubmVjdGlvbklkU2V0ID0gMSA8PCA2LAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChVcmxTZXQgfCBTdGF0dXNTZXQgfCBTdGF0dXNUZXh0U2V0IHwgSGVhZGVyc1NldCB8IE1pbWVU
eXBlU2V0IHwgQ29ubmVjdGlvblJldXNlZFNldCB8IENvbm5lY3Rpb25JZFNldCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlc3BvbnNl
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVz
U2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1c1RleHRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlw
ZVNldCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWltZVR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29ubmVjdGlvblJldXNlZFNldD4mIHNldENvbm5lY3Rpb25SZXVzZWQoYm9vbCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0aW9uUmV1
c2VkU2V0KSwgcHJvcGVydHlfY29ubmVjdGlvblJldXNlZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25uZWN0aW9uUmV1c2VkIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbm5lY3Rpb25SZXVzZWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdGlvbklkU2V0PiYgc2V0Q29ubmVjdGlv
bklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb25uZWN0aW9uSWRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uSWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0aW9uSWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdGlvbklkU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJl
c3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc3BvbnNlPiByZXN1bHQgPSBSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzKC4u
LikKICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMo
Li4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rp
b25SZXVzZWQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uSWQoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7CiAgICB9
CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURpc2tDYWNoZShib29sIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRUaW1pbmcoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzb3VyY2VU
aW1pbmc+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgidGltaW5nIiwgdmFs
dWUpOwogICAgfQp9OwoKLyogV2ViU29ja2V0IHJlcXVlc3QgZGF0YS4gKi8KY2xhc3MgV2ViU29j
a2V0UmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUmVxdWVzdEtleTNTZXQgPSAxIDw8IDAs
CiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUmVx
dWVzdEtleTNTZXQgfCBIZWFkZXJzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0UmVxdWVzdDsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlcXVlc3RLZXkzU2V0PiYgc2V0UmVxdWVz
dEtleTMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBSZXF1ZXN0S2V5M1NldCksIHByb3BlcnR5X3JlcXVlc3RLZXkzX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygicmVxdWVzdEtleTMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVxdWVzdEtleTNTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRl
cnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJz
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+KCp0aGlzKTsKICAgICAgICB9
CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQ
dHI8V2ViU29ja2V0UmVxdWVzdD4gcmVzdWx0ID0gV2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0UmVxdWVzdEtleTMoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgV2ViU29j
a2V0UmVxdWVzdCgpKSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVzcG9uc2UgZGF0YS4gKi8K
Y2xhc3MgV2ViU29ja2V0UmVzcG9uc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0YXR1c1NldCA9
IDEgPDwgMCwKICAgICAgICBTdGF0dXNUZXh0U2V0ID0gMSA8PCAxLAogICAgICAgIEhlYWRlcnNT
ZXQgPSAxIDw8IDIsCiAgICAgICAgQ2hhbGxlbmdlUmVzcG9uc2VTZXQgPSAxIDw8IDMsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFN0YXR1c1NldCB8IFN0YXR1c1RleHRTZXQgfCBIZWFkZXJzU2V0
IHwgQ2hhbGxlbmdlUmVzcG9uc2VTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0UmVzcG9uc2U7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGF0dXNTZXQ+JiBzZXRTdGF0dXMoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RhdHVzVGV4dFNldD4mIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNUZXh0U2V0KSwg
cHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U3RhdHVzVGV4dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBI
ZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1Nl
dCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ2hhbGxl
bmdlUmVzcG9uc2VTZXQ+JiBzZXRDaGFsbGVuZ2VSZXNwb25zZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENoYWxsZW5n
ZVJlc3BvbnNlU2V0KSwgcHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDaGFsbGVuZ2VSZXNwb25zZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcmVzdWx0ID0gV2ViU29ja2V0UmVzcG9uc2U6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1
c1RleHQoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLikKICAgICAqICAgICAuc2V0Q2hh
bGxlbmdlUmVzcG9uc2UoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBXZWJTb2NrZXRSZXNwb25zZSgpKSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlv
biBhYm91dCB0aGUgY2FjaGVkIHJlc291cmNlLiAqLwpjbGFzcyBDYWNoZWRSZXNvdXJjZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8
IDEsCiAgICAgICAgQm9keVNpemVTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFVybFNldCB8IFR5cGVTZXQgfCBCb2R5U2l6ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlPiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJv
cGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Qm9keVNpemVTZXQ+JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQm9keVNpemVTZXQpLCBwcm9wZXJ0eV9ib2R5
U2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImJvZHlT
aXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJvZHlTaXplU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENhY2hlZFJlc291cmNlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PENhY2hlZFJlc291cmNlPiByZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNl
dEJvZHlTaXplKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgQ2FjaGVkUmVzb3VyY2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UmVzcG9uc2UoUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldE9iamVjdCgicmVzcG9uc2UiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZv
cm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCBpbml0aWF0b3IuICovCmNsYXNzIEluaXRpYXRvciA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEluaXRpYXRvci4KICAgIHN0cnVjdCBU
eXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBQYXJzZXIgPSAzOCwKICAgICAg
ICAgICAgU2NyaXB0ID0gMzksCiAgICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgfTsKICAg
IH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxJbml0aWF0b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IEluaXRpYXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+
JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFs
dWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaXRpYXRvcj4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PEluaXRpYXRvcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxJbml0aWF0b3I+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEluaXRpYXRvcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxJbml0aWF0b3I+IHJlc3VsdCA9IEluaXRp
YXRvcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEluaXRpYXRvcigpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNr
VHJhY2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFja1RyYWNlIiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIo
ImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE5ldHdvcmsKCiNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRGF0YWJhc2UgewovKiBEYXRhYmFzZSBvYmplY3QuICov
CmNsYXNzIERhdGFiYXNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBJZFNldCA9IDEgPDwgMCwKICAg
ICAgICBEb21haW5TZXQgPSAxIDw8IDEsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMiwKICAgICAg
ICBWZXJzaW9uU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChJZFNldCB8IERv
bWFpblNldCB8IE5hbWVTZXQgfCBWZXJzaW9uU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RGF0YWJhc2U+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJv
cGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJp
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEb21haW5TZXQ+JiBzZXREb21haW4oY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEb21haW5TZXQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8RG9tYWluU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5X25hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmVyc2lvblNldD4mIHNldFZlcnNpb24oY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBWZXJzaW9uU2V0KSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VmVyc2lvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxEYXRhYmFzZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFiYXNlPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxEYXRhYmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElk
KC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0TmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBEYXRhYmFzZSgpKSk7CiAgICB9Cn07Cgp9IC8vIERhdGFiYXNl
CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpuYW1lc3BhY2UgSW5kZXhlZERCIHsKLyogT3JpZ2luIHdpdGggZGF0YWJhc2UgbmFtZXMg
YW5kIGZyYW1lIGlkcy4gKi8KY2xhc3MgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcyA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICdkYXRhYmFzZU5hbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lV2l0aERhdGFiYXNlTmFtZXMu
CiAgICBjbGFzcyBEYXRhYmFzZU5hbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHBy
aXZhdGU6CiAgICAgICAgRGF0YWJhc2VOYW1lcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2
b2lkIGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRo
aXMtPnB1c2hTdHJpbmcodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YWJhc2VOYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFiYXNlTmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBT
ZWN1cml0eU9yaWdpblNldCA9IDEgPDwgMSwKICAgICAgICBEYXRhYmFzZU5hbWVzU2V0ID0gMSA8
PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGcmFtZUlkU2V0IHwgU2VjdXJpdHlPcmlnaW5T
ZXQgfCBEYXRhYmFzZU5hbWVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWVXaXRoRGF0YWJhc2VOYW1l
czsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRG
cmFtZUlkKGNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJv
cGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnJhbWVJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWN1cml0eU9yaWdp
blNldD4mIHNldFNlY3VyaXR5T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VjdXJpdHlPcmlnaW5TZXQpLCBw
cm9wZXJ0eV9zZWN1cml0eU9yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNlY3VyaXR5T3JpZ2luU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IERhdGFiYXNlTmFtZXNTZXQ+JiBzZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
RGF0YWJhc2VOYW1lcz4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRGF0YWJhc2VOYW1lc1NldCksIHByb3BlcnR5X2RhdGFiYXNlTmFtZXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImRhdGFiYXNlTmFtZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGF0YWJhc2VOYW1lc1NldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5h
bWVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVdpdGhEYXRhYmFz
ZU5hbWVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZVdpdGhE
YXRhYmFzZU5hbWVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+
IHJlc3VsdCA9IEZyYW1lV2l0aERhdGFiYXNlTmFtZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRTZWN1cml0eU9yaWdpbiguLi4pCiAgICAgKiAg
ICAgLnNldERhdGFiYXNlTmFtZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzKCkpKTsKICAgIH0KfTsKCn0g
Ly8gSW5kZXhlZERCCgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCm5hbWVzcGFj
ZSBET01TdG9yYWdlIHsKLyogRE9NIFN0b3JhZ2UgZW50cnkuICovCmNsYXNzIEVudHJ5IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBIb3N0U2V0ID0gMSA8PCAwLAogICAgICAgIElzTG9jYWxTdG9yYWdl
U2V0ID0gMSA8PCAxLAogICAgICAgIElkU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChIb3N0U2V0IHwgSXNMb2NhbFN0b3JhZ2VTZXQgfCBJZFNldCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEVudHJ5PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBFbnRyeTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhvc3RTZXQ+JiBzZXRIb3N0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSG9z
dFNldCksIHByb3BlcnR5X2hvc3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJob3N0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhv
c3RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSXNMb2NhbFN0b3Jh
Z2VTZXQ+JiBzZXRJc0xvY2FsU3RvcmFnZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElzTG9jYWxTdG9yYWdlU2V0KSwgcHJvcGVydHlf
aXNMb2NhbFN0b3JhZ2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9v
bGVhbigiaXNMb2NhbFN0b3JhZ2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SXNMb2NhbFN0b3JhZ2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSWRTZXQ+JiBzZXRJZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImlkIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPEVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RW50cnk+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPEVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEVudHJ5PiByZXN1
bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SG9zdCguLi4pCiAgICAgKiAgICAg
LnNldElzTG9jYWxTdG9yYWdlKC4uLikKICAgICAqICAgICAuc2V0SWQoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBFbnRyeSgpKSk7CiAgICB9Cn07
Cgp9IC8vIERPTVN0b3JhZ2UKCm5hbWVzcGFjZSBBcHBsaWNhdGlvbkNhY2hlIHsKLyogRGV0YWls
ZWQgYXBwbGljYXRpb24gY2FjaGUgcmVzb3VyY2UgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAw
LAogICAgICAgIFNpemVTZXQgPSAxIDw8IDEsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMiwKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgU2l6ZVNldCB8IFR5cGVTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5
X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNldFNpemUoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBw
cm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZVJlc291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRT
aXplKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSgpKSk7CiAg
ICB9Cn07CgovKiBEZXRhaWxlZCBhcHBsaWNhdGlvbiBjYWNoZSBpbmZvcm1hdGlvbi4gKi8KY2xh
c3MgQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRp
bmcgQXBwbGljYXRpb25DYWNoZS4KICAgIGNsYXNzIFJlc291cmNlcyA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFJlc291cmNlcygpIHsgfQoKICAgIHB1Ymxp
YzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVzb3VyY2VzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUmVzb3VyY2VzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE1hbmlmZXN0VVJMU2V0ID0gMSA8PCAwLAogICAg
ICAgIFNpemVTZXQgPSAxIDw8IDEsCiAgICAgICAgQ3JlYXRpb25UaW1lU2V0ID0gMSA8PCAyLAog
ICAgICAgIFVwZGF0ZVRpbWVTZXQgPSAxIDw8IDMsCiAgICAgICAgUmVzb3VyY2VzU2V0ID0gMSA8
PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChNYW5pZmVzdFVSTFNldCB8IFNpemVTZXQgfCBD
cmVhdGlvblRpbWVTZXQgfCBVcGRhdGVUaW1lU2V0IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBw
bGljYXRpb25DYWNoZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hbmlm
ZXN0VVJMU2V0PiYgc2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNldCksIHBy
b3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TWFuaWZlc3RVUkxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U2l6ZVNldD4mIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENyZWF0aW9uVGltZVNldD4mIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ3JlYXRp
b25UaW1lU2V0KSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENyZWF0aW9uVGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBVcGRhdGVUaW1lU2V0PiYgc2V0VXBkYXRlVGltZShkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXBkYXRl
VGltZVNldCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFVwZGF0ZVRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8UmVzb3VyY2Vz
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBS
ZXNvdXJjZXNTZXQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxSZXNvdXJjZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBy
ZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRNYW5pZmVz
dFVSTCguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRDcmVhdGlv
blRpbWUoLi4uKQogICAgICogICAgIC5zZXRVcGRhdGVUaW1lKC4uLikKICAgICAqICAgICAuc2V0
UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgQXBwbGljYXRpb25DYWNoZSgpKSk7CiAgICB9Cn07CgovKiBGcmFtZSBpZGVudGlmaWVy
IC0gbWFuaWZlc3QgVVJMIHBhaXIuICovCmNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIE1hbmlmZXN0VVJMU2V0
ID0gMSA8PCAxLAogICAgICAgIFN0YXR1c1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoRnJhbWVJZFNldCB8IE1hbmlmZXN0VVJMU2V0IHwgU3RhdHVzU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVXaXRo
TWFuaWZlc3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZy
YW1lV2l0aE1hbmlmZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJh
bWVJZFNldD4mIHNldEZyYW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZy
YW1lSWRTZXQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxGcmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1hbmlmZXN0VVJMU2V0PiYgc2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNl
dCksIHByb3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWFuaWZlc3RVUkxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU3RhdHVzU2V0PiYgc2V0U3RhdHVzKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBwcm9wZXJ0eV9zdGF0dXNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPEZyYW1lV2l0aE1hbmlmZXN0PiByZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJM
KC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihhZG9wdFJlZihuZXcgRnJhbWVXaXRoTWFuaWZlc3QoKSkpOwogICAgfQp9OwoK
fSAvLyBBcHBsaWNhdGlvbkNhY2hlCgpuYW1lc3BhY2UgRE9NIHsKLyogRE9NIGludGVyYWN0aW9u
IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1pcnJvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50
IHRoZSBhY3R1YWwgRE9NIG5vZGVzLiBET01Ob2RlIGlzIGEgYmFzZSBub2RlIG1pcnJvciB0eXBl
LiAqLwpjbGFzcyBOb2RlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkcmVuJyB3aGlsZSBnZW5lcmF0aW5nIE5v
ZGUuCiAgICBjbGFzcyBDaGlsZHJlbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2
YXRlOgogICAgICAgIENoaWxkcmVuKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDaGlsZHJlbj4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENoaWxkcmVuKCkpOwogICAgICAgIH0KICAgIH07CgogICAgLy8gTmFtZWQg
YWZ0ZXIgcHJvcGVydHkgbmFtZSAnYXR0cmlidXRlcycgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgog
ICAgY2xhc3MgQXR0cmlidXRlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRl
OgogICAgICAgIEF0dHJpYnV0ZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJ
dGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
U3RyaW5nKHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0dHJp
YnV0ZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdHRyaWJ1
dGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIE5vZGVJZFNldCA9IDEgPDwgMCwKICAgICAgICBOb2RlVHlwZVNldCA9IDEg
PDwgMSwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMiwKICAgICAgICBMb2NhbE5hbWVTZXQg
PSAxIDw8IDMsCiAgICAgICAgTm9kZVZhbHVlU2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxk
c1NldCA9IChOb2RlSWRTZXQgfCBOb2RlVHlwZVNldCB8IE5vZGVOYW1lU2V0IHwgTG9jYWxOYW1l
U2V0IHwgTm9kZVZhbHVlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgTm9kZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5vZGVJZFNldD4mIHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUlkU2V0KSwgcHJvcGVydHlfbm9kZUlkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVJZFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVHlwZVNldD4mIHNldE5vZGVUeXBlKGludCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlVHlw
ZVNldCksIHByb3BlcnR5X25vZGVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibm9kZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Tm9kZVR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Tm9kZU5hbWVTZXQ+JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVy
dHlfbm9kZU5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJub2RlTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFt
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2NhbE5hbWVTZXQ+
JiBzZXRMb2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMb2NhbE5hbWVTZXQpLCBwcm9wZXJ0eV9sb2NhbE5h
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsb2NhbE5h
bWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TG9jYWxOYW1lU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVWYWx1ZVNldD4mIHNldE5v
ZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5vZGVWYWx1ZVNldCksIHByb3BlcnR5X25vZGVWYWx1ZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVWYWx1ZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlVmFsdWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5vZGU+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9k
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZT4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRO
b2RlSWQoLi4uKQogICAgICogICAgIC5zZXROb2RlVHlwZSguLi4pCiAgICAgKiAgICAgLnNldE5v
ZGVOYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYWxOYW1lKC4uLikKICAgICAqICAgICAuc2V0
Tm9kZVZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgTm9kZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZE5vZGVDb3VudChpbnQgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8Q2hpbGRyZW4+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldEF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxBdHRyaWJ1dGVzPiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dFB1YmxpY0lkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJwdWJsaWNJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN5c3RlbUlkKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzeXN0ZW1JZCIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEludGVybmFsU3Vic2V0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJpbnRlcm5hbFN1YnNldCIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFhtbFZlcnNpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZhbHVlIiwg
dmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAg
dm9pZCBzZXRDb250ZW50RG9jdW1lbnQoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2Rl
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnREb2N1bWVudCIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0
ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rl
cy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBVc2VD
YXB0dXJlU2V0ID0gMSA8PCAxLAogICAgICAgIElzQXR0cmlidXRlU2V0ID0gMSA8PCAyLAogICAg
ICAgIE5vZGVJZFNldCA9IDEgPDwgMywKICAgICAgICBIYW5kbGVyQm9keVNldCA9IDEgPDwgNCwK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IFVzZUNhcHR1cmVTZXQgfCBJc0F0dHJp
YnV0ZVNldCB8IE5vZGVJZFNldCB8IEhhbmRsZXJCb2R5U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VXNlQ2FwdHVyZVNldD4mIHNldFVzZUNhcHR1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVc2VDYXB0dXJlU2V0KSwgcHJvcGVydHlf
dXNlQ2FwdHVyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFu
KCJ1c2VDYXB0dXJlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVzZUNh
cHR1cmVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSXNBdHRyaWJ1
dGVTZXQ+JiBzZXRJc0F0dHJpYnV0ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIElzQXR0cmlidXRlU2V0KSwgcHJvcGVydHlfaXNBdHRy
aWJ1dGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaXNB
dHRyaWJ1dGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SXNBdHRyaWJ1
dGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZUlkU2V0PiYg
c2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOb2RlSWRTZXQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Tm9kZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEhhbmRsZXJCb2R5U2V0PiYgc2V0SGFuZGxlckJvZHkoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIYW5k
bGVyQm9keVNldCksIHByb3BlcnR5X2hhbmRsZXJCb2R5X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiaGFuZGxlckJvZHkiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SGFuZGxlckJvZHlTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEV2ZW50TGlzdGVu
ZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBF
dmVudExpc3RlbmVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAg
ICAuc2V0VXNlQ2FwdHVyZSguLi4pCiAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAg
ICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0SGFuZGxlckJvZHkoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBFdmVudExpc3Rl
bmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEEgc3RydWN0dXJlIGhvbGRpbmcg
YW4gUkdCQSBjb2xvci4gKi8KLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnUkdCQScuCmNs
YXNzIFJnYmEgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFJTZXQgPSAxIDw8IDAsCiAgICAgICAgR1Nl
dCA9IDEgPDwgMSwKICAgICAgICBCU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChSU2V0IHwgR1NldCB8IEJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBSZ2JhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUlNldD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJTZXQpLCBwcm9wZXJ0eV9yX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxSU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEdTZXQ+
JiBzZXRHKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBHU2V0KSwgcHJvcGVydHlfZ19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImciLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
R1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCU2V0PiYgc2V0Qihp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
QlNldCksIHByb3BlcnR5X2JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJiIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmdiYT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFJnYmE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8UmdiYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmdiYT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxSZ2JhPiByZXN1bHQgPSBSZ2JhOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRSKC4uLikKICAgICAqICAgICAuc2V0RyguLi4pCiAgICAgKiAgICAgLnNldEIoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZ2JhKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE51bWJlcigiYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENvbmZpZ3VyYXRpb24gZGF0YSBmb3Ig
dGhlIGhpZ2hsaWdodGluZyBvZiBwYWdlIGVsZW1lbnRzLiAqLwpjbGFzcyBIaWdobGlnaHRDb25m
aWcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSGlnaGxpZ2h0
Q29uZmlnOwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SGlnaGxpZ2h0Q29u
ZmlnPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gcmVzdWx0ID0gSGlnaGxpZ2h0Q29uZmlnOjpj
cmVhdGUoKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBI
aWdobGlnaHRDb25maWcoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJzaG93SW5mbyIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldENvbnRlbnRDb2xvcihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
OlJnYmE+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudENvbG9y
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UGFkZGluZ0NvbG9yKFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRPTTo6UmdiYT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0
KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRCb3JkZXJDb2xvcihQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgiYm9yZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRN
YXJnaW5Db2xvcihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldE9iamVjdCgibWFyZ2luQ29sb3IiLCB2YWx1ZSk7CiAgICB9Cn07
Cgp9IC8vIERPTQoKbmFtZXNwYWNlIENTUyB7Ci8qIFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBD
U1Mgc3R5bGUgaW4gYSB1bmlxdWUgd2F5LiAqLwpjbGFzcyBDU1NTdHlsZUlkIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgT3JkaW5hbFNldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3R5bGVTaGVldElkU2V0IHwgT3JkaW5h
bFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENTU1N0eWxlSWQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENTU1N0eWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRT
ZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE9yZGluYWxTZXQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmRpbmFsU2V0KSwgcHJvcGVydHlf
b3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9y
ZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JkaW5hbFNldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTU3R5bGVJZD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDU1NTdHlsZUlkPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlSWQ+IHJl
c3VsdCA9IENTU1N0eWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCgu
Li4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUlkKCkpKTsKICAgIH0KICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1N0eWxlSWQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQogICAgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsK
ICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICAgICAg
QVNTRVJUKGNhc3RSZXMpOwojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIGFzc2VydENvcnJl
Y3RWYWx1ZShvYmplY3QuZ2V0KCkpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoQ1NTU3R5bGVJZCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9i
amVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gKihyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZvYmplY3QpKTsKICAgIH0KCiNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUq
IHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECn07CgovKiBUaGlzIG9iamVjdCBp
ZGVudGlmaWVzIGEgQ1NTIHJ1bGUgaW4gYSB1bmlxdWUgd2F5LiAqLwpjbGFzcyBDU1NSdWxlSWQg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBP
cmRpbmFsU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0SWRT
ZXQgfCBPcmRpbmFsU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBDU1NSdWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHls
ZVNoZWV0SWRTZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE9yZGluYWxTZXQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmRpbmFsU2V0KSwg
cHJvcGVydHlfb3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3Jk
aW5hbFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NSdWxlSWQ+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDU1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlk
PiByZXN1bHQgPSBDU1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJ
ZCguLi4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NSdWxlSWQoKSkpOwogICAgfQogICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7
CiAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgICAg
IEFTU0VSVChjYXN0UmVzKTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBhc3NlcnRDb3Jy
ZWN0VmFsdWUob2JqZWN0LmdldCgpKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENTU1J1bGVJZCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9i
amVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gKihyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm9iamVjdCkpOwogICAgfQoKI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8qIENTUyBydWxlIGNvbGxl
Y3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRSdWxlcyA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBQc2V1ZG9JZFJ1bGVzLgogICAgY2xh
c3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBS
dWxlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxl
cygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBQc2V1ZG9JZFNldCA9IDEgPDwgMCwKICAgICAgICBSdWxlc1NldCA9IDEgPDwg
MSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUHNldWRvSWRTZXQgfCBSdWxlc1NldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFBzZXVk
b0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFBz
ZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQc2V1ZG9J
ZFNldD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBQc2V1ZG9JZFNldCksIHByb3BlcnR5X3BzZXVkb0lkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHNldWRvSWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHNldWRvSWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxlcyhQYXNzUmVmUHRy
PFJ1bGVzPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQ
c2V1ZG9JZFJ1bGVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBQc2V1
ZG9JZFJ1bGVzKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rpb24gZm9yIGEgc2lu
Z2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICdtYXRjaGVkQ1NTUnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcgSW5oZXJpdGVkU3R5bGVFbnRyeS4K
ICAgIGNsYXNzIE1hdGNoZWRDU1NSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBw
cml2YXRlOgogICAgICAgIE1hdGNoZWRDU1NSdWxlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAg
ICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1bGVzPiBjcmVhdGUoKSB7
CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0Y2hlZENTU1J1bGVzKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IE1hdGNoZWRDU1NSdWxlc1NldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWF0
Y2hlZENTU1J1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hdGNoZWRDU1NSdWxlc1NldD4mIHNldE1hdGNo
ZWRDU1NSdWxlcyhQYXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxlcz4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hlZENTU1J1bGVzU2V0KSwg
cHJvcGVydHlfbWF0Y2hlZENTU1J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TWF0Y2hlZENTU1J1bGVzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbmhlcml0
ZWRTdHlsZUVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5o
ZXJpdGVkU3R5bGVFbnRyeT4gcmVzdWx0ID0gSW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5oZXJpdGVkU3R5bGVFbnRyeSgpKSk7CiAgICB9
CgogICAgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0eWxl
IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGluZm9ybWF0aW9uIGZvciBhIERPTSBz
dHlsZSBhdHRyaWJ1dGUuICovCmNsYXNzIENTU1N0eWxlQXR0cmlidXRlIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
ICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFN0eWxlU2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgU3R5bGVTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJpYnV0
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVB
dHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYg
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENTU1N0eWxlQXR0cmlidXRlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NT
U3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENT
U1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiBy
ZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVBdHRyaWJ1dGUoKSkpOwogICAgfQp9OwoKLyog
Q1NTIHN0eWxlc2hlZXQgbWV0YWluZm9ybWF0aW9uLiAqLwpjbGFzcyBDU1NTdHlsZVNoZWV0SGVh
ZGVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAg
ICAgU291cmNlVVJMU2V0ID0gMSA8PCAxLAogICAgICAgIFRpdGxlU2V0ID0gMSA8PCAyLAogICAg
ICAgIERpc2FibGVkU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNo
ZWV0SWRTZXQgfCBTb3VyY2VVUkxTZXQgfCBUaXRsZVNldCB8IERpc2FibGVkU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldEhlYWRlcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ1NTU3R5bGVTaGVldEhlYWRlcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2hl
ZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU291cmNlVVJMU2V0PiYgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU291
cmNlVVJMU2V0KSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNvdXJjZVVSTFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQpLCBwcm9wZXJ0
eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRp
dGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpc2FibGVkU2V0PiYgc2V0RGlzYWJs
ZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEaXNhYmxlZFNldCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPERpc2FibGVkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHls
ZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NT
U3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0U291cmNlVVJM
KC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXREaXNhYmxlZCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0
eWxlU2hlZXRIZWFkZXIoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlc2hlZXQgY29udGVudHMu
ICovCmNsYXNzIENTU1N0eWxlU2hlZXRCb2R5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3J1bGVzJyB3aGlsZSBnZW5l
cmF0aW5nIENTU1N0eWxlU2hlZXRCb2R5LgogICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSdWxlcygpIHsgfQoKICAgIHB1YmxpYzoK
ICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxl
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwog
ICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRT
ZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFJ1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRC
b2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0
PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlf
c3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0
eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSdWxl
c1NldD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8UnVsZXM+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJ1bGVzU2V0KSwgcHJvcGVydHlfcnVsZXNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJ1bGVzU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PENTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHls
ZVNoZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQp9
OwoKLyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1bGUgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAnb3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBzdHJ1Y3QgT3JpZ2luIHsK
ICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVc2VyID0gNDAsCiAgICAgICAgICAgIFVz
ZXJfYWdlbnQgPSA0MSwKICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIsCiAgICAgICAgICAgIFJl
Z3VsYXIgPSA0MywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9yaWdpbgoKICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21lZGlhJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUu
CiAgICBjbGFzcyBNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgog
ICAgICAgIE1lZGlhKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWVkaWE+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZWRpYSgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBTZWxlY3RvclRleHRTZXQgPSAxIDw8IDAsCiAgICAgICAgU291
cmNlTGluZVNldCA9IDEgPDwgMSwKICAgICAgICBPcmlnaW5TZXQgPSAxIDw8IDIsCiAgICAgICAg
U3R5bGVTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNlbGVjdG9yVGV4dFNl
dCB8IFNvdXJjZUxpbmVTZXQgfCBPcmlnaW5TZXQgfCBTdHlsZVNldCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1J1bGU+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1bGU7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWxlY3RvclRleHRTZXQ+JiBzZXRTZWxlY3Rv
clRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTZWxlY3RvclRleHRTZXQpLCBwcm9wZXJ0eV9zZWxlY3RvclRleHRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRl
eHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VsZWN0b3JUZXh0U2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZUxpbmVTZXQ+JiBz
ZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTb3VyY2VMaW5lU2V0KSwgcHJvcGVydHlfc291cmNlTGluZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlTGluZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBzZXRPcmlnaW4oT3JpZ2lu
OjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE9yaWdpblNldCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JpZ2luU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGU+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1J1bGU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291cmNlTGluZSguLi4pCiAg
ICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZSgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXRSdWxlSWQoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NS
dWxlSWQ+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicnVsZUlkIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTZWxlY3RvclJhbmdlKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291
cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic2VsZWN0b3JS
YW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKFBhc3NSZWZQdHI8TWVkaWE+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3VyY2UuICovCmNsYXNzIFNvdXJjZVJh
bmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGFydFNldCA9IDEgPDwgMCwKICAgICAgICBFbmRT
ZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0YXJ0U2V0IHwgRW5kU2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
U291cmNlUmFuZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IFNvdXJjZVJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhcnRT
ZXQ+JiBzZXRTdGFydChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU3RhcnRTZXQpLCBwcm9wZXJ0eV9zdGFydF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEVuZFNldD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRW5kU2V0KSwgcHJvcGVydHlfZW5kX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZW5kIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxTb3VyY2VSYW5nZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNvdXJj
ZVJhbmdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTb3VyY2VSYW5n
ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0gU291cmNlUmFuZ2U6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RW5kKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU291cmNl
UmFuZ2UoKSkpOwogICAgfQp9OwoKY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8
PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3Bl
cnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJu
YW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1bHQgPSBDU1NDb21wdXRlZFN0eWxl
UHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5z
ZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSgpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUg
cmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1N0eWxlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2Nzc1Byb3BlcnRp
ZXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTU3R5bGUuCiAgICBjbGFzcyBDc3NQcm9wZXJ0aWVzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ3NzUHJvcGVydGll
cygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENzc1Byb3BlcnRpZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDc3NQcm9wZXJ0aWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnc2hvcnRoYW5kRW50cmllcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NT
dHlsZS4KICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgcHJpdmF0ZToKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzKCkgeyB9CgogICAgcHVibGlj
OgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9
CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNob3J0aGFuZEVudHJpZXM+IGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaG9ydGhhbmRFbnRyaWVzKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IENzc1Byb3BlcnRpZXNTZXQgPSAxIDw8IDAsCiAgICAgICAgU2hvcnRoYW5kRW50cmllc1NldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ3NzUHJvcGVydGllc1NldCB8IFNob3J0
aGFuZEVudHJpZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDc3NQcm9wZXJ0aWVzU2V0PiYgc2V0Q3NzUHJvcGVydGllcyhQYXNzUmVmUHRyPENzc1By
b3BlcnRpZXM+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENzc1Byb3BlcnRpZXNTZXQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0aWVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENzc1Byb3BlcnRpZXNTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5kRW50cmllc1NldD4mIHNl
dFNob3J0aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVzPiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaG9ydGhhbmRFbnRy
aWVzU2V0KSwgcHJvcGVydHlfc2hvcnRoYW5kRW50cmllc19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaG9ydGhhbmRFbnRyaWVzU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5
bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
Q1NTU3R5bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxl
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlPiByZXN1bHQgPSBDU1NTdHlsZTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0Q3NzUHJvcGVydGllcyguLi4pCiAgICAgKiAgICAgLnNldFNob3J0
aGFuZEVudHJpZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBDU1NTdHlsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdHlsZUlkKFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q3NzVGV4
dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiY3Nz
VGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygid2lkdGgiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBz
dHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiAqLwpj
bGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NT
UHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAg
ICAgICBBY3RpdmUgPSA0NCwKICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwKICAgICAgICAgICAg
RGlzYWJsZWQgPSA0NiwKICAgICAgICAgICAgU3R5bGUgPSA0NywKICAgICAgICB9OwogICAgfTsg
Ly8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAg
ICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVl
U2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NQcm9w
ZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NT
UHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9IENTU1By
b3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0
VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5l
dyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHJpb3JpdHkiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
dGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0K
CiAgICB2b2lkIHNldFNob3J0aGFuZE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAg
fQp9OwoKLyogQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3IuICovCmNsYXNzIENTU01lZGlhIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGluZyBDU1NNZWRpYS4KICAgIHN0cnVjdCBT
b3VyY2UgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE1lZGlhUnVsZSA9IDQ4LAog
ICAgICAgICAgICBJbXBvcnRSdWxlID0gNDksCiAgICAgICAgICAgIExpbmtlZFNoZWV0ID0gNTAs
CiAgICAgICAgICAgIElubGluZVNoZWV0ID0gNTEsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVj
dCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVGV4
dFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKFRleHRTZXQgfCBTb3VyY2VTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NNZWRpYT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTTWVkaWE7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUZXh0U2V0PiYgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRleHRTZXQp
LCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUZXh0U2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4mIHNldFNv
dXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3VsdCA9IENTU01l
ZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291
cmNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc2Vs
ZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnkgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIFNlbGVjdG9yU2V0ID0gMSA8PCAwLAogICAgICAgIFVybFNldCA9IDEg
PDwgMSwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAyLAogICAgICAgIFRpbWVTZXQgPSAx
IDw8IDMsCiAgICAgICAgSGl0Q291bnRTZXQgPSAxIDw8IDQsCiAgICAgICAgTWF0Y2hDb3VudFNl
dCA9IDEgPDwgNSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JTZXQgfCBVcmxTZXQg
fCBMaW5lTnVtYmVyU2V0IHwgVGltZVNldCB8IEhpdENvdW50U2V0IHwgTWF0Y2hDb3VudFNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNlbGVjdG9yU2V0PiYgc2V0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWxlY3Rv
clNldCksIHByb3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U2VsZWN0b3JTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNl
dCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVGltZVNldD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVTZXQpLCBwcm9wZXJ0eV90aW1lX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidGltZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEhpdENvdW50U2V0PiYgc2V0SGl0Q291bnQoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhpdENvdW50U2V0KSwg
cHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxI
aXRDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYXRjaENv
dW50U2V0PiYgc2V0TWF0Y2hDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hDb3VudFNldCksIHByb3BlcnR5X21hdGNoQ291
bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaENv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hdGNoQ291bnRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50
cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRy
eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxl
RW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+IHJlc3VsdCA9
IFNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTZWxlY3Rvcigu
Li4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4u
KQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0Q291bnQoLi4uKQog
ICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlRW50cnkoKSkpOwogICAgfQp9OwoK
Y2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdoaWxlIGdlbmVyYXRpbmcg
U2VsZWN0b3JQcm9maWxlLgogICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CiAgICBwcml2YXRlOgogICAgICAgIERhdGEoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50
cnk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7
CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhPiBjcmVhdGUoKSB7CiAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YSgpKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUb3RhbFRpbWVTZXQg
PSAxIDw8IDAsCiAgICAgICAgRGF0YVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoVG90YWxUaW1lU2V0IHwgRGF0YVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQcm9maWxlOwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVG90YWxUaW1lU2V0PiYgc2V0VG90YWxUaW1l
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUb3RhbFRpbWVTZXQpLCBwcm9wZXJ0eV90b3RhbFRpbWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ0b3RhbFRpbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VG90YWxUaW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBzZXREYXRhKFBhc3NSZWZQdHI8RGF0YT4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGF0YVNldCks
IHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGF0YVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBTZWxlY3RvclBy
b2ZpbGUoKSkpOwogICAgfQp9OwoKfSAvLyBDU1MKCm5hbWVzcGFjZSBUaW1lbGluZSB7Ci8qIFRp
bWVsaW5lIHJlY29yZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3JkZWQgYWN0
aXZpdHkuICovCmNsYXNzIFRpbWVsaW5lRXZlbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxl
IGdlbmVyYXRpbmcgVGltZWxpbmVFdmVudC4KICAgIGNsYXNzIENoaWxkcmVuIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRyZW4oKSB7IH0KCiAgICBw
dWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlRpbWVs
aW5lOjpUaW1lbGluZUV2ZW50PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1
c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hp
bGRyZW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZHJl
bigpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIERhdGFTZXQgPSAxIDw8IDEsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQgfCBEYXRhU2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgVGltZWxpbmVFdmVu
dDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRGF0YVNldD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERhdGFTZXQpLCBw
cm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgiZGF0YSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEYXRhU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFRpbWVsaW5lRXZlbnQ+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxUaW1lbGluZUV2ZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPFRpbWVsaW5lRXZlbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8VGlt
ZWxpbmVFdmVudD4gcmVzdWx0ID0gVGltZWxpbmVFdmVudDo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBUaW1lbGluZUV2ZW50KCkpKTsKICAgIH0KCiAg
ICB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8Q2hpbGRyZW4+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gVGlt
ZWxpbmUKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERlYnVnZ2Vy
IHsKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgU2NyaXB0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTGluZU51bWJl
clNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2NyaXB0SWRTZXQgfCBMaW5l
TnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U2NyaXB0SWRTZXQ+JiBzZXRTY3JpcHRJZChjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNj
cmlwdElkJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTY3JpcHRJZFNldCksIHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U2NyaXB0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQp
LCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PExvY2F0aW9uPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExv
Y2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0
SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTG9jYXRpb24oKSkpOwogICAgfQoKICAgIHZv
aWQgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1i
ZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgIH0KI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
IHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwoj
ZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8qIEphdmFTY3JpcHQgY2FsbCBmcmFtZS4g
QXJyYXkgb2YgY2FsbCBmcmFtZXMgZm9ybSB0aGUgY2FsbCBzdGFjay4gKi8KY2xhc3MgQ2FsbEZy
YW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3Njb3BlQ2hhaW4nIHdoaWxlIGdlbmVyYXRpbmcgQ2FsbEZyYW1lLgog
ICAgY2xhc3MgU2NvcGVDaGFpbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRl
OgogICAgICAgIFNjb3BlQ2hhaW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJ
dGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29wZT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTY29wZUNoYWluKCkpOwogICAgICAgIH0KI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICB9OwoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBDYWxsRnJhbWVJZFNldCA9IDEg
PDwgMCwKICAgICAgICBGdW5jdGlvbk5hbWVTZXQgPSAxIDw8IDEsCiAgICAgICAgTG9jYXRpb25T
ZXQgPSAxIDw8IDIsCiAgICAgICAgU2NvcGVDaGFpblNldCA9IDEgPDwgMywKICAgICAgICBUaGlz
U2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChDYWxsRnJhbWVJZFNldCB8IEZ1
bmN0aW9uTmFtZVNldCB8IExvY2F0aW9uU2V0IHwgU2NvcGVDaGFpblNldCB8IFRoaXNTZXQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxD
YWxsRnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENh
bGxGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENhbGxGcmFtZUlk
U2V0PiYgc2V0Q2FsbEZyYW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJh
bWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQ2FsbEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENhbGxGcmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEZ1bmN0aW9uTmFtZVNldD4mIHNldEZ1bmN0aW9uTmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEZ1bmN0aW9uTmFtZVNldCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGdW5jdGlvbk5hbWVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYXRpb25TZXQ+JiBzZXRMb2NhdGlv
bihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwg
cHJvcGVydHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxM
b2NhdGlvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNo
YWluU2V0PiYgc2V0U2NvcGVDaGFpbihQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNjb3BlQ2hhaW5TZXQp
LCBwcm9wZXJ0eV9zY29wZUNoYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEFycmF5KCJzY29wZUNoYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNjb3BlQ2hhaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VGhpc1NldD4mIHNldFRoaXMoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaGlzU2V0KSwgcHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGhpc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxs
RnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2Fs
bEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAu
c2V0TG9jYXRpb24oLi4uKQogICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAg
ICAuc2V0VGhpcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IENhbGxGcmFtZSgpKSk7CiAgICB9CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsRnJh
bWU+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICAgICBib29sIGNhc3RS
ZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICAgICAgQVNTRVJUKGNhc3RSZXMpOwoj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0
KCkpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoQ2FsbEZyYW1lKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgdHlwZV9jYXN0X3By
b2JsZW0pOwogICAgICAgIHJldHVybiAqKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFt
ZT4qPigmb2JqZWN0KSk7CiAgICB9CgojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgc3RhdGljIHZv
aWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8g
IUFTU0VSVF9ESVNBQkxFRAp9OwoKLyogU2NvcGUgZGVzY3JpcHRpb24uICovCmNsYXNzIFNjb3Bl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgU2NvcGUuCiAgICBzdHJ1Y3QgVHlw
ZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgR2xvYmFsID0gNTIsCiAgICAgICAg
ICAgIExvY2FsID0gNTMsCiAgICAgICAgICAgIFdpdGggPSA1NCwKICAgICAgICAgICAgQ2xvc3Vy
ZSA9IDU1LAogICAgICAgICAgICBDYXRjaCA9IDU2LAogICAgICAgIH07CiNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZh
bHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgfTsgLy8gc3RydWN0
IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNl
dCA9IDEgPDwgMCwKICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFR5cGVTZXQgfCBPYmplY3RTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTY29wZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgU2NvcGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90
eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIs
IGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RT
ZXQ+JiBzZXRPYmplY3QoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KCJvYmplY3QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T2JqZWN0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFNjb3BlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2NvcGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2NvcGU+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPFNjb3BlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNjb3BlPiByZXN1bHQg
PSBTY29wZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNl
dE9iamVjdCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IFNjb3BlKCkpKTsKICAgIH0KI2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0YXRpYyB2b2lk
IGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwojZW5kaWYgIC8vICFB
U1NFUlRfRElTQUJMRUQKfTsKCn0gLy8gRGVidWdnZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpuYW1lc3BhY2Ug
RE9NRGVidWdnZXIgewovKiBET00gYnJlYWtwb2ludCB0eXBlLiAqLwpzdHJ1Y3QgRE9NQnJlYWtw
b2ludFR5cGUgewogICAgZW51bSBFbnVtIHsKICAgICAgICBTdWJ0cmVlX21vZGlmaWVkID0gNTcs
CiAgICAgICAgQXR0cmlidXRlX21vZGlmaWVkID0gNTgsCiAgICAgICAgTm9kZV9yZW1vdmVkID0g
NTksCiAgICB9Owp9OyAvLyBzdHJ1Y3QgRE9NQnJlYWtwb2ludFR5cGUKCn0gLy8gRE9NRGVidWdn
ZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNl
IFR5cGVCdWlsZGVyCgpjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CnB1YmxpYzoKICAgIEluc3Bl
Y3RvckZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwoKCiAgICBjbGFzcyBJbnNw
ZWN0b3IgewogICAgcHVibGljOgogICAgICAgIEluc3BlY3RvcihJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwog
ICAgICAgIHZvaWQgaW5zcGVjdCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0LCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpOwogICAgICAgIHZvaWQgZGlkQ3JlYXRlV29ya2Vy
KGludCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWQpOwogICAgICAgIHZvaWQg
ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBJbnNwZWN0b3IqIGluc3BlY3RvcigpIHsgcmV0dXJu
ICZtX2luc3BlY3RvcjsgfQoKICAgIGNsYXNzIE1lbW9yeSB7CiAgICBwdWJsaWM6CiAgICAgICAg
TWVtb3J5KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CgogICAgY2xhc3MgUGFn
ZSB7CiAgICBwdWJsaWM6CiAgICAgICAgUGFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9tQ29udGVudEV2ZW50Rmly
ZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkRXZlbnRGaXJlZChkb3VibGUg
dGltZXN0YW1wKTsKICAgICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1l
KTsKICAgICAgICB2b2lkIGZyYW1lRGV0YWNoZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29y
azo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwogICAgICAgIHZvaWQgc2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQYWdlKiBwYWdlKCkgeyByZXR1
cm4gJm1fcGFnZTsgfQoKICAgIGNsYXNzIFJ1bnRpbWUgewogICAgcHVibGljOgogICAgICAgIFJ1
bnRpbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07Cgog
ICAgUnVudGltZSogcnVudGltZSgpIHsgcmV0dXJuICZtX3J1bnRpbWU7IH0KCiAgICBjbGFzcyBD
b25zb2xlIHsKICAgIHB1YmxpYzoKICAgICAgICBDb25zb2xlKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZXNzYWdlQWRk
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBtZXNzYWdl
UmVwZWF0Q291bnRVcGRhdGVkKGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdlc0NsZWFy
ZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgQ29uc29sZSogY29uc29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAgICBjbGFz
cyBOZXR3b3JrIHsKICAgIHB1YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCByZXF1ZXN0
V2lsbEJlU2VudCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1l
SWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3Vt
ZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3Q+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29s
ZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICAgICB2b2lkIHJlcXVlc3RT
ZXJ2ZWRGcm9tQ2FjaGUoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiov
IGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQo
Lypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQm
Ki8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRl
cjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQoLypjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElk
LCBkb3VibGUgdGltZXN0YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3Ro
KTsKICAgICAgICB2b2lkIGxvYWRpbmdGaW5pc2hlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7
CiAgICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKC8qY29uc3QgVHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypj
b25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmlu
ZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c291cmNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdCgv
KmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVx
dWVzdCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKC8q
Y29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q3JlYXRlZCgvKmNvbnN0IFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3NlZCgvKmNvbnN0IFR5cGVCdWls
ZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJs
ZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1cm4gJm1fbmV0d29yazsgfQoK
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBEYXRhYmFzZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgRGF0YWJhc2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERhdGFiYXNlKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhYmFzZSk7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2NvbHVt
bk5hbWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkLgog
ICAgICAgIGNsYXNzIENvbHVtbk5hbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICBDb2x1bW5OYW1lcygpIHsgfQoKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+IGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29sdW1uTmFtZXMoKSk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFt
ZSAndmFsdWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVk
LgogICAgICAgIGNsYXNzIFZhbHVlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAgICAg
cHJpdmF0ZToKICAgICAgICAgICAgVmFsdWVzKCkgeyB9CgogICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAg
ICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWYWx1ZXM+IGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmFsdWVzKCkpOwogICAgICAgICAg
ICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQg
dHJhbnNhY3Rpb25JZCwgLypQYXNzUmVmUHRyPENvbHVtbk5hbWVzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGNvbHVtbk5hbWVzLCAvKlBhc3NSZWZQdHI8VmFsdWVzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvbkZh
aWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbEVy
cm9yKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0YWJhc2U7IH0KCiNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAg
ICBjbGFzcyBJbmRleGVkREIgewogICAgcHVibGljOgogICAgICAgIEluZGV4ZWREQihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgZGF0YWJhc2VOYW1lc0xvYWRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkluZGV4ZWRE
Qjo6RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZnJhbWVXaXRoRGF0YWJhc2VOYW1lcyk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBw
cml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluZGV4ZWREQiogaW5kZXhlZGRiKCkgeyByZXR1cm4g
Jm1faW5kZXhlZGRiOyB9CgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICBj
bGFzcyBET01TdG9yYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBET01TdG9yYWdlKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBhZGRET01TdG9yYWdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFnZTo6RW50
cnk+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQg
dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgp
IHsgcmV0dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsK
ICAgIHB1YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlv
bkNhY2hlU3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlk
JiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50
IHN0YXR1cyk7CiAgICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxp
bmUpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBw
bGljYXRpb25jYWNoZTsgfQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVT
eXN0ZW0gewogICAgcHVibGljOgogICAgICAgIEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5c3Rl
bSgpIHsgcmV0dXJuICZtX2ZpbGVzeXN0ZW07IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNU
RU0pCiAgICBjbGFzcyBET00gewogICAgcHVibGljOgogICAgICAgIERPTShJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9j
dW1lbnRVcGRhdGVkKCk7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ25v
ZGVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNldENoaWxkTm9kZXMuCiAgICAgICAgY2xhc3Mg
Tm9kZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgIE5vZGVzKCkgeyB9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVt
KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4gdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2Rlcz4gY3JlYXRlKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlcygpKTsKICAgICAgICAgICAgfQogICAgICAg
IH07CgogICAgICAgIHZvaWQgc2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIC8qUGFzc1JlZlB0
cjxOb2Rlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2Rlcyk7CiAgICAgICAgdm9p
ZCBhdHRyaWJ1dGVNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgICAgIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBu
YW1lICdub2RlSWRzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IGlubGluZVN0eWxlSW52YWxpZGF0
ZWQuCiAgICAgICAgY2xhc3MgTm9kZUlkcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgTm9kZUlkcygpIHsgfQoKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgIHZvaWQgYWRkSXRlbShpbnQgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHRoaXMtPnB1c2hOdW1iZXIodmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlSWRzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVJZHMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoK
ICAgICAgICB2b2lkIGlubGluZVN0eWxlSW52YWxpZGF0ZWQoLypQYXNzUmVmUHRyPE5vZGVJZHM+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZUlkcyk7CiAgICAgICAgdm9pZCBjaGFy
YWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRh
KTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUNvdW50VXBkYXRlZChpbnQgbm9kZUlkLCBpbnQgY2hp
bGROb2RlQ291bnQpOwogICAgICAgIHZvaWQgY2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5v
ZGVJZCwgaW50IHByZXZpb3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSk7CiAgICAgICAgdm9pZCBj
aGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnROb2RlSWQsIGludCBub2RlSWQpOwogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET00qIGRvbSgp
IHsgcmV0dXJuICZtX2RvbTsgfQoKICAgIGNsYXNzIENTUyB7CiAgICBwdWJsaWM6CiAgICAgICAg
Q1NTKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDU1MqIGNzcygpIHsgcmV0
dXJuICZtX2NzczsgfQoKICAgIGNsYXNzIFRpbWVsaW5lIHsKICAgIHB1YmxpYzoKICAgICAgICBU
aW1lbGluZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgZXZlbnRSZWNvcmRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWNvcmQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBUaW1lbGluZSogdGltZWxpbmUoKSB7IHJldHVybiAmbV90aW1lbGluZTsgfQoKI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRGVidWdnZXIgewogICAgcHVi
bGljOgogICAgICAgIERlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBnbG9iYWxPYmplY3RDbGVhcmVkKCk7CiAg
ICAgICAgdm9pZCBzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNj
cmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQg
c3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBj
b25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFw
VVJMKTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgICAgdm9pZCBicmVha3BvaW50UmVz
b2x2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKTsKICAg
ICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnY2FsbEZyYW1lcycgd2hpbGUgZ2Vu
ZXJhdGluZyBldmVudCBwYXVzZWQuCiAgICAgICAgY2xhc3MgQ2FsbEZyYW1lcyA6IHB1YmxpYyBJ
bnNwZWN0b3JBcnJheSB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgQ2FsbEZyYW1lcygp
IHsgfQoKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiB2YWx1ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxGcmFtZXM+IGNyZWF0ZSgpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FsbEZyYW1lcygpKTsKICAgICAgICAgICAg
fQogICAgICAgIH07CgogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFz
b24nIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAgIHN0cnVjdCBSZWFzb24g
ewogICAgICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICAgICAgWEhSID0gNSwKICAgICAg
ICAgICAgICAgIERPTSA9IDYwLAogICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciA9IDYxLAog
ICAgICAgICAgICAgICAgRXhjZXB0aW9uID0gNjIsCiAgICAgICAgICAgICAgICBPdGhlciA9IDI1
LAogICAgICAgICAgICB9OwogICAgICAgIH07IC8vIHN0cnVjdCBSZWFzb24KCiAgICAgICAgdm9p
ZCBwYXVzZWQoLypQYXNzUmVmUHRyPENhbGxGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gY2FsbEZyYW1lcywgLypSZWFzb246OkVudW0qLyBjb25zdCBTdHJpbmcmIHJlYXNvbiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAgIHZvaWQgcmVzdW1lZCgp
OwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBEZWJ1Z2dlciogZGVidWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NRGVidWdn
ZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
RE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7IH0KCiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAgICAgIFByb2Zp
bGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBhZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBoZWFkZXIpOwogICAgICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1bmsoaW50IHVpZCwgY29u
c3QgU3RyaW5nJiBjaHVuayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFwU25hcHNob3QoaW50IHVp
ZCk7CiAgICAgICAgdm9pZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpOwog
ICAgICAgIHZvaWQgcmVzZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQgcmVwb3J0SGVhcFNuYXBz
aG90UHJvZ3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVyKiBwcm9maWxlcigpIHsg
cmV0dXJuICZtX3Byb2ZpbGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lkIHdvcmtl
clRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZy
b21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7CiAgICAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2Vy
KCkgeyByZXR1cm4gJm1fd29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpwcml2
YXRlOgogICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIEluc3BlY3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9yeSBtX21lbW9yeTsKICAg
IFBhZ2UgbV9wYWdlOwogICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBDb25zb2xlIG1fY29uc29s
ZTsKICAgIE5ldHdvcmsgbV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIERh
dGFiYXNlIG1fZGF0YWJhc2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICBJbmRleGVkREIgbV9pbmRleGVkZGI7CiNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIERPTVN0b3JhZ2UgbV9kb21zdG9yYWdlOwog
ICAgQXBwbGljYXRpb25DYWNoZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAgICBGaWxlU3lzdGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlmIC8vIEVOQUJMRShGSUxF
X1NZU1RFTSkKICAgIERPTSBtX2RvbTsKICAgIENTUyBtX2NzczsKICAgIFRpbWVsaW5lIG1fdGlt
ZWxpbmU7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERlYnVnZ2VyIG1fZGVi
dWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1Z2dlcjsKI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICBQcm9maWxlciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIFdvcmtlciBtX3dvcmtlcjsKI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp9OwoKI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCgp9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVu
ZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123603</attachid>
            <date>2012-01-23 12:59:39 -0800</date>
            <delta_ts>2012-01-23 12:59:39 -0800</delta_ts>
            <desc>Sample of new InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>47378</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
cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50Iik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVySWQpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkwpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3RhY2tUcmFjZSkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZSk7CiAgICBpZiAo
cmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVkaXJl
Y3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVxdWVzdFdpbGxCZVNlbnRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFNlcnZlZEZy
b21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RT
ZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3Jr
LnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9t
Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAo
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0U2VydmVkRnJvbUNhY2hlTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpy
ZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJO
ZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
bG9hZGVySWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0
YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdHlw
ZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2UiLCByZXNwb25zZSk7CiAg
ICByZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VSZWNlaXZl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0
d29yazo6ZGF0YVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFM
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
YXRhUmVjZWl2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLmRhdGFSZWNl
aXZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIs
IHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZGF0YUxlbmd0aCIsIGRh
dGFMZW5ndGgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuY29kZWREYXRhTGVuZ3Ro
IiwgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoZGF0YVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpOZXR3b3JrOjpsb2FkaW5nRmluaXNoZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5p
c2hlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6bG9hZGluZ0ZhaWxlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1
ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0
IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCkKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbG9hZGluZ0ZhaWxlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIk5ldHdvcmsubG9hZGluZ0ZhaWxlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygiZXJyb3JUZXh0IiwgZXJyb3JUZXh0KTsKICAgIGlmIChjYW5jZWxlZCkKICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEJvb2xlYW4oImNhbmNlbGVkIiwgKmNhbmNlbGVkKTsKICAgIGxvYWRp
bmdGYWlsZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChsb2FkaW5nRmFpbGVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVl
c3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3Vy
Y2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hl
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5yZXF1ZXN0U2VydmVkRnJvbU1l
bW9yeUNhY2hlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJl
cXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9h
ZGVySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1l
bnRVUkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFt
cCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgiaW5pdGlhdG9yIiwgaW5pdGlhdG9yKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNvdXJjZSIsIHJlc291cmNlKTsKICAgIHJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVl
c3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlcXVlc3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tldFdpbGxTZW5k
SGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiTmV0d29yay53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElk
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAgIHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9u
c2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2Nr
ZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2Vp
dmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJ
ZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwg
dGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHJlc3Bv
bnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2Nr
ZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJOZXR3b3JrLndlYlNvY2tldENyZWF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHdlYlNvY2tldENyZWF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldENsb3NlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGRvdWJsZSB0aW1lc3RhbXApCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHdlYlNvY2tl
dENsb3NlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q2xvc2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRDbG9z
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0
aW1lc3RhbXApOwogICAgd2ViU29ja2V0Q2xvc2VkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2Vi
U29ja2V0Q2xvc2VkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNlOjphZGREYXRhYmFzZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGFkZERhdGFiYXNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRE
YXRhYmFzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLmFkZERhdGFiYXNl
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImRhdGFiYXNlIiwg
ZGF0YWJhc2UpOwogICAgYWRkRGF0YWJhc2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGREYXRh
YmFzZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
RGF0YWJhc2U6OnNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBh
c3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1u
TmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc3FsVHJhbnNhY3Rp
b25TdWNjZWVkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5zcWxUcmFu
c2FjdGlvblN1Y2NlZWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJ0cmFuc2FjdGlvbklkIiwgdHJhbnNhY3Rpb25JZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyIsIGNvbHVtbk5hbWVzKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoInZhbHVlcyIsIHZhbHVlcyk7CiAgICBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3Nh
Z2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6c3FsVHJhbnNh
Y3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzcWxFcnJvcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25G
YWlsZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0
aW9uRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25GYWlsZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigi
dHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIiwgc3FsRXJyb3IpOwogICAgc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbmRleGVkREI6OmRhdGFiYXNl
TmFtZXNMb2FkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkZyYW1lV2l0
aERhdGFiYXNlTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lV2l0aERh
dGFiYXNlTmFtZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlTmFtZXNM
b2FkZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRhdGFiYXNlTmFt
ZXNMb2FkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbmRleGVkREIuZGF0YWJhc2VO
YW1lc0xvYWRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJm
cmFtZVdpdGhEYXRhYmFzZU5hbWVzIiwgZnJhbWVXaXRoRGF0YWJhc2VOYW1lcyk7CiAgICBkYXRh
YmFzZU5hbWVzTG9hZGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZGF0YWJhc2VOYW1lc0xvYWRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFn
ZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBzdG9yYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhZGRET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBh
ZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NU3RvcmFnZS5hZGRE
T01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInN0
b3JhZ2UiLCBzdG9yYWdlKTsKICAgIGFkZERPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChhZGRET01TdG9yYWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpET01TdG9yYWdlOjp1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET01TdG9yYWdlLnVwZGF0ZURPTVN0b3JhZ2UiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RvcmFnZUlkIiwgc3RvcmFnZUlkKTsK
ICAgIHVwZGF0ZURPTVN0b3JhZ2VNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpB
cHBsaWNhdGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cykKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQXBwbGljYXRpb25DYWNoZS5hcHBsaWNhdGlvbkNhY2hl
U3RhdHVzVXBkYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibWFuaWZl
c3RVUkwiLCBtYW5pZmVzdFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhdHVz
Iiwgc3RhdHVzKTsKICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkFwcGxpY2F0aW9uQ2FjaGU6Om5l
dHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGluZSkKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgbmV0d29ya1N0YXRlVXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
IiwgIkFwcGxpY2F0aW9uQ2FjaGUubmV0d29ya1N0YXRlVXBkYXRlZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNOb3dPbmxpbmUiLCBpc05vd09ubGluZSk7
CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobmV0d29ya1N0
YXRlVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmRvY3VtZW50VXBkYXRlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRvY3VtZW50VXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmRvY3VtZW50
VXBkYXRlZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZG9jdW1lbnRV
cGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpET006OnNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAvKlBhc3NSZWZQdHI8Tm9kZXM+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHNldENoaWxkTm9kZXNNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNldENoaWxkTm9kZXNNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uc2V0Q2hp
bGROb2RlcyIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJl
bnRJZCIsIHBhcmVudElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVzIiwgbm9k
ZXMpOwogICAgc2V0Q2hpbGROb2Rlc01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNldENoaWxkTm9k
ZXNNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRP
TTo6YXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhdHRyaWJ1dGVN
b2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRl
TW9kaWZpZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uYXR0cmlidXRlTW9kaWZp
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwg
bm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CiAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICBhdHRyaWJ1dGVNb2Rp
ZmllZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZVJl
bW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NLmF0dHJpYnV0ZVJlbW92ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJu
YW1lIiwgbmFtZSk7CiAgICBhdHRyaWJ1dGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6RE9NOjppbmxpbmVTdHlsZUludmFsaWRhdGVkKC8qUGFzc1JlZlB0cjxOb2Rl
SWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlubGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uaW5saW5lU3R5bGVJbnZhbGlkYXRlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBub2RlSWRzKTsKICAgIGlu
bGluZVN0eWxlSW52YWxpZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbmxpbmVTdHlsZUlu
dmFsaWRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpET006OmNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IGNoYXJhY3RlckRhdGEpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoYXJhY3RlckRh
dGFNb2RpZmllZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hhcmFj
dGVyRGF0YU1vZGlmaWVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoYXJhY3Rl
ckRhdGFNb2RpZmllZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJub2RlSWQiLCBub2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImNoYXJhY3Rl
ckRhdGEiLCBjaGFyYWN0ZXJEYXRhKTsKICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVDb3VudFVwZGF0
ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGNoaWxkTm9kZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIiwgIkRPTS5jaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIGNoaWxkTm9kZUNvdW50KTsKICAgIGNoaWxkTm9k
ZUNvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNoaWxkTm9kZUNvdW50VXBkYXRl
ZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9N
OjpjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBub2RlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZE5vZGVJ
bnNlcnRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2Rl
SW5zZXJ0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlSW5zZXJ0
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50Tm9k
ZUlkIiwgcGFyZW50Tm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwcmV2aW91
c05vZGVJZCIsIHByZXZpb3VzTm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJu
b2RlIiwgbm9kZSk7CiAgICBjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpET006OmNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50
IG5vZGVJZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgY2hpbGROb2RlUmVtb3ZlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5jaGlsZE5vZGVSZW1vdmVkIik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInBhcmVudE5vZGVJZCIsIHBhcmVu
dE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsK
ICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVSZW1v
dmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpD
U1M6Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiQ1NTLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6VGltZWxpbmU6OmV2ZW50UmVjb3Jk
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBldmVudFJlY29yZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBldmVudFJlY29yZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiVGltZWxpbmUu
ZXZlbnRSZWNvcmRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJyZWNvcmQiLCByZWNvcmQpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGV2ZW50UmVjb3JkZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpn
bG9iYWxPYmplY3RDbGVhcmVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2xvYmFs
T2JqZWN0Q2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZ2xv
YmFsT2JqZWN0Q2xlYXJlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLmds
b2JhbE9iamVjdENsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpzY3JpcHRQYXJzZWQoLypjb25zdCBUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OlNjcmlwdElkJiovIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBp
bnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQ
YXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNjcmlwdFBhcnNl
ZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlw
dElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFydENvbHVtbik7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAgICBpZiAoaXNDb250ZW50U2NyaXB0KQog
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNDb250ZW50U2NyaXB0IiwgKmlzQ29u
dGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic291cmNlTWFwVVJMIiwg
c291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNj
cmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVn
Z2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jp
cHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0
YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZXJyb3JM
aW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvck1lc3Nh
Z2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0K
CnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpicmVha3BvaW50UmVzb2x2ZWQoLypj
b25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCIpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBicmVha3BvaW50SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImxvY2F0aW9uIiwgbG9jYXRpb24pOwogICAgYnJl
YWtwb2ludFJlc29sdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3Qp
OwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYnJlYWtwb2ludFJlc29sdmVk
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1
Z2dlcjo6cGF1c2VkKC8qUGFzc1JlZlB0cjxDYWxsRnJhbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVj
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
TkFCTEUoV09SS0VSUykKCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewoKY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICJEb2N1bWVudCIsCiAgICAiU3R5bGVz
aGVldCIsCiAgICAiSW1hZ2UiLAogICAgIkZvbnQiLAogICAgIlNjcmlwdCIsCiAgICAiWEhSIiwK
ICAgICJXZWJTb2NrZXQiLAogICAgIk90aGVyIiwKICAgICJvYmplY3QiLAogICAgImZ1bmN0aW9u
IiwKICAgICJ1bmRlZmluZWQiLAogICAgInN0cmluZyIsCiAgICAibnVtYmVyIiwKICAgICJib29s
ZWFuIiwKICAgICJhcnJheSIsCiAgICAibnVsbCIsCiAgICAibm9kZSIsCiAgICAicmVnZXhwIiwK
ICAgICJkYXRlIiwKICAgICJodG1sIiwKICAgICJ3bWwiLAogICAgInhtbCIsCiAgICAiamF2YXNj
cmlwdCIsCiAgICAibmV0d29yayIsCiAgICAiY29uc29sZS1hcGkiLAogICAgIm90aGVyIiwKICAg
ICJ0aXAiLAogICAgImxvZyIsCiAgICAid2FybmluZyIsCiAgICAiZXJyb3IiLAogICAgImRlYnVn
IiwKICAgICJkaXIiLAogICAgImRpcnhtbCIsCiAgICAidHJhY2UiLAogICAgInN0YXJ0R3JvdXAi
LAogICAgInN0YXJ0R3JvdXBDb2xsYXBzZWQiLAogICAgImVuZEdyb3VwIiwKICAgICJhc3NlcnQi
LAogICAgInBhcnNlciIsCiAgICAic2NyaXB0IiwKICAgICJ1c2VyIiwKICAgICJ1c2VyLWFnZW50
IiwKICAgICJpbnNwZWN0b3IiLAogICAgInJlZ3VsYXIiLAogICAgImFjdGl2ZSIsCiAgICAiaW5h
Y3RpdmUiLAogICAgImRpc2FibGVkIiwKICAgICJzdHlsZSIsCiAgICAibWVkaWFSdWxlIiwKICAg
ICJpbXBvcnRSdWxlIiwKICAgICJsaW5rZWRTaGVldCIsCiAgICAiaW5saW5lU2hlZXQiLAogICAg
Imdsb2JhbCIsCiAgICAibG9jYWwiLAogICAgIndpdGgiLAogICAgImNsb3N1cmUiLAogICAgImNh
dGNoIiwKICAgICJzdWJ0cmVlLW1vZGlmaWVkIiwKICAgICJhdHRyaWJ1dGUtbW9kaWZpZWQiLAog
ICAgIm5vZGUtcmVtb3ZlZCIsCiAgICAiRE9NIiwKICAgICJFdmVudExpc3RlbmVyIiwKICAgICJl
eGNlcHRpb24iCn07CgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKfQoKfSAvLyBuYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIKCiNpZiAhQVNTRVJUX0RJU0FCTEVECnN0YXRpYyB2b2lkIGFzc2VydEFueShJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCnsKICAgIC8vIE5vLW9wLgp9CgoKc3RhdGljIHZvaWQgYXNzZXJ0
U3RyaW5nKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKewogICAgU3RyaW5nIHY7CiAgICBib29sIGNh
c3RSZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnYpOwogICAgQVNTRVJUKGNhc3RSZXMpOwp9CgoKc3Rh
dGljIHZvaWQgYXNzZXJ0SW50KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKewogICAgaW50IHY7CiAg
ICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOwogICAgQVNTRVJUKGNhc3RSZXMp
Owp9CgoKdm9pZCBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpUeXBlOjphc3Nl
cnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQp7CiAgICBXVEY6OlN0cmluZyBz
OwogICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7CiAgICBBU1NFUlQoY2Fz
dF9yZXMpOwogICAgQVNTRVJUKHMgPT0gIm9iamVjdCIgfHwgcyA9PSAiZnVuY3Rpb24iIHx8IHMg
PT0gInVuZGVmaW5lZCIgfHwgcyA9PSAic3RyaW5nIiB8fCBzID09ICJudW1iZXIiIHx8IHMgPT0g
ImJvb2xlYW4iKTsKfQoKCnZvaWQgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6
U3VidHlwZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKewogICAg
V1RGOjpTdHJpbmcgczsKICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpOwog
ICAgQVNTRVJUKGNhc3RfcmVzKTsKICAgIEFTU0VSVChzID09ICJhcnJheSIgfHwgcyA9PSAibnVs
bCIgfHwgcyA9PSAibm9kZSIgfHwgcyA9PSAicmVnZXhwIiB8fCBzID09ICJkYXRlIik7Cn0KCgp2
b2lkIFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OmFzc2VydENvcnJlY3RWYWx1
ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9i
amVjdDsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKICAgIEFT
U0VSVChjYXN0UmVzKTsKICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQ7CiAgICBpdCA9
IG9iamVjdC0+ZmluZCgidHlwZSIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwog
ICAgVHlwZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKGl0LT5zZWNvbmQuZ2V0KCkpOwogICAgaW50IGNv
dW50ID0gMTsKICAgIGl0ID0gb2JqZWN0LT5maW5kKCJzdWJ0eXBlIik7CiAgICBpZiAoaXQgIT0g
b2JqZWN0LT5lbmQoKSkgewogICAgICAgIFN1YnR5cGU6OmFzc2VydENvcnJlY3RWYWx1ZShpdC0+
c2Vjb25kLmdldCgpKTsKICAgICAgICArK2NvdW50OwogICAgfQogICAgaXQgPSBvYmplY3QtPmZp
bmQoImNsYXNzTmFtZSIpOwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgICAgICBh
c3NlcnRTdHJpbmcoaXQtPnNlY29uZC5nZXQoKSk7CiAgICAgICAgKytjb3VudDsKICAgIH0KICAg
IGl0ID0gb2JqZWN0LT5maW5kKCJ2YWx1ZSIpOwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkp
IHsKICAgICAgICBhc3NlcnRBbnkoaXQtPnNlY29uZC5nZXQoKSk7CiAgICAgICAgKytjb3VudDsK
ICAgIH0KICAgIGl0ID0gb2JqZWN0LT5maW5kKCJkZXNjcmlwdGlvbiIpOwogICAgaWYgKGl0ICE9
IG9iamVjdC0+ZW5kKCkpIHsKICAgICAgICBhc3NlcnRTdHJpbmcoaXQtPnNlY29uZC5nZXQoKSk7
CiAgICAgICAgKytjb3VudDsKICAgIH0KICAgIGl0ID0gb2JqZWN0LT5maW5kKCJvYmplY3RJZCIp
OwogICAgaWYgKGl0ICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgICAgICBhc3NlcnRTdHJpbmcoaXQt
PnNlY29uZC5nZXQoKSk7CiAgICAgICAgKytjb3VudDsKICAgIH0KICAgIEFTU0VSVChjb3VudCA9
PSBvYmplY3QtPnNpemUoKSk7Cn0KCgp2b2lkIFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ6
OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVj
dCgmb2JqZWN0KTsKICAgIEFTU0VSVChjYXN0UmVzKTsKICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgaXQ7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgic3R5bGVTaGVldElkIik7CiAgICBBU1NF
UlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICBhc3NlcnRTdHJpbmcoaXQtPnNlY29uZC5nZXQo
KSk7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgib3JkaW5hbCIpOwogICAgQVNTRVJUKGl0ICE9IG9i
amVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0SW50KGl0LT5zZWNvbmQuZ2V0KCkpOwogICAgaW50IGNv
dW50ID0gMjsKICAgIEFTU0VSVChjb3VudCA9PSBvYmplY3QtPnNpemUoKSk7Cn0KCgp2b2lkIFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGVJZDo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgYm9v
bCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgQVNTRVJUKGNhc3RSZXMp
OwogICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdDsKICAgIGl0ID0gb2JqZWN0LT5maW5k
KCJzdHlsZVNoZWV0SWQiKTsKICAgIEFTU0VSVChpdCAhPSBvYmplY3QtPmVuZCgpKTsKICAgIGFz
c2VydFN0cmluZyhpdC0+c2Vjb25kLmdldCgpKTsKICAgIGl0ID0gb2JqZWN0LT5maW5kKCJvcmRp
bmFsIik7CiAgICBBU1NFUlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICBhc3NlcnRJbnQoaXQt
PnNlY29uZC5nZXQoKSk7CiAgICBpbnQgY291bnQgPSAyOwogICAgQVNTRVJUKGNvdW50ID09IG9i
amVjdC0+c2l6ZSgpKTsKfQoKCnZvaWQgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6
YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0
KCZvYmplY3QpOwogICAgQVNTRVJUKGNhc3RSZXMpOwogICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdDsKICAgIGl0ID0gb2JqZWN0LT5maW5kKCJzY3JpcHRJZCIpOwogICAgQVNTRVJUKGl0
ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgYXNzZXJ0U3RyaW5nKGl0LT5zZWNvbmQuZ2V0KCkpOwog
ICAgaXQgPSBvYmplY3QtPmZpbmQoImxpbmVOdW1iZXIiKTsKICAgIEFTU0VSVChpdCAhPSBvYmpl
Y3QtPmVuZCgpKTsKICAgIGFzc2VydEludChpdC0+c2Vjb25kLmdldCgpKTsKICAgIGludCBjb3Vu
dCA9IDI7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgiY29sdW1uTnVtYmVyIik7CiAgICBpZiAoaXQg
IT0gb2JqZWN0LT5lbmQoKSkgewogICAgICAgIGFzc2VydEludChpdC0+c2Vjb25kLmdldCgpKTsK
ICAgICAgICArK2NvdW50OwogICAgfQogICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgp
KTsKfQoKCnZvaWQgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU6OlNjb3BlQ2hhaW46
OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXk7CiAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgm
YXJyYXkpOwogICAgQVNTRVJUKGNhc3RSZXMpOwogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpT
Y29wZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKGFycmF5LT5nZXQoaSkuZ2V0KCkpOwogICAgfQp9CgoK
dm9pZCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZTo6YXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0OwogICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgQVNT
RVJUKGNhc3RSZXMpOwogICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdDsKICAgIGl0ID0g
b2JqZWN0LT5maW5kKCJjYWxsRnJhbWVJZCIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5k
KCkpOwogICAgYXNzZXJ0U3RyaW5nKGl0LT5zZWNvbmQuZ2V0KCkpOwogICAgaXQgPSBvYmplY3Qt
PmZpbmQoImZ1bmN0aW9uTmFtZSIpOwogICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpOwog
ICAgYXNzZXJ0U3RyaW5nKGl0LT5zZWNvbmQuZ2V0KCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQo
ImxvY2F0aW9uIik7CiAgICBBU1NFUlQoaXQgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICBUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjphc3NlcnRDb3JyZWN0VmFsdWUoaXQtPnNlY29uZC5n
ZXQoKSk7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgic2NvcGVDaGFpbiIpOwogICAgQVNTRVJUKGl0
ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgU2NvcGVDaGFpbjo6YXNzZXJ0Q29ycmVjdFZhbHVlKGl0
LT5zZWNvbmQuZ2V0KCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQoInRoaXMiKTsKICAgIEFTU0VS
VChpdCAhPSBvYmplY3QtPmVuZCgpKTsKICAgIFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q6OmFzc2VydENvcnJlY3RWYWx1ZShpdC0+c2Vjb25kLmdldCgpKTsKICAgIGludCBjb3Vu
dCA9IDU7CiAgICBBU1NFUlQoY291bnQgPT0gb2JqZWN0LT5zaXplKCkpOwp9CgoKdm9pZCBUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OlNjb3BlOjpUeXBlOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVj
dG9yVmFsdWUqIHZhbHVlKQp7CiAgICBXVEY6OlN0cmluZyBzOwogICAgYm9vbCBjYXN0X3JlcyA9
IHZhbHVlLT5hc1N0cmluZygmcyk7CiAgICBBU1NFUlQoY2FzdF9yZXMpOwogICAgQVNTRVJUKHMg
PT0gImdsb2JhbCIgfHwgcyA9PSAibG9jYWwiIHx8IHMgPT0gIndpdGgiIHx8IHMgPT0gImNsb3N1
cmUiIHx8IHMgPT0gImNhdGNoIik7Cn0KCgp2b2lkIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2Nv
cGU6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09i
amVjdCgmb2JqZWN0KTsKICAgIEFTU0VSVChjYXN0UmVzKTsKICAgIEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgaXQ7CiAgICBpdCA9IG9iamVjdC0+ZmluZCgidHlwZSIpOwogICAgQVNTRVJUKGl0
ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgVHlwZTo6YXNzZXJ0Q29ycmVjdFZhbHVlKGl0LT5zZWNv
bmQuZ2V0KCkpOwogICAgaXQgPSBvYmplY3QtPmZpbmQoIm9iamVjdCIpOwogICAgQVNTRVJUKGl0
ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dDo6YXNzZXJ0Q29ycmVjdFZhbHVlKGl0LT5zZWNvbmQuZ2V0KCkpOwogICAgaW50IGNvdW50ID0g
MjsKICAgIEFTU0VSVChjb3VudCA9PSBvYmplY3QtPnNpemUoKSk7Cn0KCgoKI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123610</attachid>
            <date>2012-01-23 13:30:37 -0800</date>
            <delta_ts>2012-01-23 13:39:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76676-20120124013035.patch</filename>
            <type>text/plain</type>
            <size>56676</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZjM3YmIyZjk1OThiZDgyODg4ZGM3MDIzZDQ3MmFl
YjkwYzUzM2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMS0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogYWRkIG9wdGlvbmFsIHJ1bnRpbWUgdmFsaWRh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVy
YXRvciBhbGdvcml0aG0gaXMgcmVkb25lIHNpZ25pZmljYW50bHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VU
eXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RfaW1wbCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZyk6Cisg
ICAgICAgIChSYXdUeXBlcy5TdHJpbmcuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKToKKyAgICAg
ICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAg
ICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLkludC5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIpOgorICAgICAgICAoUmF3VHlwZXMuTnVt
YmVyLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkJvb2wpOgor
ICAgICAgICAoUmF3VHlwZXMuQm9vbC5nZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QpOgorICAgICAg
ICAoUmF3VHlwZXMuQm9vbC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXMuT2JqZWN0KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3VHlwZXMu
QW55LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAg
ICAgICAgKFJhd1R5cGVzLkFycmF5LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAg
IChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
VHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAg
ICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcucmVzb2x2ZV9pbm5lcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGlu
Zy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3Mu
Y3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1C
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJp
bmcpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFp
blN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6Cisg
ICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluU3RyaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3Rl
eHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBl
ZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZlN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5yZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZlN0cmluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nKToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5k
aW5nLnJlc29sdmVfaW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2Rl
Y2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcucmVzb2x2ZV9pbm5lci5Qcm9wZXJ0eURhdGEpOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcu
cmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRl
X3R5cGVfZGVjbGFyYXRpb25fLkNsYXNzQmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NC
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkNs
YXNzQmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIpOgorICAgICAgICAoZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
Z2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKEFkSG9jVHlw
ZUNvbnRleHRJbXBsLmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRl
eHRJbXBsLmdldF90eXBlX25hbWVfZml4Lk5hbWVGaXgpOgorICAgICAgICAoQWRIb2NUeXBlQ29u
dGV4dEltcGwuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeC5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBZEhvY1R5cGVDb250ZXh0SW1wbC5hZGRfdHlwZSk6CisgICAgICAgIChQbGFpbk9iamVj
dEJpbmRpbmcpOgorICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVfaW5uZXIuQWRIb2NUeXBlQ29u
dGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250
ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZXNvbHZlX2lu
bmVyLkFkSG9jVHlwZUNvbnRleHQuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeCk6CisgICAgICAg
IChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25h
bWVfZml4Lk5hbWVGaXgub3V0cHV0X2NvbW1lbnQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJl
c29sdmVfaW5uZXIuQWRIb2NUeXBlQ29udGV4dC5hZGRfdHlwZSk6CisgICAgICAgIChBcnJheUJp
bmRpbmcucmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEFycmF5QmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfbmFtZSk6CisgICAgICAgIChU
eXBlRGF0YSk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfZG9tYWluX25hbWUpOgorICAgICAgICAo
cmVzb2x2ZV9wYXJhbV90eXBlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QpOgor
ICAgICAgICAoTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChOZWVk
UnVudGltZUNhc3RSZXF1ZXN0LmFja25vd2xlZGdlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2Fz
dFJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKToKKyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzKToK
KyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzLkZvcndhcmRMaXN0ZW5lcik6CisgICAgICAgIChy
ZXNvbHZlX2FsbF90eXBlcy5Gb3J3YXJkTGlzdGVuZXIuYWRkX3R5cGVfZGF0YSk6CisgICAgICAg
IChyZXNvbHZlX2FsbF90eXBlcy5SZXNvbHZlQ29udGV4dCk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkFkSG9jVHlwZUNvbnRleHQp
OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuQWRIb2NUeXBlQ29udGV4dC5hZGRf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lcik6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lci5hZGRfdHlwZV9kYXRhKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkV2
ZW50UmVzb2x2ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuRXZl
bnRHZW5lcmF0ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXMuR2Vu
ZXJhdGVDb250ZXh0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzLmNyZWF0ZV90
eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzLmdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6c2l6ZSk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNGQzNTY2OTY5
NjMzZDRkNjFjYzlhNzVkZmViMjQ0MjYwOWNlMWQ3Zi4uZWVhZDdjNWIzYTY2OGNmNGYyYjNhNzVm
YjU2ZGViYjk5NDY2Y2RmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU2LDYgKzU2LDkgQEAgVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7CiB9CiAKIAorVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFtd
KQorCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5lcyIpCkBAIC0xNzQsNiArMTc3LDggQEAgY2xh
c3MgQ2FwaXRhbGl6ZXI6CiAKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAi
RE9NIiwgIkNTUyJdKQogCitWQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJUX0RJU0FCTEVE
IgorCiAKIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBAY2xhc3NtZXRob2QKQEAgLTI0NSw2
ICsyNTAsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKIAogICAgIGNsYXNzIEJhc2VU
eXBlKG9iamVjdCk6CisgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
CisKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgogICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0
X2NfcGFyYW1fdHlwZQpAQCAtMjU3LDYgKzI2NCwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3Qp
OgogICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAg
IHJldHVybiAiJiIKIAorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHJlcXVlc3Rf
cmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgaWYgbm90IGNscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgUmF3VHlwZXMudHlw
ZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xzKQorICAgICAgICAgICAgICAgIGNs
cy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QoY2xzLCB3cml0ZXIpOgor
ICAgICAgICAgICAgcGFyYW1zID0gY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCkKKyAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdGF0aWMgdm9pZCBhc3NlcnQlcyhJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpXG4iICUgcGFyYW1zLm5hbWUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgJXMgdjtcbiIgJSBwYXJh
bXMudmFyX3R5cGUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hcyVzKCZ2KTtcbiIgJSBwYXJhbXMuYXNfbWV0aG9kX25hbWUpCisgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
XG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4iKQorCisgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
CisgICAgICAgICAgICByZXR1cm4gImFzc2VydCVzIiAlIGNscy5nZXRfdmFsaWRhdGVfbWV0aG9k
X3BhcmFtcygpLm5hbWUKKworICAgIHR5cGVzX3RvX2dlbmVyYXRlX3ZhbGlkYXRvcl8gPSBbXQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZHMoY2xz
LCB3cml0ZXIpOgorICAgICAgICBmb3IgdCBpbiBjbHMudHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRh
dG9yXzoKKyAgICAgICAgICAgIGlmIHQubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgorICAg
ICAgICAgICAgICAgIHQuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcikKKworCiAgICAg
Y2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRl
ZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgpAQCAtMjc5LDYg
KzMxNSwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCiAKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKKyAgICAg
ICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAgICAgICAgICAgIG5hbWUg
PSAiU3RyaW5nIgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gIlN0cmluZyIKKyAgICAgICAg
ICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJTdHJpbmciCisgICAgICAgICAgICByZXR1cm4gVmFs
aWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgi
U3RyaW5nIikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcm
IikKIApAQCAtMjk5LDYgKzM0MywxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAg
ICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCiAK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9w
YXJhbXMoKToKKyAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAg
ICAgICAgICAgIG5hbWUgPSAiSW50IgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gImludCIK
KyAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJOdW1iZXIiCisgICAgICAgICAgICBy
ZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlw
ZSA9IENQYXJhbVR5cGUoImludCIpCiAKICAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgpAQCAt
MzE4LDYgKzM3MCwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0
X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRl
ZCIpCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21l
dGhvZF9wYXJhbXMoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAg
ICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQogCiAgICAg
Y2xhc3MgQm9vbChCYXNlVHlwZSk6CkBAIC0zNDksNiArNDA1LDEwIEBAIGNsYXNzIFJhd1R5cGVz
KG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgog
ICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgorICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJUT0RPIikKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9v
bCIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3Qi
LCAiKiVzIikKIApAQCAtMzgyLDYgKzQ0MiwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgog
ICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJl
dHVybiAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0
ZV9tZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQor
CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IikKIApAQCAtNDExLDYgKzQ3NSwxNyBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKICAgICAg
ICAgICAgIHJldHVybiBUcnVlCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcik6CisgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgic3RhdGljIHZvaWQgYXNzZXJ0QW55KEluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIpCisg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLy8gTm8tb3AuXG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxu
XG4iKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpOgorICAgICAgICAgICAgcmV0dXJuICJhc3NlcnRBbnkiCisKICAgICAg
ICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQog
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IikKIApAQCAtNDQ2LDYgKzUyMSwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAg
ICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVy
biAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9t
ZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQorCiAg
ICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIpCiAKQEAgLTU1Nyw3ICs2MzYsOCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAg
ICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UKLSAgICAg
ICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlID0gIlR5
cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIKKyAgICAgICAgICAgIGZ1
bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBk
ZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzgsNyArNjU4LDggQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxl
LCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAgICAgY2xh
c3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQotICAgICAgICAgICAgZnVs
bF9uYW1lX3ByZWZpeCA9ICIiCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
PSAiIgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBl
X2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTk2LDE0ICs2
NzcsMzEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgaWYgImVudW0iIGluIGpz
b25fdHlwYWJsZToKIAogICAgICAgICAgICAgICAgIGNsYXNzIEVudW1CaW5kaW5nOgotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
Y29kZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZF91c2VyX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KGNscywgcmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdlKCkKKwor
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQorCisgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVf
Z2VuZXJhdG9yKGVudW1fYmluZGluZ19jbHMpOgogICAgICAgICAgICAgICAgICAgICAgICAgI0ZJ
WE1FOiBnZW5lcmF0ZSBhZC1ob2MgZW51bXMgdG9vIG9uY2Ugd2UgZmlndXJlIG91dCBob3cgdG8g
YmV0dGVyIGltcGxlbWVudCB0aGVtIGluIEMrKy4KICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnRfb3V0ID0gaGVscGVyLmlzX2FkX2hvYwogCiAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVt
Il0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCkBAIC02MjUsNiArNzIzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVz
IiAlIGVudW1fcG9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiLFxuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB9O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51
bV9iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IHlldCBpbXBsZW1lbnRlZCIp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
c3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2Vu
ZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52
YWxpZGF0b3Jfd3JpdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGws
IGVudW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBXVEY6OlN0cmluZyBzO1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVChjYXN0X3Jlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgbGVuKGVudW0pID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25fbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50
KGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uX2xpc3QuYXBwZW5kKCJzID09IFwiJXNcIiIgJSBlbnVtX2l0ZW0pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgQVNTRVJUKCVzKTtcbiIgJSBqb2luKGNvbmRpdGlvbl9saXN0LCAiIHx8ICIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCJ9XG5cblxuIikKKworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIlxuXG4iKQpAQCAtNjQwLDggKzc2MSwxMiBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKKyAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQo
Y2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXggKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKIAogICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0
dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgpAQCAtNjU2LDEwICs3ODEsMjYgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6CiAK
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5TdHJpbmc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQi
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Io
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCisgICAgICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKQEAgLTY3NywxMSArODE4LDIzIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICBlbHNlOgogCiAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIFR5cGVkZWZTdHJpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2
ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSYXdUeXBlcy5TdHJpbmcucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVy
YXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2Vu
ZXJhdGVfY29udGV4dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
ZXIud3JpdGVfZG9jKHdyaXRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKQEAg
LTY5OCw2ICs4NTEsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKIAorICAgICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCisKICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nCkBAIC03MDgsNyArODY1LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgog
CiAgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiY29uc3QgJXMlcyYiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQogCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCiAKQEAgLTcxNiwxMSArODczLDcxIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29uX3R5cGFibGU6
CiAKICAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRpbmc6Ci0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVy
YXRvcigpOgorICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQorICAgICAg
ICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisKKyAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNscy5yZXNvbHZlX2RhdGFfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9w
ZXJ0aWVzIl0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQorCisgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9saXN0ID0gW10KKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4g
cHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9w
WyJuYW1lIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0
ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX2ltcGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0
b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQuZm9yd2FyZF9saXN0
ZW5lcikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFByb3BlcnR5RGF0YToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gYmlu
ZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJvcAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0eURhdGEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBSZXNvbHZlRGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3By
b3BlcnRpZXMgPSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJv
cGVydGllcyA9IG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5
cGVzID0gYWRfaG9jX3R5cGVfY29udGV4dC5hZF9ob2NfdHlwZV9saXN0CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIGFkX2hvYyBpbiBhZF9ob2NfdHlwZV9saXN0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkX2hvYy5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4dCkK
KworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nh
c3RfID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgp
CisgICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3QoKQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5tYWluX3Byb3Bl
cnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcu
cmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFs
X3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoY2xhc3NfYmluZGluZ19jbHMp
OgogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNscywgd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKGNscywgd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZV9kYXRhID0gY2xhc3NfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRh
XwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRl
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVk
X3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCkBAIC03MzAsMTQgKzk0NywxMCBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwYWJsZVsicHJv
cGVydGllcyJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGll
cyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRp
ZXMgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwcm9wZXJ0
aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIm9wdGlvbmFsIiBp
biBwIGFuZCBwWyJvcHRpb25hbCJdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMuYXBwZW5kKHApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1haW5fcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGFkX2hvY190eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZXM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hv
Y190eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5
cGVfd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKICIiIiAgICBlbnVtIHsKQEAgLTc0NSwx
MCArOTU4LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICIiIikKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zID0gW10KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbGVuKG1haW5fcHJvcGVydGllcykgPiAwOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykg
PiAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gbWFpbl9wcm9wZXJ0aWVzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0
YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocFsibmFtZSJdKSArICJTZXQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihw
cm9wX2RhdGEucFsibmFtZSJdKSArICJTZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
ID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCkBAIC03ODAsMTIgKzk5MywxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAiIiIgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsi
bmFtZSJdCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBl
X2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBp
biBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRp
bGluZSgiIiIKQEAgLTgwNCwxMCArMTAxNSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1z
W3Bvc10pKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcyArPSAxCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgpAQCAtODI5LDggKzEwMzYsOCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLypcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3Vs
dCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJc
biAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAg
ICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKQEAgLTg0MCwxMSAr
MTA0Nyw5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICB9CiAiIiIgJSBjbGFzc19uYW1lKQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG9wdGlvbmFsX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUg
PSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhl
ZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2Jp
bmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29udGV4dF9kb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBy
b3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVs
X2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcGFyYW1fdHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9k
ZXMocGFyYW1fdHlwZV9iaW5kaW5nKToKQEAgLTg1MiwzOCArMTA1Nyw1OCBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVf
dGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhc
IiVzXCIsICVzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJf
bmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRf
c2V0dGVyX25hbWUoKSwgcHJvcF9kYXRhLnBbIm5hbWUiXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xp
c3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJf
bmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdDo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFt
ZSwgd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmRfbGlzdGVuZXIg
PSBmb3J3YXJkX2xpc3RlbmVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihz
ZWxmLnByb3BlcnR5X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNs
YXNzX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUg
Y2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZf
TkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNc
biIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZiglcykg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTtcbiIgJSBjbGFz
c19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm9iamVj
dCkpO1xuIiAlIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY2xhc3NfYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1
ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZE
RUZfTkFNRSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVz
JXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBl
ci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29s
IGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJU
X1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGl0O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICBpdCA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIHByb3BfZGF0YS5wWyJuYW1lIl0pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpO1xuIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICAlcyhpdC0+c2Vjb25kLmdldCgpKTtcbiIgJSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
LmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBjb3VudCA9ICVzO1xu
IiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSkKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9u
YWxfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpdCA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xu
IiAlIHByb3BfZGF0YS5wWyJuYW1lIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaWYgKGl0ICE9IG9iamVjdC0+
ZW5kKCkpIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKGl0LT5zZWNvbmQuZ2V0KCkpO1xuIiAl
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgKytjb3VudDtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4i
KQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29t
bWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnJXMnIHdoaWxl
IGdlbmVyYXRpbmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2VsZi5jbGFzc19uYW1l
KSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVGaXgK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBl
X2J1aWxkZXIoc2VsZiwgY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHNlbGYud3Jp
dGVyLCBzZWxmLmZvcndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6CkBAIC05MDIsOSArMTEyNywxMyBAQCBjbGFz
cyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2Vu
ZXJhdG9yCiAKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlw
ZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKICAgICAgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190
eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4ICsgZml4ZWRfdHlwZV9uYW1l
LmNsYXNzX25hbWUgKyAiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFzc1Jl
ZlB0cjwiICsgaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFt
ZS5jbGFzc19uYW1lICsgIj4iCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAog
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRl
cm4oKToKQEAgLTkxNCwxNCArMTE0Myw1MSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAgICAgICAgICBjbGFz
cyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCByZXNvbHZlX2NvbnRleHQsIGFk
X2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4KToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9wZXJ0eV9uYW1lCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFtZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250ZXh0ID0gcmVzb2x2ZV9jb250
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZF9ob2NfdHlwZV9saXN0ID0g
YWRfaG9jX3R5cGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFp
bmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCArIGNsYXNzX25h
bWUgKyAiOjoiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2Zp
eChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0eV9uYW1l
LCBzZWxmLmNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5hbWVGaXgKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNlbGYsIGJp
bmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlz
dC5hcHBlbmQoYmluZGluZykKKwogICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRpbmcK
ICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVjdEJp
bmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2Rl
X2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVuc3VwcG9ydGVkIikKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCkBA
IC05MzgsMTIgKzEyMDQsNjcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICBlbGlmIGpz
b25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6CiAKICAgICAgICAgICAgIGNsYXNzIEFycmF5
QmluZGluZzoKLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8g
PSBOb25lCisgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFs
c2UKKworICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBy
ZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
aWYgY2xzLnJlc29sdmVfZGF0YV86CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQorICAgICAgICAgICAgICAgICAg
ICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX25hbWUgPSAiSXRlbSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
YW1lRml4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5kKGJpbmRpbmcpCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShq
c29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRl
eHQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisKKyAgICAgICAgICAg
ICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UocmVzb2x2ZV9jb250ZXh0LmZv
cndhcmRfbGlzdGVuZXIpCisKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgUmVzb2x2ZURhdGE6
CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0ZW1fYmluZGlu
ZworICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IGFkX2hvY190eXBl
cworCisgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEK
KworICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0LnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQorCisgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9y
dW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKKworICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAorICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChj
bHMpOgorICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Rf
ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVf
YmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGFy
cmF5X2JpbmRpbmdfY2xzKToKIAogICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJh
dG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlz
dGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRl
cih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCkBAIC05NTYs
MjcgKzEyNzcsMTQgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxl
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGFycmF5X2JpbmRp
bmdfY2xzLnJlc29sdmVfZGF0YV8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBBZEhvY1R5cGVDb250ZXh0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfbmFtZSA9ICJJdGVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBhZF9ob2NfdHlwZSBpbiByZXNvbHZlX2RhdGEuYWRfaG9jX3R5cGVfbGlzdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5n
ZXRfY29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBj
b2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVf
Z2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVy
YXRlX2NvbnRleHQpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcihjb2RlX2dlbmVyYXRvcik6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZm9yd2FyZF9saXN0ZW5lcikK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IHJl
c29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25h
bWUsIEFkSG9jVHlwZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSBSYXdU
eXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKGl0ZW1fdHlwZV9iaW5kaW5nKToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQpAQCAtOTkyLDkg
KzEzMDAsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgJXMoKSk7XG4i
ICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3Io
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9y
d2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhcnJheV9iaW5k
aW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9O
QU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlm
ICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRv
cl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1l
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCJ7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
Ym9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyhhcnJheS0+Z2V0KGkp
LmdldCgpKTtcbiIgJSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG5cblxuIikKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCkBAIC0xMDE1LDkgKzEzMzUs
MTMgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
b2RlR2VuZXJhdG9yCiAKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAg
ICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1l
LmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywg
b3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4i
ICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzJXM+IiAlIChoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKIAog
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKQEAgLTEwMzgsOSArMTM2MiwyMSBAQCBj
bGFzcyBSYXdUeXBlQmluZGluZzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3R5cGUpOgog
ICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCiAKKyAgICBkZWYgcmVzb2x2ZV9pbm5l
cihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3Qoc2VsZik6CisgICAgICAgIHNlbGYucmF3X3R5cGVfLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCgpCisKICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKHNlbGYpOgogICAgICAg
ICByZXR1cm4gTm9uZQogCisgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0
KCkKKwogICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoc2VsZiwgb3B0aW9uYWwpOgogICAgICAg
ICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQs
IG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKQEAgLTEwODUsNiArMTQyMSwxMiBAQCBjbGFzcyBUeXBl
RGF0YShvYmplY3QpOgogICAgIGRlZiBnZXRfanNvbl90eXBlKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5qc29uX3R5cGVfCiAKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmpzb25fdHlwZV9bImlkIl0KKworICAgIGRlZiBnZXRfZG9tYWluX25hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0KKwogCiBjbGFz
cyBEb21haW5EYXRhOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6CkBAIC0x
MTM1LDkgKzE0NzcsNyBAQCBkZWYgcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fcGFyYW1ldGVyLCBz
Y29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIHJldHVybiB0
eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQogICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVy
OgogICAgICAgICByZXN1bHQgPSBUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xh
cmF0aW9uKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29u
dGV4dCkKLSAgICAgICAgY29kZV9nZW5lcmF0b3IgPSByZXN1bHQuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKLSAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICBhZF9ob2NfdHlwZV9j
b250ZXh0LmNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKQorICAgICAg
ICBhZF9ob2NfdHlwZV9jb250ZXh0LmFkZF90eXBlKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJl
c3VsdAogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikK
QEAgLTE3MTYsNiArMjA1NiwxMCBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKIAogfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKIAorI2lmICIiIiArIFZBTElEQVRP
Ul9JRkRFRl9OQU1FICsgIiIiCiskdmFsaWRhdG9yQ29kZQorI2VuZGlmIC8vICIiIiArIFZBTElE
QVRPUl9JRkRFRl9OQU1FICsgIiIiCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0xNzM3LDYgKzIwODEsNjMgQEAgJGRvbWFpbkluaXRp
YWxpemVycwogdHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpKQogCiAKK2NsYXNzIE5lZWRSdW50
aW1lQ2FzdFJlcXVlc3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmFj
a18gPSBOb25lCisKKyAgICBkZWYgYWNrbm93bGVkZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYWNr
XyA9IFRydWUKKworICAgIGRlZiBpc19hY2tub3dsZWRnZWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmFja18KKworCitkZWYgcmVzb2x2ZV9hbGxfdHlwZXMoKToKKyAgICBydW50aW1lX2Nh
c3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQorICAgIGZvciB0eXBlX25hbWUgaW4gVFlQRVNfV0lU
SF9SVU5USU1FX0NBU1RfU0VUOgorICAgICAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVz
dHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QoKQorCisgICAgY2xhc3MgRm9y
d2FyZExpc3RlbmVyOgorICAgICAgICB0eXBlX2RhdGFfc2V0ID0gc2V0KCkKKyAgICAgICAgYWxy
ZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQorCisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0YSk6CisgICAgICAgICAgICBpZiB0eXBl
X2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3NldDoKKyAgICAgICAgICAgICAgICBj
bHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQorCisgICAgY2xhc3MgUmVzb2x2ZUNvbnRl
eHQ6CisgICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBGb3J3YXJkTGlzdGVuZXIKKworICAgIGZv
ciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6CisgICAgICAgIGZvciB0eXBlX2Rh
dGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAgICAgICAgICMgRG8gbm90IGdlbmVyYXRl
IGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdlci4KKyAgICAgICAgICAgIEZvcndhcmRM
aXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3NldC5hZGQodHlwZV9kYXRhKQorCisgICAgICAgICAg
ICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKKyAgICAgICAgICAgIGJpbmRpbmcu
cmVzb2x2ZV9pbm5lcihSZXNvbHZlQ29udGV4dCkKKworICAgIGZvciBkb21haW5fZGF0YSBpbiB0
eXBlX21hcC5kb21haW5zKCk6CisgICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEu
dHlwZXMoKToKKyAgICAgICAgICAgIGZ1bGxfdHlwZV9uYW1lID0gIiVzLiVzIiAlICh0eXBlX2Rh
dGEuZ2V0X2RvbWFpbl9uYW1lKCksIHR5cGVfZGF0YS5nZXRfbmFtZSgpKQorICAgICAgICAgICAg
cmVxdWVzdCA9IHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0cy5wb3AoZnVsbF90eXBlX25h
bWUsIE5vbmUpCisgICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkK
KyAgICAgICAgICAgIGlmIHJlcXVlc3Q6CisgICAgICAgICAgICAgICAgYmluZGluZy5yZXF1ZXN0
X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpCisKKyAgICAgICAgICAgIGlmIHJlcXVlc3QgYW5k
IG5vdCByZXF1ZXN0LmlzX2Fja25vd2xlZGdlZCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbigiRmFpbGVkIHRvIGdlbmVyYXRlIHJ1bnRpbWVDYXN0IGluICIgKyBmdWxsX3R5cGVf
bmFtZSkKKworICAgIGZvciBmdWxsX3R5cGVfbmFtZSBpbiBydW50aW1lX2Nhc3RfZ2VuZXJhdGVf
cmVxdWVzdHM6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGdlbmVyYXRlIHJ1
bnRpbWVDYXN0LiBUeXBlICIgKyBmdWxsX3R5cGVfbmFtZSArICIgbm90IGZvdW5kIikKKworICAg
IHJldHVybiBGb3J3YXJkTGlzdGVuZXIKKworCitnbG9iYWxfZm9yd2FyZF9saXN0ZW5lciA9IHJl
c29sdmVfYWxsX3R5cGVzKCkKKworCisKIGRlZiBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdf
dHlwZSwgYW5ub3RhdGVkX3R5cGUpOgogICAgIGlmIGFubm90YXRlZF90eXBlICE9IHJhd190eXBl
OgogICAgICAgICByZXR1cm4gIi8qJXMqLyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHJhd190eXBl
KQpAQCAtMTgxNiw5ICsyMjE3LDE0IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICBmcm9udGVuZF9j
b25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQogICAgIHR5cGVfYnVpbGRlcl9mcmFnbWVudHMgPSBb
XQogICAgIHR5cGVfYnVpbGRlcl9mb3J3YXJkcyA9IFtdCisgICAgdmFsaWRhdG9yX2ltcGxfbGlz
dCA9IFtdCisgICAgdmFsaWRhdG9yX2ltcGxfcmF3X3R5cGVzX2xpc3QgPSBbXQorCiAKICAgICBA
c3RhdGljbWV0aG9kCiAgICAgZGVmIGdvKCk6CisgICAgICAgIEdlbmVyYXRvci52YWxpZGF0b3Jf
aW1wbF9saXN0LmFwcGVuZChHZW5lcmF0b3IudmFsaWRhdG9yX2ltcGxfcmF3X3R5cGVzX2xpc3Qp
CisKICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlwZV9tYXApCiAKICAgICAgICAg
Zmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCA9IFsKQEAgLTE5MDUsMTMgKzIzMTEsMTAg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgIGZvciBsIGluIHJldmVyc2VkKHNv
cnRlZF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0KToKICAgICAgICAgICAgICAgICAgICAgZG9t
YWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKGwpCiAKKyAgICAgICAgUmF3VHlwZXMuZ2VuZXJhdGVf
dmFsaWRhdGVfbWV0aG9kcyhXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX3Jhd190eXBl
c19saXN0LCAiIikpCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHByb2Nlc3NfZXZlbnQo
anNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5l
cyk6Ci0gICAgICAgIGNsYXNzIE5vT3BGb3J3YXJkTGlzdGVuZXI6Ci0gICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpOgotICAg
ICAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBldmVudF9uYW1lID0ganNvbl9ldmVudFsibmFt
ZSJdCiAgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gW10KICAgICAgICAgbWV0aG9kX2xpbmVfbGlz
dCA9IFtdCkBAIC0xOTM1LDcgKzIzMzgsMTEgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAg
ICAgICAgICAgb3B0aW9uYWwgPSBvcHRpb25hbF9tYXNrIGFuZCBqc29uX29wdGlvbmFsCiAKKyAg
ICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0ID0gW10KKwogICAgICAgICAgICAgICAgIGNs
YXNzIEFkSG9jVHlwZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9mdWxs
X25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgorCiAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4
KCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgpAQCAtMTk0OCwxMSAr
MjM1NSwzMCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTmFtZUZpeAogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9y
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVf
YnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIE5vT3BGb3J3YXJkTGlzdGVuZXIpCisgICAgICAg
ICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkX2hvY190eXBlX2xpc3QuYXBwZW5kKGJpbmRpbmcpCiAKICAgICAgICAgICAgICAgICBw
YXJhbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRv
bWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQogCisgICAgICAgICAgICAgICAgY2xhc3MgRXZl
bnRGb3J3YXJkTGlzdGVuZXI6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEodHlwZV9kYXRhKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50UmVzb2x2
ZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBFdmVudEZv
cndhcmRMaXN0ZW5lcgorCisgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVf
bGlzdDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZS5yZXNvbHZlX2lubmVyKEV2ZW50UmVzb2x2
ZUNvbnRleHQpCisKKyAgICAgICAgICAgICAgICBjbGFzcyBFdmVudEdlbmVyYXRlQ29udGV4dDoK
KyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9ICJub3Qgc3VwcG9ydGVkIGlu
IEV2ZW50R2VuZXJhdGVDb250ZXh0IgorCisgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gYWRf
aG9jX3R5cGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHlwZS5nZXRf
Y29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0b3I6CisgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hv
Y190eXBlX3dyaXRlciwgRXZlbnRHZW5lcmF0ZUNvbnRleHQpCisKICAgICAgICAgICAgICAgICBh
bm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KGNfdHlwZS5nZXRfdGV4dCgp
LCBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KGpzb25fb3B0aW9uYWwpKQog
CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3Rh
dGVkX3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKQEAgLTIwNzgsMTQgKzI1MDQsOCBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgZGVmIHByb2Nlc3NfdHlwZXModHlwZV9tYXApOgogICAgICAgICBvdXRw
dXQgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cwogCi0gICAgICAgIGNsYXNzIEZv
cndhcmRMaXN0ZW5lcjoKLSAgICAgICAgICAgIHR5cGVfZGF0YV9zZXQgPSBzZXQoKQotICAgICAg
ICAgICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQotCi0gICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKGNscywgdHlwZV9kYXRhKToKLSAg
ICAgICAgICAgICAgICBpZiB0eXBlX2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3Nl
dDoKLSAgICAgICAgICAgICAgICAgICAgY2xzLnR5cGVfZGF0YV9zZXQuYWRkKHR5cGVfZGF0YSkK
KyAgICAgICAgY2xhc3MgR2VuZXJhdGVDb250ZXh0OgorICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlciA9IFdyaXRlcihHZW5lcmF0b3IudmFsaWRhdG9yX2ltcGxfbGlzdCwgIiIpCiAKICAgICAg
ICAgZGVmIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0LCB0eXBlX2RhdGFfY2FsbGJhY2sp
OgogICAgICAgICAgICAgd3JpdGVyID0gV3JpdGVyKG91dCwgIiIpCkBAIC0yMTE5LDEzICsyNTM5
LDExIEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAgICAgICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRl
cl9jYWxsZXIoZ2VuZXJhdGVfcGFzc19pZCk6CiAgICAgICAgICAgICBkZWYgY2FsbF90eXBlX2J1
aWxkZXIodHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgICAgICAjIERvIG5v
dCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBlIGFueSBsb25nZXIuCi0gICAgICAgICAg
ICAgICAgRm9yd2FyZExpc3RlbmVyLmFscmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEp
Ci0KICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHR5cGVfZGF0YS5nZXRfYmluZGlu
ZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0
b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29kZV9nZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bh
c3NfaWQoKToKICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyX2dldHRlcigpCi0g
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcih3
cml0ZXIsIEZvcndhcmRMaXN0ZW5lcikKKworICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBHZW5lcmF0ZUNvbnRleHQpCiAgICAg
ICAgICAgICByZXR1cm4gY2FsbF90eXBlX2J1aWxkZXIKIAogICAgICAgICBnZW5lcmF0ZV9hbGxf
ZG9tYWluc19jb2RlKG91dHB1dCwgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxk
ZXJQYXNzLk1BSU4pKQpAQCAtMjEzMyw3ICsyNTUxLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAg
ICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuXG4iKQogCiAgICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2NhbGxiYWNr
KHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAgICBpZiB0eXBlX2RhdGEgaW4g
Rm9yd2FyZExpc3RlbmVyLnR5cGVfZGF0YV9zZXQ6CisgICAgICAgICAgICBpZiB0eXBlX2RhdGEg
aW4gZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9kYXRhX3NldDoKICAgICAgICAgICAgICAg
ICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKICAgICAgICAgICAgICAgICBiaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24od3Jp
dGVyX2dldHRlcigpKQogICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKEdlbmVyYXRv
ci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spCkBAIC0y
MTg4LDcgKzI2MDYsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9o
LnN1YnN0aXR1dGUoTm9uZSwKIGZyb250ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9u
dGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAogICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVy
YXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsICIiKSwKICAgICBtZXRob2RzPWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKLSAgICBlbnVtQ29uc3Rh
bnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkpKQorICAgIGVu
dW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSwK
KyAgICB2YWxpZGF0b3JDb2RlPWpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci52YWxpZGF0b3Jf
aW1wbF9saXN0KSwgIiIpKSkKIAogYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFj
a2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAogICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9p
bihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCBlMTAwYWRl
YWQyMWQwMGU2MjFlMzJlNjA5ZTE5NTZiYWU5OWNjYmU3Li43MDdjMjc2YWVhZTY5ZWY3ZjUzZmU1
OGIzYmEwZjFmM2I2MmQzNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCkBAIC0yMDUsNiArMjA1LDggQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KIAorICAgIGludCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSW5z
cGVjdG9yT2JqZWN0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123612</attachid>
            <date>2012-01-23 13:39:51 -0800</date>
            <delta_ts>2012-01-24 10:36:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76676-20120124013948.patch</filename>
            <type>text/plain</type>
            <size>56814</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZjM3YmIyZjk1OThiZDgyODg4ZGM3MDIzZDQ3MmFl
YjkwYzUzM2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMS0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogYWRkIG9wdGlvbmFsIHJ1bnRpbWUgdmFsaWRh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVy
YXRvciBhbGdvcml0aG0gaXMgcmVkb25lIHNpZ25pZmljYW50bHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VU
eXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RfaW1wbCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZyk6Cisg
ICAgICAgIChSYXdUeXBlcy5TdHJpbmcuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKToKKyAgICAg
ICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAg
ICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLkludC5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIpOgorICAgICAgICAoUmF3VHlwZXMuTnVt
YmVyLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkJvb2wpOgor
ICAgICAgICAoUmF3VHlwZXMuQm9vbC5nZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QpOgorICAgICAg
ICAoUmF3VHlwZXMuQm9vbC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXMuT2JqZWN0KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3VHlwZXMu
QW55LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAg
ICAgICAgKFJhd1R5cGVzLkFycmF5LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAg
IChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
VHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAg
ICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcucmVzb2x2ZV9pbm5lcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGlu
Zy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3Mu
Y3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1C
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJp
bmcpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFp
blN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6Cisg
ICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluU3RyaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3Rl
eHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBl
ZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZlN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5yZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZlN0cmluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nKToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5k
aW5nLnJlc29sdmVfaW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2Rl
Y2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcucmVzb2x2ZV9pbm5lci5Qcm9wZXJ0eURhdGEpOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcu
cmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRl
X3R5cGVfZGVjbGFyYXRpb25fLkNsYXNzQmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NC
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkNs
YXNzQmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIpOgorICAgICAgICAoZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
Z2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKEFkSG9jVHlw
ZUNvbnRleHRJbXBsLmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRl
eHRJbXBsLmdldF90eXBlX25hbWVfZml4Lk5hbWVGaXgpOgorICAgICAgICAoQWRIb2NUeXBlQ29u
dGV4dEltcGwuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeC5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBZEhvY1R5cGVDb250ZXh0SW1wbC5hZGRfdHlwZSk6CisgICAgICAgIChQbGFpbk9iamVj
dEJpbmRpbmcpOgorICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVfaW5uZXIuQWRIb2NUeXBlQ29u
dGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250
ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZXNvbHZlX2lu
bmVyLkFkSG9jVHlwZUNvbnRleHQuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeCk6CisgICAgICAg
IChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25h
bWVfZml4Lk5hbWVGaXgub3V0cHV0X2NvbW1lbnQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJl
c29sdmVfaW5uZXIuQWRIb2NUeXBlQ29udGV4dC5hZGRfdHlwZSk6CisgICAgICAgIChBcnJheUJp
bmRpbmcucmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEFycmF5QmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfbmFtZSk6CisgICAgICAgIChU
eXBlRGF0YSk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfZG9tYWluX25hbWUpOgorICAgICAgICAo
cmVzb2x2ZV9wYXJhbV90eXBlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QpOgor
ICAgICAgICAoTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChOZWVk
UnVudGltZUNhc3RSZXF1ZXN0LmFja25vd2xlZGdlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2Fz
dFJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKToKKyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzKToK
KyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzLkZvcndhcmRMaXN0ZW5lcik6CisgICAgICAgIChy
ZXNvbHZlX2FsbF90eXBlcy5Gb3J3YXJkTGlzdGVuZXIuYWRkX3R5cGVfZGF0YSk6CisgICAgICAg
IChyZXNvbHZlX2FsbF90eXBlcy5SZXNvbHZlQ29udGV4dCk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkFkSG9jVHlwZUNvbnRleHQp
OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuQWRIb2NUeXBlQ29udGV4dC5hZGRf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lcik6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lci5hZGRfdHlwZV9kYXRhKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkV2
ZW50UmVzb2x2ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuRXZl
bnRHZW5lcmF0ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXMuR2Vu
ZXJhdGVDb250ZXh0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzLmNyZWF0ZV90
eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzLmdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6c2l6ZSk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNGQzNTY2OTY5
NjMzZDRkNjFjYzlhNzVkZmViMjQ0MjYwOWNlMWQ3Zi4uMzNlZDRlNmQwZWI0ZDQ2YmU4ODE5NzJl
YWFiMjQ1ZmVjOTVmZDZmMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU2LDYgKzU2LDkgQEAgVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7CiB9CiAKIAorVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFtd
KQorCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5lcyIpCkBAIC0xNzQsNiArMTc3LDggQEAgY2xh
c3MgQ2FwaXRhbGl6ZXI6CiAKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAi
RE9NIiwgIkNTUyJdKQogCitWQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJUX0RJU0FCTEVE
IgorCiAKIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBAY2xhc3NtZXRob2QKQEAgLTI0NSw2
ICsyNTAsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKIAogICAgIGNsYXNzIEJhc2VU
eXBlKG9iamVjdCk6CisgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
CisKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgogICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0
X2NfcGFyYW1fdHlwZQpAQCAtMjU3LDYgKzI2NCwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3Qp
OgogICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAg
IHJldHVybiAiJiIKIAorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHJlcXVlc3Rf
cmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgaWYgbm90IGNscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgUmF3VHlwZXMudHlw
ZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xzKQorICAgICAgICAgICAgICAgIGNs
cy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QoY2xzLCB3cml0ZXIpOgor
ICAgICAgICAgICAgcGFyYW1zID0gY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCkKKyAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdGF0aWMgdm9pZCBhc3NlcnQlcyhJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpXG4iICUgcGFyYW1zLm5hbWUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgJXMgdjtcbiIgJSBwYXJh
bXMudmFyX3R5cGUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hcyVzKCZ2KTtcbiIgJSBwYXJhbXMuYXNfbWV0aG9kX25hbWUpCisgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
XG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4iKQorCisgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
CisgICAgICAgICAgICByZXR1cm4gImFzc2VydCVzIiAlIGNscy5nZXRfdmFsaWRhdGVfbWV0aG9k
X3BhcmFtcygpLm5hbWUKKworICAgIHR5cGVzX3RvX2dlbmVyYXRlX3ZhbGlkYXRvcl8gPSBbXQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZHMoY2xz
LCB3cml0ZXIpOgorICAgICAgICBmb3IgdCBpbiBjbHMudHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRh
dG9yXzoKKyAgICAgICAgICAgIGlmIHQubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgorICAg
ICAgICAgICAgICAgIHQuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcikKKworCiAgICAg
Y2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRl
ZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgpAQCAtMjc5LDYg
KzMxNSwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCiAKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKKyAgICAg
ICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAgICAgICAgICAgIG5hbWUg
PSAiU3RyaW5nIgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gIlN0cmluZyIKKyAgICAgICAg
ICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJTdHJpbmciCisgICAgICAgICAgICByZXR1cm4gVmFs
aWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgi
U3RyaW5nIikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcm
IikKIApAQCAtMjk5LDYgKzM0MywxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAg
ICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCiAK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9w
YXJhbXMoKToKKyAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAg
ICAgICAgICAgIG5hbWUgPSAiSW50IgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gImludCIK
KyAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJOdW1iZXIiCisgICAgICAgICAgICBy
ZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlw
ZSA9IENQYXJhbVR5cGUoImludCIpCiAKICAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgpAQCAt
MzE4LDYgKzM3MCwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0
X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRl
ZCIpCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21l
dGhvZF9wYXJhbXMoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAg
ICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQogCiAgICAg
Y2xhc3MgQm9vbChCYXNlVHlwZSk6CkBAIC0zNDksNiArNDA1LDEwIEBAIGNsYXNzIFJhd1R5cGVz
KG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgog
ICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgorICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJUT0RPIikKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9v
bCIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3Qi
LCAiKiVzIikKIApAQCAtMzgyLDYgKzQ0MiwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgog
ICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJl
dHVybiAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0
ZV9tZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQor
CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IikKIApAQCAtNDExLDYgKzQ3NSwxNyBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKICAgICAg
ICAgICAgIHJldHVybiBUcnVlCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcik6CisgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgic3RhdGljIHZvaWQgYXNzZXJ0QW55KEluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIpCisg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLy8gTm8tb3AuXG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxu
XG4iKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpOgorICAgICAgICAgICAgcmV0dXJuICJhc3NlcnRBbnkiCisKICAgICAg
ICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQog
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IikKIApAQCAtNDQ2LDYgKzUyMSwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAg
ICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVy
biAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9t
ZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQorCiAg
ICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIpCiAKQEAgLTU1Nyw3ICs2MzYsOCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAg
ICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UKLSAgICAg
ICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlID0gIlR5
cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIKKyAgICAgICAgICAgIGZ1
bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBk
ZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzgsNyArNjU4LDggQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxl
LCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAgICAgY2xh
c3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQotICAgICAgICAgICAgZnVs
bF9uYW1lX3ByZWZpeCA9ICIiCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
PSAiIgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBl
X2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTk2LDE0ICs2
NzcsMzEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgaWYgImVudW0iIGluIGpz
b25fdHlwYWJsZToKIAogICAgICAgICAgICAgICAgIGNsYXNzIEVudW1CaW5kaW5nOgotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
Y29kZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZF91c2VyX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KGNscywgcmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdlKCkKKwor
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQorCisgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVf
Z2VuZXJhdG9yKGVudW1fYmluZGluZ19jbHMpOgogICAgICAgICAgICAgICAgICAgICAgICAgI0ZJ
WE1FOiBnZW5lcmF0ZSBhZC1ob2MgZW51bXMgdG9vIG9uY2Ugd2UgZmlndXJlIG91dCBob3cgdG8g
YmV0dGVyIGltcGxlbWVudCB0aGVtIGluIEMrKy4KICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnRfb3V0ID0gaGVscGVyLmlzX2FkX2hvYwogCiAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVt
Il0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCkBAIC02MjUsNiArNzIzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVz
IiAlIGVudW1fcG9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiLFxuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB9O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51
bV9iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IHlldCBpbXBsZW1lbnRlZCIp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
c3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2Vu
ZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52
YWxpZGF0b3Jfd3JpdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGws
IGVudW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBXVEY6OlN0cmluZyBzO1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVChjYXN0X3Jlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgbGVuKGVudW0pID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25fbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50
KGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uX2xpc3QuYXBwZW5kKCJzID09IFwiJXNcIiIgJSBlbnVtX2l0ZW0pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgQVNTRVJUKCVzKTtcbiIgJSBqb2luKGNvbmRpdGlvbl9saXN0LCAiIHx8ICIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCJ9XG5cblxuIikKKworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIlxuXG4iKQpAQCAtNjQwLDggKzc2MSwxMiBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKKyAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQo
Y2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXggKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKIAogICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0
dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgpAQCAtNjU2LDEwICs3ODEsMjYgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6CiAK
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5TdHJpbmc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQi
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Io
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCisgICAgICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKQEAgLTY3NywxMSArODE4LDIzIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICBlbHNlOgogCiAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIFR5cGVkZWZTdHJpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2
ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSYXdUeXBlcy5TdHJpbmcucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVy
YXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2Vu
ZXJhdGVfY29udGV4dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
ZXIud3JpdGVfZG9jKHdyaXRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKQEAg
LTY5OCw2ICs4NTEsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKIAorICAgICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCisKICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nCkBAIC03MDgsNyArODY1LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgog
CiAgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiY29uc3QgJXMlcyYiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQogCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCiAKQEAgLTcxNiwxMSArODczLDcxIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29uX3R5cGFibGU6
CiAKICAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRpbmc6Ci0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVy
YXRvcigpOgorICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQorICAgICAg
ICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisKKyAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNscy5yZXNvbHZlX2RhdGFfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9w
ZXJ0aWVzIl0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQorCisgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9saXN0ID0gW10KKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4g
cHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9w
WyJuYW1lIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0
ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX2ltcGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0
b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQuZm9yd2FyZF9saXN0
ZW5lcikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFByb3BlcnR5RGF0YToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gYmlu
ZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJvcAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0eURhdGEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBSZXNvbHZlRGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3By
b3BlcnRpZXMgPSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJv
cGVydGllcyA9IG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5
cGVzID0gYWRfaG9jX3R5cGVfY29udGV4dC5hZF9ob2NfdHlwZV9saXN0CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIGFkX2hvYyBpbiBhZF9ob2NfdHlwZV9saXN0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkX2hvYy5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4dCkK
KworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nh
c3RfID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgp
CisgICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3QoKQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5tYWluX3Byb3Bl
cnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcu
cmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFs
X3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoY2xhc3NfYmluZGluZ19jbHMp
OgogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNscywgd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKGNscywgd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZV9kYXRhID0gY2xhc3NfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRh
XwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRl
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVk
X3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCkBAIC03MzAsMTQgKzk0NywxMCBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwYWJsZVsicHJv
cGVydGllcyJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGll
cyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRp
ZXMgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwcm9wZXJ0
aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIm9wdGlvbmFsIiBp
biBwIGFuZCBwWyJvcHRpb25hbCJdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMuYXBwZW5kKHApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1haW5fcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGFkX2hvY190eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZXM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hv
Y190eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5
cGVfd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKICIiIiAgICBlbnVtIHsKQEAgLTc0NSwx
MCArOTU4LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICIiIikKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zID0gW10KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbGVuKG1haW5fcHJvcGVydGllcykgPiAwOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykg
PiAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gbWFpbl9wcm9wZXJ0aWVzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0
YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocFsibmFtZSJdKSArICJTZXQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihw
cm9wX2RhdGEucFsibmFtZSJdKSArICJTZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
ID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCkBAIC03ODAsMTIgKzk5MywxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAiIiIgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsi
bmFtZSJdCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBl
X2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBp
biBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRp
bGluZSgiIiIKQEAgLTgwNCwxMCArMTAxNSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1z
W3Bvc10pKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcyArPSAxCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgpAQCAtODI5LDggKzEwMzYsOCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLypcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3Vs
dCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJc
biAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAg
ICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKQEAgLTg0MCwxMSAr
MTA0Nyw5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICB9CiAiIiIgJSBjbGFzc19uYW1lKQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG9wdGlvbmFsX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUg
PSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhl
ZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2Jp
bmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29udGV4dF9kb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBy
b3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVs
X2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcGFyYW1fdHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9k
ZXMocGFyYW1fdHlwZV9iaW5kaW5nKToKQEAgLTg1MiwzOCArMTA1Nyw1OCBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVf
dGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhc
IiVzXCIsICVzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJf
bmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRf
c2V0dGVyX25hbWUoKSwgcHJvcF9kYXRhLnBbIm5hbWUiXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xp
c3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJf
bmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdDo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFt
ZSwgd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmRfbGlzdGVuZXIg
PSBmb3J3YXJkX2xpc3RlbmVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihz
ZWxmLnByb3BlcnR5X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNs
YXNzX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUg
Y2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZf
TkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNc
biIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZiglcykg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTtcbiIgJSBjbGFz
c19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm9iamVj
dCkpO1xuIiAlIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY2xhc3NfYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1
ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZE
RUZfTkFNRSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVz
JXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBl
ci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29s
IGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJU
X1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGl0O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICBpdCA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIHByb3BfZGF0YS5wWyJuYW1lIl0pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgQVNTRVJUKGl0ICE9IG9iamVjdC0+ZW5kKCkpO1xuIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICAlcyhpdC0+c2Vjb25kLmdldCgpKTtcbiIgJSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
LmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBjb3VudCA9ICVzO1xu
IiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSkKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9u
YWxfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpdCA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xu
IiAlIHByb3BfZGF0YS5wWyJuYW1lIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaWYgKGl0ICE9IG9iamVjdC0+
ZW5kKCkpIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKGl0LT5zZWNvbmQuZ2V0KCkpO1xuIiAl
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgKytjb3VudDtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgQVNTRVJUKGNvdW50ID09IG9iamVjdC0+c2l6ZSgpKTtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4i
KQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29t
bWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnJXMnIHdoaWxl
IGdlbmVyYXRpbmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2VsZi5jbGFzc19uYW1l
KSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVGaXgK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBl
X2J1aWxkZXIoc2VsZiwgY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHNlbGYud3Jp
dGVyLCBzZWxmLmZvcndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6CkBAIC05MDIsOSArMTEyNywxMyBAQCBjbGFz
cyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2Vu
ZXJhdG9yCiAKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlw
ZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKICAgICAgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190
eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4ICsgZml4ZWRfdHlwZV9uYW1l
LmNsYXNzX25hbWUgKyAiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFzc1Jl
ZlB0cjwiICsgaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFt
ZS5jbGFzc19uYW1lICsgIj4iCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAog
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRl
cm4oKToKQEAgLTkxNCwxNCArMTE0Myw1MSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKIAorICAgICAgICAgICAgICAgICAgICBjbGFz
cyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCByZXNvbHZlX2NvbnRleHQsIGFk
X2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4KToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9wZXJ0eV9uYW1lCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFtZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250ZXh0ID0gcmVzb2x2ZV9jb250
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZF9ob2NfdHlwZV9saXN0ID0g
YWRfaG9jX3R5cGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFp
bmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCArIGNsYXNzX25h
bWUgKyAiOjoiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2Zp
eChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0eV9uYW1l
LCBzZWxmLmNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5hbWVGaXgKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNlbGYsIGJp
bmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlz
dC5hcHBlbmQoYmluZGluZykKKwogICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRpbmcK
ICAgICAgICAgICAgIGVsc2U6CiAKICAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVjdEJp
bmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2Rl
X2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVuc3VwcG9ydGVkIikKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCkBA
IC05MzgsMTIgKzEyMDQsNjcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICBlbGlmIGpz
b25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6CiAKICAgICAgICAgICAgIGNsYXNzIEFycmF5
QmluZGluZzoKLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8g
PSBOb25lCisgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFs
c2UKKworICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBy
ZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
aWYgY2xzLnJlc29sdmVfZGF0YV86CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQorICAgICAgICAgICAgICAgICAg
ICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX25hbWUgPSAiSXRlbSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
YW1lRml4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5kKGJpbmRpbmcpCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShq
c29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRl
eHQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisKKyAgICAgICAgICAg
ICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UocmVzb2x2ZV9jb250ZXh0LmZv
cndhcmRfbGlzdGVuZXIpCisKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgUmVzb2x2ZURhdGE6
CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0ZW1fYmluZGlu
ZworICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IGFkX2hvY190eXBl
cworCisgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEK
KworICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0LnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQorCisgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9y
dW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKKworICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAorICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChj
bHMpOgorICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Rf
ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVf
YmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGFy
cmF5X2JpbmRpbmdfY2xzKToKIAogICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJh
dG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlz
dGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRl
cih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCkBAIC05NTYs
MjcgKzEyNzcsMTQgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxl
OgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRl
eHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1l
ID0gIkl0ZW0iCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOYW1lRml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZV9kYXRhID0gYXJyYXlfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRhXwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29k
ZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGZv
cndhcmRfbGlzdGVuZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvY190
eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZV9saXN0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hvY190eXBlLmdldF9jb2RlX2dlbmVy
YXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9y
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZ2VuZXJhdGVfY29udGV4dCkK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IHJl
c29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25h
bWUsIEFkSG9jVHlwZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSBSYXdU
eXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKGl0ZW1fdHlwZV9iaW5kaW5nKToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQpAQCAtOTkyLDkg
KzEzMDAsMjEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgJXMoKSk7XG4i
ICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3Io
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9y
d2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhcnJheV9iaW5k
aW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9O
QU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlm
ICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRv
cl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1l
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCJ7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
Ym9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyhhcnJheS0+Z2V0KGkp
LmdldCgpKTtcbiIgJSByZXNvbHZlX2RhdGEuaXRlbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG5cblxuIikKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCkBAIC0xMDE1LDkgKzEzMzUs
MTMgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
b2RlR2VuZXJhdG9yCiAKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAg
ICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1l
LmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywg
b3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4i
ICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzJXM+IiAlIChoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKIAog
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKQEAgLTEwMzgsOSArMTM2MiwyMSBAQCBj
bGFzcyBSYXdUeXBlQmluZGluZzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3R5cGUpOgog
ICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCiAKKyAgICBkZWYgcmVzb2x2ZV9pbm5l
cihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3Qoc2VsZik6CisgICAgICAgIHNlbGYucmF3X3R5cGVfLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCgpCisKICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKHNlbGYpOgogICAgICAg
ICByZXR1cm4gTm9uZQogCisgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0
KCkKKwogICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoc2VsZiwgb3B0aW9uYWwpOgogICAgICAg
ICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQs
IG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKQEAgLTEwODUsNiArMTQyMSwxMiBAQCBjbGFzcyBUeXBl
RGF0YShvYmplY3QpOgogICAgIGRlZiBnZXRfanNvbl90eXBlKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5qc29uX3R5cGVfCiAKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmpzb25fdHlwZV9bImlkIl0KKworICAgIGRlZiBnZXRfZG9tYWluX25hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0KKwogCiBjbGFz
cyBEb21haW5EYXRhOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6CkBAIC0x
MTM1LDkgKzE0NzcsNyBAQCBkZWYgcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fcGFyYW1ldGVyLCBz
Y29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIHJldHVybiB0
eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQogICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVy
OgogICAgICAgICByZXN1bHQgPSBUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xh
cmF0aW9uKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29u
dGV4dCkKLSAgICAgICAgY29kZV9nZW5lcmF0b3IgPSByZXN1bHQuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKLSAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICBhZF9ob2NfdHlwZV9j
b250ZXh0LmNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKQorICAgICAg
ICBhZF9ob2NfdHlwZV9jb250ZXh0LmFkZF90eXBlKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJl
c3VsdAogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikK
QEAgLTEzMjksNyArMTY2OSw3IEBAICRzZXR0ZXJzCiAKICAgICBlbnVtIE1ldGhvZE5hbWVzIHsK
ICRtZXRob2ROYW1lc0VudW1Db250ZW50Ci19OworICAgIH07CiAKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29tbWFuZE5hbWVzW107CiAKQEAgLTE3MTYsNiArMjA1NiwxMCBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIAogfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKIAorI2lmICIiIiArIFZBTElEQVRPUl9JRkRFRl9OQU1FICsgIiIiCiskdmFsaWRhdG9yQ29k
ZQorI2VuZGlmIC8vICIiIiArIFZBTElEQVRPUl9JRkRFRl9OQU1FICsgIiIiCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0xNzM3LDYg
KzIwODEsNjMgQEAgJGRvbWFpbkluaXRpYWxpemVycwogdHlwZV9tYXAgPSBUeXBlTWFwKGpzb25f
YXBpKQogCiAKK2NsYXNzIE5lZWRSdW50aW1lQ2FzdFJlcXVlc3Q6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBzZWxmLmFja18gPSBOb25lCisKKyAgICBkZWYgYWNrbm93bGVkZ2Uo
c2VsZik6CisgICAgICAgIHNlbGYuYWNrXyA9IFRydWUKKworICAgIGRlZiBpc19hY2tub3dsZWRn
ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmFja18KKworCitkZWYgcmVzb2x2ZV9hbGxf
dHlwZXMoKToKKyAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQorICAgIGZv
ciB0eXBlX25hbWUgaW4gVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUOgorICAgICAgICBydW50
aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJl
cXVlc3QoKQorCisgICAgY2xhc3MgRm9yd2FyZExpc3RlbmVyOgorICAgICAgICB0eXBlX2RhdGFf
c2V0ID0gc2V0KCkKKyAgICAgICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQorCisgICAg
ICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0
YSk6CisgICAgICAgICAgICBpZiB0eXBlX2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVk
X3NldDoKKyAgICAgICAgICAgICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQor
CisgICAgY2xhc3MgUmVzb2x2ZUNvbnRleHQ6CisgICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBG
b3J3YXJkTGlzdGVuZXIKKworICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5z
KCk6CisgICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAg
ICAgICAgICMgRG8gbm90IGdlbmVyYXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdl
ci4KKyAgICAgICAgICAgIEZvcndhcmRMaXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3NldC5hZGQo
dHlwZV9kYXRhKQorCisgICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5n
KCkKKyAgICAgICAgICAgIGJpbmRpbmcucmVzb2x2ZV9pbm5lcihSZXNvbHZlQ29udGV4dCkKKwor
ICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6CisgICAgICAgIGZvciB0
eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAgICAgICAgIGZ1bGxfdHlwZV9u
YW1lID0gIiVzLiVzIiAlICh0eXBlX2RhdGEuZ2V0X2RvbWFpbl9uYW1lKCksIHR5cGVfZGF0YS5n
ZXRfbmFtZSgpKQorICAgICAgICAgICAgcmVxdWVzdCA9IHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9y
ZXF1ZXN0cy5wb3AoZnVsbF90eXBlX25hbWUsIE5vbmUpCisgICAgICAgICAgICBiaW5kaW5nID0g
dHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKKyAgICAgICAgICAgIGlmIHJlcXVlc3Q6CisgICAgICAg
ICAgICAgICAgYmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpCisKKyAg
ICAgICAgICAgIGlmIHJlcXVlc3QgYW5kIG5vdCByZXF1ZXN0LmlzX2Fja25vd2xlZGdlZCgpOgor
ICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGdlbmVyYXRlIHJ1bnRp
bWVDYXN0IGluICIgKyBmdWxsX3R5cGVfbmFtZSkKKworICAgIGZvciBmdWxsX3R5cGVfbmFtZSBp
biBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHM6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiRmFpbGVkIHRvIGdlbmVyYXRlIHJ1bnRpbWVDYXN0LiBUeXBlICIgKyBmdWxsX3R5cGVfbmFt
ZSArICIgbm90IGZvdW5kIikKKworICAgIHJldHVybiBGb3J3YXJkTGlzdGVuZXIKKworCitnbG9i
YWxfZm9yd2FyZF9saXN0ZW5lciA9IHJlc29sdmVfYWxsX3R5cGVzKCkKKworCisKIGRlZiBnZXRf
YW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVkX3R5cGUpOgogICAgIGlmIGFu
bm90YXRlZF90eXBlICE9IHJhd190eXBlOgogICAgICAgICByZXR1cm4gIi8qJXMqLyAlcyIgJSAo
YW5ub3RhdGVkX3R5cGUsIHJhd190eXBlKQpAQCAtMTgxNiw5ICsyMjE3LDE0IEBAIGNsYXNzIEdl
bmVyYXRvcjoKICAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQogICAgIHR5
cGVfYnVpbGRlcl9mcmFnbWVudHMgPSBbXQogICAgIHR5cGVfYnVpbGRlcl9mb3J3YXJkcyA9IFtd
CisgICAgdmFsaWRhdG9yX2ltcGxfbGlzdCA9IFtdCisgICAgdmFsaWRhdG9yX2ltcGxfcmF3X3R5
cGVzX2xpc3QgPSBbXQorCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGdvKCk6CisgICAg
ICAgIEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0LmFwcGVuZChHZW5lcmF0b3IudmFsaWRh
dG9yX2ltcGxfcmF3X3R5cGVzX2xpc3QpCisKICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlw
ZXModHlwZV9tYXApCiAKICAgICAgICAgZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCA9
IFsKQEAgLTE5MDUsMTMgKzIzMTEsMTAgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAg
ICAgIGZvciBsIGluIHJldmVyc2VkKHNvcnRlZF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0KToK
ICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKGwpCiAKKyAg
ICAgICAgUmF3VHlwZXMuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kcyhXcml0ZXIoR2VuZXJhdG9y
LnZhbGlkYXRvcl9pbXBsX3Jhd190eXBlc19saXN0LCAiIikpCisKICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIHByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5k
X21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6Ci0gICAgICAgIGNsYXNzIE5vT3BGb3J3YXJkTGlz
dGVuZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3R5
cGVfZGF0YSh0eXBlX2RhdGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBldmVu
dF9uYW1lID0ganNvbl9ldmVudFsibmFtZSJdCiAgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gW10K
ICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdCA9IFtdCkBAIC0xOTM1LDcgKzIzMzgsMTEgQEAgY2xh
c3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBvcHRpb25hbF9tYXNr
IGFuZCBqc29uX29wdGlvbmFsCiAKKyAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0ID0g
W10KKwogICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHQ6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+
IgorCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBOYW1lRml4OgpAQCAtMTk0OCwxMSArMjM1NSwzMCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZpeAogCiAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVf
Z2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIE5vT3BG
b3J3YXJkTGlzdGVuZXIpCisgICAgICAgICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5n
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QuYXBwZW5kKGJpbmRp
bmcpCiAKICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFt
X3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQogCisg
ICAgICAgICAgICAgICAgY2xhc3MgRXZlbnRGb3J3YXJkTGlzdGVuZXI6CisgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlX2Rh
dGEodHlwZV9kYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAg
ICAgICAgIGNsYXNzIEV2ZW50UmVzb2x2ZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfbGlzdGVuZXIgPSBFdmVudEZvcndhcmRMaXN0ZW5lcgorCisgICAgICAgICAgICAgICAg
Zm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZS5y
ZXNvbHZlX2lubmVyKEV2ZW50UmVzb2x2ZUNvbnRleHQpCisKKyAgICAgICAgICAgICAgICBjbGFz
cyBFdmVudEdlbmVyYXRlQ29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlciA9ICJub3Qgc3VwcG9ydGVkIGluIEV2ZW50R2VuZXJhdGVDb250ZXh0IgorCisgICAgICAg
ICAgICAgICAgZm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVfbGlzdDoKKyAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yID0gdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAg
ICAgICBpZiBnZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgRXZlbnRHZW5lcmF0ZUNvbnRl
eHQpCisKICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlw
ZV90ZXh0KGNfdHlwZS5nZXRfdGV4dCgpLCBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlw
ZV90ZXh0KGpzb25fb3B0aW9uYWwpKQogCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3Qu
YXBwZW5kKCIlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKQEAgLTIw
NzgsMTQgKzI1MDQsOCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZGVmIHByb2Nlc3NfdHlwZXMo
dHlwZV9tYXApOgogICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdt
ZW50cwogCi0gICAgICAgIGNsYXNzIEZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAgICAgIHR5cGVf
ZGF0YV9zZXQgPSBzZXQoKQotICAgICAgICAgICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQo
KQotCi0gICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9k
YXRhKGNscywgdHlwZV9kYXRhKToKLSAgICAgICAgICAgICAgICBpZiB0eXBlX2RhdGEgbm90IGlu
IGNscy5hbHJlYWR5X2RlY2xhcmVkX3NldDoKLSAgICAgICAgICAgICAgICAgICAgY2xzLnR5cGVf
ZGF0YV9zZXQuYWRkKHR5cGVfZGF0YSkKKyAgICAgICAgY2xhc3MgR2VuZXJhdGVDb250ZXh0Ogor
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3IudmFsaWRhdG9y
X2ltcGxfbGlzdCwgIiIpCiAKICAgICAgICAgZGVmIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUo
b3V0LCB0eXBlX2RhdGFfY2FsbGJhY2spOgogICAgICAgICAgICAgd3JpdGVyID0gV3JpdGVyKG91
dCwgIiIpCkBAIC0yMTE5LDEzICsyNTM5LDExIEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAgICAg
ICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoZ2VuZXJhdGVfcGFzc19pZCk6CiAgICAg
ICAgICAgICBkZWYgY2FsbF90eXBlX2J1aWxkZXIodHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVyKToK
LSAgICAgICAgICAgICAgICAjIERvIG5vdCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBl
IGFueSBsb25nZXIuCi0gICAgICAgICAgICAgICAgRm9yd2FyZExpc3RlbmVyLmFscmVhZHlfZGVj
bGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCi0KICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRv
ciA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAg
ICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29kZV9n
ZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyID0gd3JpdGVyX2dldHRlcigpCi0gICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9y
LmdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIEZvcndhcmRMaXN0ZW5lcikKKworICAgICAg
ICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVy
LCBHZW5lcmF0ZUNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gY2FsbF90eXBlX2J1aWxkZXIK
IAogICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dHB1dCwgY3JlYXRlX3R5cGVf
YnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLk1BSU4pKQpAQCAtMjEzMyw3ICsyNTUxLDcg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2Zvcndh
cmRzLmFwcGVuZCgiLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuXG4iKQogCiAgICAgICAgIGRlZiBn
ZW5lcmF0ZV9mb3J3YXJkX2NhbGxiYWNrKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAg
ICAgICAgICBpZiB0eXBlX2RhdGEgaW4gRm9yd2FyZExpc3RlbmVyLnR5cGVfZGF0YV9zZXQ6Cisg
ICAgICAgICAgICBpZiB0eXBlX2RhdGEgaW4gZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9k
YXRhX3NldDoKICAgICAgICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5n
KCkKICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb24od3JpdGVyX2dldHRlcigpKQogICAgICAgICBnZW5lcmF0ZV9h
bGxfZG9tYWluc19jb2RlKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRl
X2ZvcndhcmRfY2FsbGJhY2spCkBAIC0yMTg4LDcgKzI2MDYsOCBAQCBiYWNrZW5kX2hfZmlsZS53
cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKIGZyb250ZW5kX2NwcF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAogICAgIGNv
bnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xp
c3QsICIiKSwKICAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0
LCAiXG4iKSwKLSAgICBlbnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9j
b25zdGFudF9jb2RlKCkpKQorICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdl
dF9lbnVtX2NvbnN0YW50X2NvZGUoKSwKKyAgICB2YWxpZGF0b3JDb2RlPWpvaW4oZmxhdHRlbl9s
aXN0KEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0KSwgIiIpKSkKIAogYmFja2VuZF9jcHBf
ZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAogICAgIG1l
dGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9k
ZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAppbmRleCBlMTAwYWRlYWQyMWQwMGU2MjFlMzJlNjA5ZTE5NTZiYWU5OWNjYmU3
Li43MDdjMjc2YWVhZTY5ZWY3ZjUzZmU1OGIzYmEwZjFmM2I2MmQzNjhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0yMDUsNiArMjA1LDggQEAgcHVi
bGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJl
Z2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
ZW5kKCk7IH0KIAorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yT2JqZWN0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123764</attachid>
            <date>2012-01-24 10:36:26 -0800</date>
            <delta_ts>2012-01-25 03:55:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76676-20120124223624.patch</filename>
            <type>text/plain</type>
            <size>56803</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZjM3YmIyZjk1OThiZDgyODg4ZGM3MDIzZDQ3MmFl
YjkwYzUzM2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMS0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogYWRkIG9wdGlvbmFsIHJ1bnRpbWUgdmFsaWRh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVy
YXRvciBhbGdvcml0aG0gaXMgcmVkb25lIHNpZ25pZmljYW50bHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VU
eXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1
bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2RfaW1wbCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBlcy5n
ZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2RzKToKKyAgICAgICAgKFJhd1R5cGVzLlN0cmluZyk6Cisg
ICAgICAgIChSYXdUeXBlcy5TdHJpbmcuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKToKKyAgICAg
ICAgKFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAg
ICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLkludC5nZW5lcmF0ZV92YWxpZGF0
ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIpOgorICAgICAgICAoUmF3VHlwZXMuTnVt
YmVyLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkJvb2wpOgor
ICAgICAgICAoUmF3VHlwZXMuQm9vbC5nZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QpOgorICAgICAg
ICAoUmF3VHlwZXMuQm9vbC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXMuT2JqZWN0KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZW5lcmF0ZV92YWxp
ZGF0ZV9tZXRob2QpOgorICAgICAgICAoUmF3VHlwZXMuT2JqZWN0LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkpOgorICAgICAgICAoUmF3VHlwZXMu
QW55LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAg
ICAgICAgKFJhd1R5cGVzLkFycmF5LmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZCk6CisgICAgICAg
IChSYXdUeXBlcy5BcnJheS5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
VHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6CisgICAg
ICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uLkhlbHBlcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcucmVzb2x2ZV9pbm5lcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVtQmluZGlu
Zy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3Mu
Y3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6
CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1C
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51bUJpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJp
bmcpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFp
blN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6Cisg
ICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluU3RyaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3Rl
eHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBl
ZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZlN0cmluZy5yZXNvbHZlX2lubmVyKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5j
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5yZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZlN0cmluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAg
ICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nKToK
KyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5k
aW5nLnJlc29sdmVfaW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2Rl
Y2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcucmVzb2x2ZV9pbm5lci5Qcm9wZXJ0eURhdGEpOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5DbGFzc0JpbmRpbmcu
cmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRl
X3R5cGVfZGVjbGFyYXRpb25fLkNsYXNzQmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NC
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uQ2xhc3NCaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkNs
YXNzQmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIpOgorICAgICAgICAoZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQpOgorICAgICAgICAo
Z2V0X2luX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKEFkSG9jVHlwZUNvbnRleHRJbXBsLl9faW5pdF9fKToKKyAgICAgICAgKEFkSG9jVHlw
ZUNvbnRleHRJbXBsLmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFkSG9jVHlwZUNvbnRl
eHRJbXBsLmdldF90eXBlX25hbWVfZml4Lk5hbWVGaXgpOgorICAgICAgICAoQWRIb2NUeXBlQ29u
dGV4dEltcGwuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeC5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBZEhvY1R5cGVDb250ZXh0SW1wbC5hZGRfdHlwZSk6CisgICAgICAgIChQbGFpbk9iamVj
dEJpbmRpbmcpOgorICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QpOgor
ICAgICAgICAoUGxhaW5PYmplY3RCaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KToKKyAgICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJlc29sdmVfaW5uZXIuQWRIb2NUeXBlQ29u
dGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250
ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZXNvbHZlX2lu
bmVyLkFkSG9jVHlwZUNvbnRleHQuZ2V0X3R5cGVfbmFtZV9maXguTmFtZUZpeCk6CisgICAgICAg
IChBcnJheUJpbmRpbmcucmVzb2x2ZV9pbm5lci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25h
bWVfZml4Lk5hbWVGaXgub3V0cHV0X2NvbW1lbnQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLnJl
c29sdmVfaW5uZXIuQWRIb2NUeXBlQ29udGV4dC5hZGRfdHlwZSk6CisgICAgICAgIChBcnJheUJp
bmRpbmcucmVzb2x2ZV9pbm5lci5SZXNvbHZlRGF0YSk6CisgICAgICAgIChBcnJheUJpbmRpbmcu
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChBcnJheUJpbmRpbmcucmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEFycmF5QmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLnJlc29sdmVfaW5uZXIpOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfbmFtZSk6CisgICAgICAgIChU
eXBlRGF0YSk6CisgICAgICAgIChUeXBlRGF0YS5nZXRfZG9tYWluX25hbWUpOgorICAgICAgICAo
cmVzb2x2ZV9wYXJhbV90eXBlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QpOgor
ICAgICAgICAoTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChOZWVk
UnVudGltZUNhc3RSZXF1ZXN0LmFja25vd2xlZGdlKToKKyAgICAgICAgKE5lZWRSdW50aW1lQ2Fz
dFJlcXVlc3QuaXNfYWNrbm93bGVkZ2VkKToKKyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzKToK
KyAgICAgICAgKHJlc29sdmVfYWxsX3R5cGVzLkZvcndhcmRMaXN0ZW5lcik6CisgICAgICAgIChy
ZXNvbHZlX2FsbF90eXBlcy5Gb3J3YXJkTGlzdGVuZXIuYWRkX3R5cGVfZGF0YSk6CisgICAgICAg
IChyZXNvbHZlX2FsbF90eXBlcy5SZXNvbHZlQ29udGV4dCk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkFkSG9jVHlwZUNvbnRleHQp
OgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuQWRIb2NUeXBlQ29udGV4dC5hZGRf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lcik6CisgICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19ldmVudC5FdmVudEZvcndhcmRMaXN0
ZW5lci5hZGRfdHlwZV9kYXRhKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50LkV2
ZW50UmVzb2x2ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQuRXZl
bnRHZW5lcmF0ZUNvbnRleHQpOgorICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXMuR2Vu
ZXJhdGVDb250ZXh0KToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzLmNyZWF0ZV90
eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzLmdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6c2l6ZSk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNGQzNTY2OTY5
NjMzZDRkNjFjYzlhNzVkZmViMjQ0MjYwOWNlMWQ3Zi4uY2Q1NWMzZGNmZTM0OTMwMjk2ZmJmZDJl
NzljMWE0ZmIzOWQ3MjEwZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU2LDYgKzU2LDkgQEAgVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7CiB9CiAKIAorVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFtd
KQorCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5lcyIpCkBAIC0xNzQsNiArMTc3LDggQEAgY2xh
c3MgQ2FwaXRhbGl6ZXI6CiAKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAi
RE9NIiwgIkNTUyJdKQogCitWQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJUX0RJU0FCTEVE
IgorCiAKIGNsYXNzIERvbWFpbk5hbWVGaXhlczoKICAgICBAY2xhc3NtZXRob2QKQEAgLTI0NSw2
ICsyNTAsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKIAogICAgIGNsYXNzIEJhc2VU
eXBlKG9iamVjdCk6CisgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
CisKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgogICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0
X2NfcGFyYW1fdHlwZQpAQCAtMjU3LDYgKzI2NCwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3Qp
OgogICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAg
IHJldHVybiAiJiIKIAorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHJlcXVlc3Rf
cmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgorICAgICAgICAgICAgaWYgbm90IGNscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgUmF3VHlwZXMudHlw
ZXNfdG9fZ2VuZXJhdGVfdmFsaWRhdG9yXy5hcHBlbmQoY2xzKQorICAgICAgICAgICAgICAgIGNs
cy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZW5lcmF0ZV92YWxpZGF0ZV9tZXRob2QoY2xzLCB3cml0ZXIpOgor
ICAgICAgICAgICAgcGFyYW1zID0gY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCkKKyAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdGF0aWMgdm9pZCBhc3NlcnQlcyhJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpXG4iICUgcGFyYW1zLm5hbWUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgJXMgdjtcbiIgJSBwYXJh
bXMudmFyX3R5cGUpCisgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hcyVzKCZ2KTtcbiIgJSBwYXJhbXMuYXNfbWV0aG9kX25hbWUpCisgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
XG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxuXG4iKQorCisgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
CisgICAgICAgICAgICByZXR1cm4gImFzc2VydCVzIiAlIGNscy5nZXRfdmFsaWRhdGVfbWV0aG9k
X3BhcmFtcygpLm5hbWUKKworICAgIHR5cGVzX3RvX2dlbmVyYXRlX3ZhbGlkYXRvcl8gPSBbXQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZHMoY2xz
LCB3cml0ZXIpOgorICAgICAgICBmb3IgdCBpbiBjbHMudHlwZXNfdG9fZ2VuZXJhdGVfdmFsaWRh
dG9yXzoKKyAgICAgICAgICAgIGlmIHQubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgorICAg
ICAgICAgICAgICAgIHQuZ2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcikKKworCiAgICAg
Y2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRl
ZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgpAQCAtMjc5LDYg
KzMxNSwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCiAKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKKyAgICAg
ICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAgICAgICAgICAgIG5hbWUg
PSAiU3RyaW5nIgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gIlN0cmluZyIKKyAgICAgICAg
ICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJTdHJpbmciCisgICAgICAgICAgICByZXR1cm4gVmFs
aWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgi
U3RyaW5nIikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcm
IikKIApAQCAtMjk5LDYgKzM0MywxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAg
ICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCiAK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9w
YXJhbXMoKToKKyAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgorICAgICAg
ICAgICAgICAgIG5hbWUgPSAiSW50IgorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gImludCIK
KyAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJOdW1iZXIiCisgICAgICAgICAgICBy
ZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKKwogICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlw
ZSA9IENQYXJhbVR5cGUoImludCIpCiAKICAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgpAQCAt
MzE4LDYgKzM3MCwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0
X2pzX2JpbmRfdHlwZSgpOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRl
ZCIpCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21l
dGhvZF9wYXJhbXMoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCisKICAg
ICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQogCiAgICAg
Y2xhc3MgQm9vbChCYXNlVHlwZSk6CkBAIC0zNDksNiArNDA1LDEwIEBAIGNsYXNzIFJhd1R5cGVz
KG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgog
ICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgorICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJUT0RPIikKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9v
bCIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3Qi
LCAiKiVzIikKIApAQCAtMzgyLDYgKzQ0MiwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgog
ICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJl
dHVybiAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0
ZV9tZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQor
CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IikKIApAQCAtNDExLDYgKzQ3NSwxNyBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKICAgICAg
ICAgICAgIHJldHVybiBUcnVlCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2VuZXJhdGVfdmFsaWRhdGVfbWV0aG9kKHdyaXRlcik6CisgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgic3RhdGljIHZvaWQgYXNzZXJ0QW55KEluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIpCisg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgie1xuIikKKyAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLy8gTm8tb3AuXG4iKQorICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn1cblxu
XG4iKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpOgorICAgICAgICAgICAgcmV0dXJuICJhc3NlcnRBbnkiCisKICAgICAg
ICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQog
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IikKIApAQCAtNDQ2LDYgKzUyMSwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAg
ICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKICAgICAgICAgICAgIHJldHVy
biAiIgogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9t
ZXRob2RfcGFyYW1zKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQorCiAg
ICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIpCiAKQEAgLTU1Nyw3ICs2MzYsOCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAg
ICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UKLSAgICAg
ICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlID0gIlR5
cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIKKyAgICAgICAgICAgIGZ1
bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFp
bl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBk
ZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzgsNyArNjU4LDggQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxl
LCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAgICAgY2xh
c3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQotICAgICAgICAgICAgZnVs
bF9uYW1lX3ByZWZpeCA9ICIiCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
PSAiIgorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBl
X2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTk2LDE0ICs2
NzcsMzEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgaWYgImVudW0iIGluIGpz
b25fdHlwYWJsZToKIAogICAgICAgICAgICAgICAgIGNsYXNzIEVudW1CaW5kaW5nOgotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
Y29kZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZF91c2VyX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KGNscywgcmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdlKCkKKwor
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQorCisgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVf
Z2VuZXJhdG9yKGVudW1fYmluZGluZ19jbHMpOgogICAgICAgICAgICAgICAgICAgICAgICAgI0ZJ
WE1FOiBnZW5lcmF0ZSBhZC1ob2MgZW51bXMgdG9vIG9uY2Ugd2UgZmlndXJlIG91dCBob3cgdG8g
YmV0dGVyIGltcGxlbWVudCB0aGVtIGluIEMrKy4KICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnRfb3V0ID0gaGVscGVyLmlzX2FkX2hvYwogCiAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVt
Il0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCkBAIC02MjUsNiArNzIzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVz
IiAlIGVudW1fcG9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiLFxuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB9O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51
bV9iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IHlldCBpbXBsZW1lbnRlZCIp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5u
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
c3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2Vu
ZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52
YWxpZGF0b3Jfd3JpdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGws
IGVudW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBXVEY6OlN0cmluZyBzO1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVChjYXN0X3Jlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgbGVuKGVudW0pID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25fbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50
KGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uX2xpc3QuYXBwZW5kKCJzID09IFwiJXNcIiIgJSBlbnVtX2l0ZW0pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgQVNTRVJUKCVzKTtcbiIgJSBqb2luKGNvbmRpdGlvbl9saXN0LCAiIHx8ICIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCJ9XG5cblxuIikKKworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIlxuXG4iKQpAQCAtNjQwLDggKzc2MSwxMiBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCisKKyAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQo
Y2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXggKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKIAogICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0
dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgpAQCAtNjU2LDEwICs3ODEsMjYgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6CiAK
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5TdHJpbmc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQi
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Io
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCisgICAgICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKQEAgLTY3NywxMSArODE4LDIzIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICBlbHNlOgogCiAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIFR5cGVkZWZTdHJpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2
ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSYXdUeXBlcy5TdHJpbmcucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVy
YXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2Vu
ZXJhdGVfY29udGV4dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
ZXIud3JpdGVfZG9jKHdyaXRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKQEAg
LTY5OCw2ICs4NTEsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKIAorICAgICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCisKICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nCkBAIC03MDgsNyArODY1LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgog
CiAgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiY29uc3QgJXMlcyYiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQogCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCiAKQEAgLTcxNiwxMSArODczLDcxIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29uX3R5cGFibGU6
CiAKICAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRpbmc6Ci0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVy
YXRvcigpOgorICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQorICAgICAg
ICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisKKyAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNscy5yZXNvbHZlX2RhdGFfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9w
ZXJ0aWVzIl0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQorCisgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9saXN0ID0gW10KKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4g
cHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9w
WyJuYW1lIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0
ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX2ltcGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0
b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQuZm9yd2FyZF9saXN0
ZW5lcikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFByb3BlcnR5RGF0YToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gYmlu
ZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJvcAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0eURhdGEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBSZXNvbHZlRGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3By
b3BlcnRpZXMgPSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJv
cGVydGllcyA9IG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5
cGVzID0gYWRfaG9jX3R5cGVfY29udGV4dC5hZF9ob2NfdHlwZV9saXN0CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIGFkX2hvYyBpbiBhZF9ob2NfdHlwZV9saXN0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkX2hvYy5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4dCkK
KworICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nh
c3RfID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgp
CisgICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3QoKQorCisgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5tYWluX3Byb3Bl
cnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcu
cmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFs
X3J1bnRpbWVfY2FzdCgpCisKKyAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoY2xhc3NfYmluZGluZ19jbHMp
OgogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNscywgd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKGNscywgd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZV9kYXRhID0gY2xhc3NfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRh
XwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRl
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVk
X3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCkBAIC03MzAsMTQgKzk0NywxMCBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJwdWJsaWM6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwYWJsZVsicHJv
cGVydGllcyJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGll
cyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRp
ZXMgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwcm9wZXJ0
aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIm9wdGlvbmFsIiBp
biBwIGFuZCBwWyJvcHRpb25hbCJdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMuYXBwZW5kKHApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1haW5fcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIGFkX2hvY190eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZXM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hv
Y190eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5
cGVfd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKICIiIiAgICBlbnVtIHsKQEAgLTc0NSwx
MCArOTU4LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICIiIikKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zID0gW10KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbGVuKG1haW5fcHJvcGVydGllcykgPiAwOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykg
PiAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gbWFpbl9wcm9wZXJ0aWVzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0
YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocFsibmFtZSJdKSArICJTZXQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihw
cm9wX2RhdGEucFsibmFtZSJdKSArICJTZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
ID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCkBAIC03ODAsMTIgKzk5MywxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAiIiIgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsi
bmFtZSJdCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBl
X2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBp
biBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRp
bGluZSgiIiIKQEAgLTgwNCwxMCArMTAxNSw2IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1z
W3Bvc10pKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcyArPSAxCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgpAQCAtODI5LDggKzEwMzYsOCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgLypcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3Vs
dCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJc
biAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAg
ICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKQEAgLTg0MCwxMSAr
MTA0Nyw5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICB9CiAiIiIgJSBjbGFzc19uYW1lKQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG9wdGlvbmFsX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUg
PSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hv
Y190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJvcF9uYW1lLCBmaXhl
ZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2Jp
bmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29udGV4dF9kb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBy
b3BfZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9
IHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVs
X2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcGFyYW1fdHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9k
ZXMocGFyYW1fdHlwZV9iaW5kaW5nKToKQEAgLTg1MiwzOCArMTA1Nyw1OCBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVf
dGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhc
IiVzXCIsICVzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJf
bmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRf
c2V0dGVyX25hbWUoKSwgcHJvcF9kYXRhLnBbIm5hbWUiXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xp
c3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJf
bmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdDo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFt
ZSwgd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmRfbGlzdGVuZXIg
PSBmb3J3YXJkX2xpc3RlbmVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihz
ZWxmLnByb3BlcnR5X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNs
YXNzX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUg
Y2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZf
TkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpO1xuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNc
biIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZiglcykg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTtcbiIgJSBjbGFz
c19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCVzKj4ob2JqZWN0LmdldCgpKTtcbiIgJSBj
bGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB9XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiXG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNs
YXNzX2JpbmRpbmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElE
QVRPUl9JRkRFRl9OQU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBn
ZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRD
b3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxuIiAlIChoZWxwZXIuZnVsbF9uYW1l
X3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0UmVzID0g
dmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFJlcywgY2FzdFJlcyk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBp
dDtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRh
IGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaXQgPSBvYmpl
Y3QtPmZpbmQoXCIlc1wiKTtcbiIgJSBwcm9wX2RhdGEucFsibmFtZSJdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVChpdCAhPSBvYmplY3QtPmVuZCgpKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgJXMoaXQtPnNl
Y29uZC5nZXQoKSk7XG4iICUgcHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpbnQgY291bnQgPSAlcztcbiIgJSBsZW4ocmVz
b2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm9wdGlvbmFsX3Byb3BlcnRp
ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgaXQgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSBwcm9wX2Rh
dGEucFsibmFtZSJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGlmIChpdCAhPSBvYmplY3QtPmVuZCgpKSB7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgiICAgICAgICAlcyhpdC0+c2Vjb25kLmdldCgpKTtcbiIgJSBwcm9wX2RhdGEu
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgICAgICsrY291bnQ7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VS
VChjb3VudCA9PSBvYmplY3QtPnNpemUoKSk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG5cblxuIikKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVy
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIi8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJyVzJyB3aGlsZSBnZW5lcmF0aW5n
ICVzLlxuIiAlIChzZWxmLnByb3BlcnR5X25hbWUsIHNlbGYuY2xhc3NfbmFtZSkpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHNl
bGYsIGNvZGVfZ2VuZXJhdG9yKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihzZWxmLndyaXRlciwgc2VsZi5m
b3J3YXJkX2xpc3RlbmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgifTtcblxuIikKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9k
ZWNsYXJhdGlvbih3cml0ZXIpOgpAQCAtOTAyLDkgKzExMjcsMTMgQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCisg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgorCiAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNs
cywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRy
PCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
ICsgIj4iCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhl
bHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFt
ZSArICI+IgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CkBAIC05
MTQsMTQgKzExNDMsNTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuT2JqZWN0CiAKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBl
Q29udGV4dEltcGw6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
cHJvcGVydHlfbmFtZSwgY2xhc3NfbmFtZSwgcmVzb2x2ZV9jb250ZXh0LCBhZF9ob2NfdHlwZV9s
aXN0LCBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wcm9wZXJ0eV9uYW1lID0gcHJvcGVydHlfbmFtZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnJlc29sdmVfY29udGV4dCA9IHJlc29sdmVfY29udGV4dAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlzdCA9IGFkX2hvY190eXBl
X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5lcl9mdWxsX25h
bWVfcHJlZml4ID0gcGFyZW50X2Z1bGxfbmFtZV9wcmVmaXggKyBjbGFzc19uYW1lICsgIjo6Igor
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoc2VsZik6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nh
c2VfdG9fdXBwZXIoc2VsZi5wcm9wZXJ0eV9uYW1lKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnJXMn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2VsZi5jbGFz
c19uYW1lKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShzZWxmLCBiaW5kaW5nKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QuYXBwZW5kKGJp
bmRpbmcpCisKICAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3NCaW5kaW5nCiAgICAgICAgICAg
ICBlbHNlOgogCiAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5PYmplY3RCaW5kaW5nOgorICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIHJl
c29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Io
KToKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAorICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBv
cnRlZCIpCisKICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFt
X3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQoKQpAQCAtOTM4LDEyICsx
MjA0LDY3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgZWxpZiBqc29uX3R5cGFibGVb
InR5cGUiXSA9PSAiYXJyYXkiOgogCiAgICAgICAgICAgICBjbGFzcyBBcnJheUJpbmRpbmc6Ci0g
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgIGRlZiBnZXRfY29k
ZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQorICAg
ICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCisKKyAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5l
cihjbHMsIHJlc29sdmVfY29udGV4dCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGNscy5yZXNv
bHZlX2RhdGFfOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAg
ICAgICAgICAgYWRfaG9jX3R5cGVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgaWYgIml0ZW1z
IiBpbiBqc29uX3R5cGFibGU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9j
VHlwZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX2Z1bGxf
bmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF90eXBlX25hbWVfZml4KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5hbWVGaXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1l
ID0gIkl0ZW0iCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29t
bWVudCh3cml0ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZpeAorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRfaG9jX3R5cGVzLmFwcGVuZChiaW5kaW5nKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUoanNvbl90eXBhYmxl
WyJpdGVtcyJdLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQorICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9iaW5kaW5n
ID0gUmF3VHlwZUJpbmRpbmcoUmF3VHlwZXMuQW55KQorCisgICAgICAgICAgICAgICAgICAgIGNv
ZGVfZ2VuZXJhdG9yID0gaXRlbV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAg
ICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKHJlc29sdmVfY29udGV4dC5mb3J3YXJkX2xpc3Rl
bmVyKQorCisgICAgICAgICAgICAgICAgICAgIGNsYXNzIFJlc29sdmVEYXRhOgorICAgICAgICAg
ICAgICAgICAgICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSBpdGVtX2JpbmRpbmcKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlwZXMKKworICAgICAg
ICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCisKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIHQgaW4gYWRfaG9jX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdC5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4dCkKKworICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KGNscywgcmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90
IGltcGxlbWVudGVkIHlldCIpCisKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKKyAgICAg
ICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKKyAg
ICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90eXBlX2JpbmRpbmcucmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihhcnJheV9iaW5kaW5n
X2Nscyk6CiAKICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBn
ZW5lcmF0ZV9jb250ZXh0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3Jp
dGVfZG9jKHdyaXRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0g
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQpAQCAtOTU2LDI3ICsxMjc3LDE0
IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgicHVibGljOlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9ICJJdGVtIgot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1
dF9jb21tZW50KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTmFtZUZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0
YSA9IGFycmF5X2JpbmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9y
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRv
ci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3Rl
bmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2NfdHlwZSBpbiByZXNv
bHZlX2RhdGEuYWRfaG9jX3R5cGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVf
YnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFt
X3R5cGUoanNvbl90eXBhYmxlWyJpdGVtcyJdLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBBZEhvY1R5
cGVDb250ZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlwZV9iaW5kaW5nID0gUmF3VHlwZUJpbmRpbmco
UmF3VHlwZXMuQW55KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlwZV9iaW5k
aW5nID0gcmVzb2x2ZV9kYXRhLml0ZW1fdHlwZV9iaW5kaW5nCiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgaXRlbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9t
b2RlcyhpdGVtX3R5cGVfYmluZGluZyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgdm9pZCBhZGRJdGVtIikKQEAgLTk5Miw5ICsxMzAwLDIxIEBA
IGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICVzKCkpO1xuIiAlIGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2Vu
ZXJhdG9yID0gaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVu
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfYmluZGluZ19jbHMubmVl
ZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNcbiIg
JSBWQUxJREFUT1JfSUZERUZfTkFNRSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52YWxpZGF0b3Jfd3JpdGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
dm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxuIiAl
IChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTtcbiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlRfVU5VU0VEKGNhc3RS
ZXMsIGNhc3RSZXMpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5s
ZW5ndGgoKTsgKytpKSB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMoYXJyYXktPmdldChpKS5nZXQoKSk7XG4i
ICUgcmVzb2x2ZV9kYXRhLml0ZW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgIH1cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgifVxuXG5cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKIApAQCAtMTAxNSw5ICsxMzM1LDEzIEBAIGNsYXNz
IFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRv
cgogCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVs
cGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
ICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgorCiAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9k
CiAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzJXM+IiAlIChoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeCwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiUGFzc1JlZlB0cjwlcyVzPiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9w
cmVmaXhfZm9yX3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCiAKICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CkBAIC0xMDM4LDkgKzEzNjIsMjEgQEAgY2xhc3MgUmF3VHlw
ZUJpbmRpbmc6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd190eXBlKToKICAgICAgICAgc2Vs
Zi5yYXdfdHlwZV8gPSByYXdfdHlwZQogCisgICAgZGVmIHJlc29sdmVfaW5uZXIoc2VsZiwgcmVz
b2x2ZV9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50
aW1lX2Nhc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBw
b3J0ZWQiKQorCisgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KHNlbGYpOgor
ICAgICAgICBzZWxmLnJhd190eXBlXy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
KQorCiAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihzZWxmKToKICAgICAgICAgcmV0dXJuIE5v
bmUKIAorICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYucmF3X3R5cGVfLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCisKICAgICBk
ZWYgZ2V0X2luX2NfdHlwZV90ZXh0KHNlbGYsIG9wdGlvbmFsKToKICAgICAgICAgcmV0dXJuIHNl
bGYucmF3X3R5cGVfLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCku
Z2V0X3RleHQoKQogCkBAIC0xMDg1LDYgKzE0MjEsMTIgQEAgY2xhc3MgVHlwZURhdGEob2JqZWN0
KToKICAgICBkZWYgZ2V0X2pzb25fdHlwZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuanNv
bl90eXBlXwogCisgICAgZGVmIGdldF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5q
c29uX3R5cGVfWyJpZCJdCisKKyAgICBkZWYgZ2V0X2RvbWFpbl9uYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdCisKIAogY2xhc3MgRG9tYWluRGF0
YToKICAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgpAQCAtMTEzNSw5ICsxNDc3
LDcgQEAgZGVmIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgogICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdl
dF9iaW5kaW5nKCkKICAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFtZXRlcjoKICAgICAgICAg
cmVzdWx0ID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlvbihqc29u
X3BhcmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCi0gICAg
ICAgIGNvZGVfZ2VuZXJhdG9yID0gcmVzdWx0LmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAg
IGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dC5jYWxs
X2dlbmVyYXRlX3R5cGVfYnVpbGRlcihjb2RlX2dlbmVyYXRvcikKKyAgICAgICAgYWRfaG9jX3R5
cGVfY29udGV4dC5hZGRfdHlwZShyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQKICAgICBl
bHNlOgogICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCkBAIC0xMzI5LDcg
KzE2NjksNyBAQCAkc2V0dGVycwogCiAgICAgZW51bSBNZXRob2ROYW1lcyB7CiAkbWV0aG9kTmFt
ZXNFbnVtQ29udGVudAotfTsKKyAgICB9OwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1h
bmROYW1lc1tdOwogCkBAIC0xNzE2LDYgKzIwNTYsMTAgQEAgU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7CiAKIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKKyNpZiAi
IiIgKyBWQUxJREFUT1JfSUZERUZfTkFNRSArICIiIgorJHZhbGlkYXRvckNvZGUKKyNlbmRpZiAv
LyAiIiIgKyBWQUxJREFUT1JfSUZERUZfTkFNRSArICIiIgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTczNyw2ICsyMDgxLDYzIEBA
ICRkb21haW5Jbml0aWFsaXplcnMKIHR5cGVfbWFwID0gVHlwZU1hcChqc29uX2FwaSkKIAogCitj
bGFzcyBOZWVkUnVudGltZUNhc3RSZXF1ZXN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgc2VsZi5hY2tfID0gTm9uZQorCisgICAgZGVmIGFja25vd2xlZGdlKHNlbGYpOgorICAg
ICAgICBzZWxmLmFja18gPSBUcnVlCisKKyAgICBkZWYgaXNfYWNrbm93bGVkZ2VkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5hY2tfCisKKworZGVmIHJlc29sdmVfYWxsX3R5cGVzKCk6Cisg
ICAgcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzID0ge30KKyAgICBmb3IgdHlwZV9uYW1l
IGluIFRZUEVTX1dJVEhfUlVOVElNRV9DQVNUX1NFVDoKKyAgICAgICAgcnVudGltZV9jYXN0X2dl
bmVyYXRlX3JlcXVlc3RzW3R5cGVfbmFtZV0gPSBOZWVkUnVudGltZUNhc3RSZXF1ZXN0KCkKKwor
ICAgIGNsYXNzIEZvcndhcmRMaXN0ZW5lcjoKKyAgICAgICAgdHlwZV9kYXRhX3NldCA9IHNldCgp
CisgICAgICAgIGFscmVhZHlfZGVjbGFyZWRfc2V0ID0gc2V0KCkKKworICAgICAgICBAY2xhc3Nt
ZXRob2QKKyAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEoY2xzLCB0eXBlX2RhdGEpOgorICAgICAg
ICAgICAgaWYgdHlwZV9kYXRhIG5vdCBpbiBjbHMuYWxyZWFkeV9kZWNsYXJlZF9zZXQ6CisgICAg
ICAgICAgICAgICAgY2xzLnR5cGVfZGF0YV9zZXQuYWRkKHR5cGVfZGF0YSkKKworICAgIGNsYXNz
IFJlc29sdmVDb250ZXh0OgorICAgICAgICBmb3J3YXJkX2xpc3RlbmVyID0gRm9yd2FyZExpc3Rl
bmVyCisKKyAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgorICAgICAg
ICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6CisgICAgICAgICAgICAjIERv
IG5vdCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBlIGFueSBsb25nZXIuCisgICAgICAg
ICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5cGVfZGF0YSkK
KworICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpCisgICAgICAg
ICAgICBiaW5kaW5nLnJlc29sdmVfaW5uZXIoUmVzb2x2ZUNvbnRleHQpCisKKyAgICBmb3IgZG9t
YWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgorICAgICAgICBmb3IgdHlwZV9kYXRhIGlu
IGRvbWFpbl9kYXRhLnR5cGVzKCk6CisgICAgICAgICAgICBmdWxsX3R5cGVfbmFtZSA9ICIlcy4l
cyIgJSAodHlwZV9kYXRhLmdldF9kb21haW5fbmFtZSgpLCB0eXBlX2RhdGEuZ2V0X25hbWUoKSkK
KyAgICAgICAgICAgIHJlcXVlc3QgPSBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMucG9w
KGZ1bGxfdHlwZV9uYW1lLCBOb25lKQorICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5n
ZXRfYmluZGluZygpCisgICAgICAgICAgICBpZiByZXF1ZXN0OgorICAgICAgICAgICAgICAgIGJp
bmRpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KQorCisgICAgICAgICAgICBp
ZiByZXF1ZXN0IGFuZCBub3QgcmVxdWVzdC5pc19hY2tub3dsZWRnZWQoKToKKyAgICAgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50aW1lQ2FzdCBpbiAi
ICsgZnVsbF90eXBlX25hbWUpCisKKyAgICBmb3IgZnVsbF90eXBlX25hbWUgaW4gcnVudGltZV9j
YXN0X2dlbmVyYXRlX3JlcXVlc3RzOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0
byBnZW5lcmF0ZSBydW50aW1lQ2FzdC4gVHlwZSAiICsgZnVsbF90eXBlX25hbWUgKyAiIG5vdCBm
b3VuZCIpCisKKyAgICByZXR1cm4gRm9yd2FyZExpc3RlbmVyCisKKworZ2xvYmFsX2ZvcndhcmRf
bGlzdGVuZXIgPSByZXNvbHZlX2FsbF90eXBlcygpCisKKworCiBkZWYgZ2V0X2Fubm90YXRlZF90
eXBlX3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToKICAgICBpZiBhbm5vdGF0ZWRfdHlw
ZSAhPSByYXdfdHlwZToKICAgICAgICAgcmV0dXJuICIvKiVzKi8gJXMiICUgKGFubm90YXRlZF90
eXBlLCByYXdfdHlwZSkKQEAgLTE4MTYsOSArMjIxNywxNCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAg
ICAgZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KICAgICB0eXBlX2J1aWxkZXJf
ZnJhZ21lbnRzID0gW10KICAgICB0eXBlX2J1aWxkZXJfZm9yd2FyZHMgPSBbXQorICAgIHZhbGlk
YXRvcl9pbXBsX2xpc3QgPSBbXQorICAgIHZhbGlkYXRvcl9pbXBsX3Jhd190eXBlc19saXN0ID0g
W10KKwogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBnbygpOgorICAgICAgICBHZW5lcmF0
b3IudmFsaWRhdG9yX2ltcGxfbGlzdC5hcHBlbmQoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX3Jh
d190eXBlc19saXN0KQorCiAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFw
KQogCiAgICAgICAgIGZpcnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QgPSBbCkBAIC0xOTA1
LDEzICsyMzExLDEwIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICBmb3IgbCBp
biByZXZlcnNlZChzb3J0ZWRfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCk6CiAgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShsKQogCisgICAgICAgIFJhd1R5
cGVzLmdlbmVyYXRlX3ZhbGlkYXRlX21ldGhvZHMoV3JpdGVyKEdlbmVyYXRvci52YWxpZGF0b3Jf
aW1wbF9yYXdfdHlwZXNfbGlzdCwgIiIpKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBw
cm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2RfZGVj
bGFyYXRpb25fbGluZXMpOgotICAgICAgICBjbGFzcyBOb09wRm9yd2FyZExpc3RlbmVyOgotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEodHlw
ZV9kYXRhKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KICAgICAgICAgZXZlbnRfbmFtZSA9IGpz
b25fZXZlbnRbIm5hbWUiXQogICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCiAgICAgICAgIG1l
dGhvZF9saW5lX2xpc3QgPSBbXQpAQCAtMTkzNSw3ICsyMzM4LDExIEBAIGNsYXNzIEdlbmVyYXRv
cjoKIAogICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9v
cHRpb25hbAogCisgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtdCisKICAgICAg
ICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgorICAgICAgICAgICAgICAgICAgICBj
b250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKKwogICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
dHlwZV9uYW1lX2ZpeCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoK
QEAgLTE5NDgsMTEgKzIzNTUsMzAgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5hbWVGaXgKIAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcihj
b2RlX2dlbmVyYXRvcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5n
ZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBOb09wRm9yd2FyZExpc3Rl
bmVyKQorICAgICAgICAgICAgICAgICAgICBkZWYgYWRkX3R5cGUoYmluZGluZyk6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQogCiAgICAg
ICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25f
cGFyYW1ldGVyLCBkb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKIAorICAgICAgICAgICAg
ICAgIGNsYXNzIEV2ZW50Rm9yd2FyZExpc3RlbmVyOgorICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKHR5cGVfZGF0
YSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICBjbGFz
cyBFdmVudFJlc29sdmVDb250ZXh0OgorICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2xpc3Rl
bmVyID0gRXZlbnRGb3J3YXJkTGlzdGVuZXIKKworICAgICAgICAgICAgICAgIGZvciB0eXBlIGlu
IGFkX2hvY190eXBlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHR5cGUucmVzb2x2ZV9pbm5l
cihFdmVudFJlc29sdmVDb250ZXh0KQorCisgICAgICAgICAgICAgICAgY2xhc3MgRXZlbnRHZW5l
cmF0ZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSAibm90
IHN1cHBvcnRlZCBpbiBFdmVudEdlbmVyYXRlQ29udGV4dCIKKworICAgICAgICAgICAgICAgIGZv
ciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ciA9IHR5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2Vu
ZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVf
YnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIEV2ZW50R2VuZXJhdGVDb250ZXh0KQorCiAgICAg
ICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChjX3R5
cGUuZ2V0X3RleHQoKSwgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChqc29u
X29wdGlvbmFsKSkKIAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9saXN0LmFwcGVuZCgiJXMg
JXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0ZXJfbmFtZSkpCkBAIC0yMDc4LDE0ICsyNTA0
LDggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToK
ICAgICAgICAgb3V0cHV0ID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMKIAotICAg
ICAgICBjbGFzcyBGb3J3YXJkTGlzdGVuZXI6Ci0gICAgICAgICAgICB0eXBlX2RhdGFfc2V0ID0g
c2V0KCkKLSAgICAgICAgICAgIGFscmVhZHlfZGVjbGFyZWRfc2V0ID0gc2V0KCkKLQotICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5
cGVfZGF0YSk6Ci0gICAgICAgICAgICAgICAgaWYgdHlwZV9kYXRhIG5vdCBpbiBjbHMuYWxyZWFk
eV9kZWNsYXJlZF9zZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGNscy50eXBlX2RhdGFfc2V0LmFk
ZCh0eXBlX2RhdGEpCisgICAgICAgIGNsYXNzIEdlbmVyYXRlQ29udGV4dDoKKyAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xpc3Qs
ICIiKQogCiAgICAgICAgIGRlZiBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dCwgdHlwZV9k
YXRhX2NhbGxiYWNrKToKICAgICAgICAgICAgIHdyaXRlciA9IFdyaXRlcihvdXQsICIiKQpAQCAt
MjExOSwxMyArMjUzOSwxMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgZGVmIGNyZWF0
ZV90eXBlX2J1aWxkZXJfY2FsbGVyKGdlbmVyYXRlX3Bhc3NfaWQpOgogICAgICAgICAgICAgZGVm
IGNhbGxfdHlwZV9idWlsZGVyKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAg
ICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9yd2FyZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2Vy
LgotICAgICAgICAgICAgICAgIEZvcndhcmRMaXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3NldC5h
ZGQodHlwZV9kYXRhKQotCiAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSB0eXBlX2Rh
dGEuZ2V0X2JpbmRpbmcoKS5nZXRfY29kZV9nZW5lcmF0b3IoKQogICAgICAgICAgICAgICAgIGlm
IGNvZGVfZ2VuZXJhdG9yIGFuZCBnZW5lcmF0ZV9wYXNzX2lkID09IGNvZGVfZ2VuZXJhdG9yLmdl
dF9nZW5lcmF0ZV9wYXNzX2lkKCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IHdyaXRl
cl9nZXR0ZXIoKQotICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90
eXBlX2J1aWxkZXIod3JpdGVyLCBGb3J3YXJkTGlzdGVuZXIpCisKKyAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgR2VuZXJhdGVD
b250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIGNhbGxfdHlwZV9idWlsZGVyCiAKICAgICAgICAg
Z2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXRwdXQsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2Fs
bGVyKFR5cGVCdWlsZGVyUGFzcy5NQUlOKSkKQEAgLTIxMzMsNyArMjU1MSw3IEBAIGNsYXNzIEdl
bmVyYXRvcjoKICAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQo
Ii8vIEZvcndhcmQgZGVjbGFyYXRpb25zLlxuIikKIAogICAgICAgICBkZWYgZ2VuZXJhdGVfZm9y
d2FyZF9jYWxsYmFjayh0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAgICAgaWYg
dHlwZV9kYXRhIGluIEZvcndhcmRMaXN0ZW5lci50eXBlX2RhdGFfc2V0OgorICAgICAgICAgICAg
aWYgdHlwZV9kYXRhIGluIGdsb2JhbF9mb3J3YXJkX2xpc3RlbmVyLnR5cGVfZGF0YV9zZXQ6CiAg
ICAgICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpCiAgICAgICAg
ICAgICAgICAgYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKS5nZW5lcmF0ZV9mb3J3YXJkX2Rl
Y2xhcmF0aW9uKHdyaXRlcl9nZXR0ZXIoKSkKICAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNf
Y29kZShHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCBnZW5lcmF0ZV9mb3J3YXJkX2Nh
bGxiYWNrKQpAQCAtMjE4OCw3ICsyNjA2LDggQEAgYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCiBmcm9udGVuZF9jcHBfZmlsZS53cml0ZShU
ZW1wbGF0ZXMuZnJvbnRlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKICAgICBjb25zdHJ1Y3Rvcklu
aXQ9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiIiksCiAg
ICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIiksCi0g
ICAgZW51bUNvbnN0YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRfY29k
ZSgpKSkKKyAgICBlbnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25z
dGFudF9jb2RlKCksCisgICAgdmFsaWRhdG9yQ29kZT1qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0
b3IudmFsaWRhdG9yX2ltcGxfbGlzdCksICIiKSkpCiAKIGJhY2tlbmRfY3BwX2ZpbGUud3JpdGUo
VGVtcGxhdGVzLmJhY2tlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKICAgICBtZXRob2ROYW1lRGVj
bGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25f
bGlzdCwgIlxuIiksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgK
aW5kZXggZTEwMGFkZWFkMjFkMDBlNjIxZTMyZTYwOWUxOTU2YmFlOTljY2JlNy4uNzA3YzI3NmFl
YWU2OWVmN2Y1M2ZlNThiM2JhMGYxZjNiNjJkMzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMjA1LDYgKzIwNSw4IEBAIHB1YmxpYzoKICAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CiAg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CiAK
KyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KKwogcHJvdGVj
dGVkOgogICAgIEluc3BlY3Rvck9iamVjdCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123766</attachid>
            <date>2012-01-24 10:43:11 -0800</date>
            <delta_ts>2012-01-24 10:43:11 -0800</delta_ts>
            <desc>Sample of new InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>161734</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCi8vIFR5cGVkZWZzLgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0g
Ly8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQovLyBFbmQgb2YgdHlwZWRlZnMuCgoKClN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CgpuYW1lc3BhY2UgTWVtb3J5IHsKLyogTnVt
YmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8KY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEg
PDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZU5hbWVTZXQgfCBDb3VudFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5v
ZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9k
ZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlfbm9kZU5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb3VudFNldD4mIHNldENvdW50KGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb3Vu
dFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3Vu
dD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBv
ZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IENvdW50U2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0
eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExpc3RlbmVyQ291bnQ+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKSk7CiAgICB9Cn07Cgov
KiBDaGFyYWN0ZXIgZGF0YSBzdGF0aXN0aWNzIGZvciB0aGUgcGFnZS4gKi8KY2xhc3MgU3RyaW5n
U3RhdGlzdGljcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRG9tU2V0ID0gMSA8PCAwLAogICAgICAg
IEpzU2V0ID0gMSA8PCAxLAogICAgICAgIFNoYXJlZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoRG9tU2V0IHwgSnNTZXQgfCBTaGFyZWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdTdGF0
aXN0aWNzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRG9tU2V0PiYgc2V0
RG9tKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEb21TZXQpLCBwcm9wZXJ0eV9kb21fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJkb20iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RG9tU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEpzU2V0PiYg
c2V0SnMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEpzU2V0KSwgcHJvcGVydHlfanNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJqcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxKc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaGFyZWRTZXQ+
JiBzZXRTaGFyZWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNoYXJlZFNldCksIHByb3BlcnR5X3NoYXJlZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNoYXJlZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTaGFyZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8U3RyaW5nU3RhdGlzdGljcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFN0cmluZ1N0YXRp
c3RpY3M+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8U3RyaW5nU3RhdGlzdGljcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTdHJpbmdTdGF0aXN0aWNz
PiByZXN1bHQgPSBTdHJpbmdTdGF0aXN0aWNzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXREb20o
Li4uKQogICAgICogICAgIC5zZXRKcyguLi4pCiAgICAgKiAgICAgLnNldFNoYXJlZCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFN0cmluZ1N0YXRp
c3RpY3MoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNvdW50
JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpN
ZW1vcnk6Ok5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVD
b3VudD4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVDb3Vu
dCgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J2xpc3RlbmVyQ291bnQnIHdoaWxlIGdlbmVyYXRpbmcgRE9NR3JvdXAuCiAgICBjbGFzcyBMaXN0
ZW5lckNvdW50IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAg
TGlzdGVuZXJDb3VudCgpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gY3JlYXRlKCkgewogICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExpc3RlbmVyQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsK
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2l6ZVNldCA9IDEg
PDwgMCwKICAgICAgICBUaXRsZVNldCA9IDEgPDwgMSwKICAgICAgICBOb2RlQ291bnRTZXQgPSAx
IDw8IDIsCiAgICAgICAgTGlzdGVuZXJDb3VudFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoU2l6ZVNldCB8IFRpdGxlU2V0IHwgTm9kZUNvdW50U2V0IHwgTGlzdGVuZXJDb3Vu
dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBET01Hcm91cDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVT
ZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQpLCBwcm9wZXJ0eV90
aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVDb3VudFNldD4mIHNldE5vZGVDb3Vu
dChQYXNzUmVmUHRyPE5vZGVDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUNvdW50U2V0KSwgcHJvcGVydHlfbm9kZUNvdW50X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZUNvdW50U2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0
ZW5lckNvdW50KFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlzdGVuZXJDb3VudFNldCksIHByb3Bl
cnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3VwPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxE
T01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNpemUo
Li4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVDb3VudCgu
Li4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91cCgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE1lbW9yeQoK
bmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFzIGl0IHdhcyBwZXJjZWl2ZWQgYnkg
dGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNvdXJjZVR5cGUgewogICAgZW51bSBF
bnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAgU3R5bGVzaGVldCA9IDEsCiAgICAg
ICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAgICAgIFNjcmlwdCA9IDQsCiAgICAg
ICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAogICAgICAgIE90aGVyID0gNywKICAg
IH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBG
cmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElk
U2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0gMSA8PCAxLAogICAgICAgIFVybFNl
dCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNldCB8IE1pbWVUeXBlU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJh
bWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2FkZXJJZFNldD4m
IHNldExvYWRlcklkKGNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpMb2FkZXJJZCYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRT
ZXQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExvYWRlcklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVy
bFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBl
U2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxG
cmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0g
RnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9h
ZGVySWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlw
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZy
YW1lKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWN1cml0eU9y
aWdpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c2VjdXJpdHlPcmlnaW4iLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8K
Y2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRGcmFtZXMnIHdoaWxlIGdl
bmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICBjbGFzcyBDaGlsZEZyYW1lcyA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIENoaWxkRnJhbWVzKCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENoaWxkRnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2hpbGRGcmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRy
ZWUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJp
dmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3Mg
SXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgZW51bSB7CiAgICAgICAgICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgICAgICAg
ICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAg
ICAgICAgICAgICAgTWltZVR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IE1pbWVUeXBlU2V0KQogICAgICAgICAgICB9OwoK
ICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgICAgICAgICBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxJdGVtPiBwdHIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgSXRlbTsKICAgICAgICAg
ICAgcHVibGljOgogICAgICAgIAogICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNl
dD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWltZVR5cGVTZXQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxJdGVtPiYgKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SXRlbT4qPigm
bV9yZXN1bHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8SXRlbT4gKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEl0ZW0+KCp0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAgICAgICAgICogUmVmUHRyPEl0ZW0+IHJlc3VsdCA9IEl0ZW06OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAgICAgICAgICAgKi8K
ICAgICAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgSXRlbSgpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIGFk
ZEl0ZW0oUGFzc1JlZlB0cjxJdGVtPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMt
PnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVzb3VyY2VzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVz
b3VyY2VzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIEZyYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFJlc291cmNlc1NldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRnJhbWVTZXQgfCBSZXNvdXJjZXNTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBGcmFtZVNldD4mIHNldEZyYW1lKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBGcmFtZVNldCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RnJhbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8UmVzb3VyY2VzPiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNvdXJjZXNT
ZXQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxSZXNvdXJjZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
RnJhbWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVS
ZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3Vs
dCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VUcmVlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAwLAogICAgICAgIExpbmVDb250ZW50
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChMaW5lTnVtYmVyU2V0IHwgTGlu
ZUNvbnRlbnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCks
IHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TGluZUNvbnRlbnRTZXQ+JiBzZXRMaW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVDb250ZW50U2V0
KSwgcHJvcGVydHlfbGluZUNvbnRlbnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxMaW5lQ29udGVudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWFyY2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAq
LwpjbGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwg
MCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAxLAogICAgICAgIE1hdGNoZXNDb3VudFNldCA9
IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgRnJhbWVJZFNldCB8IE1h
dGNoZXNDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlf
dXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBU
eXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hl
c0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNYXRjaGVzQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1
bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3Vu
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNl
YXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tp
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNl
dCA9IDEgPDwgMSwKICAgICAgICBEb21haW5TZXQgPSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9
IDEgPDwgMywKICAgICAgICBFeHBpcmVzU2V0ID0gMSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAx
IDw8IDUsCiAgICAgICAgSHR0cE9ubHlTZXQgPSAxIDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0g
MSA8PCA3LAogICAgICAgIFNlc3Npb25TZXQgPSAxIDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCB8IERvbWFpblNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0
IHwgU2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwgU2VjdXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tp
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBW
YWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UGF0aFNldD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF0aFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVzU2V0PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCks
IHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4
cGlyZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4m
IHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEh0dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIdHRwT25seVNldCksIHByb3BlcnR5X2h0dHBP
bmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBP
bmx5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3Vy
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNlY3VyZVNldCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U2VjdXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Np
b25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lv
biIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tp
ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAq
ICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAg
LnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0
SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRT
ZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewov
KiBNaXJyb3Igb2JqZWN0IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQgb2JqZWN0LiAq
LwpjbGFzcyBSZW1vdGVPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBS
ZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgT2JqZWN0ID0gOCwKICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAogICAgICAgICAgICBV
bmRlZmluZWQgPSAxMCwKICAgICAgICAgICAgU3RyaW5nID0gMTEsCiAgICAgICAgICAgIE51bWJl
ciA9IDEyLAogICAgICAgICAgICBCb29sZWFuID0gMTMsCiAgICAgICAgfTsKI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICB9OyAvLyBzdHJ1
Y3QgVHlwZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxl
IGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFN1YnR5cGUgewogICAgICAgIGVu
dW0gRW51bSB7CiAgICAgICAgICAgIEFycmF5ID0gMTQsCiAgICAgICAgICAgIE51bGwgPSAxNSwK
ICAgICAgICAgICAgTm9kZSA9IDE2LAogICAgICAgICAgICBSZWdleHAgPSAxNywKICAgICAgICAg
ICAgRGF0ZSA9IDE4LAogICAgICAgIH07CiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgc3Rh
dGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRp
ZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVt
IHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVtb3RlT2JqZWN0Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlbW90ZU9i
amVjdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVtb3RlT2JqZWN0
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90ZU9iamVjdD4gcmVzdWx0ID0gUmVtb3RlT2JqZWN0
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVtb3RlT2JqZWN0KCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRW
YWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmpl
Y3RJZCIsIHZhbHVlKTsKICAgIH0KICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4g
cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgICAgIGJvb2wgY2FzdFJlcyA9
IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMs
IGNhc3RSZXMpOwojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIGFzc2VydENvcnJlY3RWYWx1
ZShvYmplY3QuZ2V0KCkpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoUmVtb3RlT2JqZWN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW1vdGVP
YmplY3QqPihvYmplY3QuZ2V0KCkpOwogICAgfQoKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0
YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwojZW5k
aWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8qIE9iamVjdCBwcm9wZXJ0eSBkZXNjcmlwdG9y
LiAqLwpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5hbWVT
ZXQgPSAxIDw8IDAsCiAgICAgICAgV3JpdGFibGVTZXQgPSAxIDw8IDEsCiAgICAgICAgQ29uZmln
dXJhYmxlU2V0ID0gMSA8PCAyLAogICAgICAgIEVudW1lcmFibGVTZXQgPSAxIDw8IDMsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBXcml0YWJsZVNldCB8IENvbmZpZ3VyYWJsZVNl
dCB8IEVudW1lcmFibGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TmFtZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV3JpdGFibGVT
ZXQ+JiBzZXRXcml0YWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFdyaXRhYmxlU2V0KSwgcHJvcGVydHlfd3JpdGFibGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigid3JpdGFibGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V3JpdGFibGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29uZmlndXJhYmxlU2V0PiYgc2V0Q29uZmlndXJh
YmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29uZmlndXJhYmxlU2V0KSwgcHJvcGVydHlfY29uZmlndXJhYmxlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbmZpZ3VyYWJsZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25maWd1cmFibGVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRW51bWVyYWJsZVNldD4mIHNldEVudW1lcmFi
bGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFbnVtZXJhYmxlU2V0KSwgcHJvcGVydHlfZW51bWVyYWJsZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJlbnVtZXJhYmxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVudW1lcmFibGVTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
UHJvcGVydHlEZXNjcmlwdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PFByb3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNjcmlwdG9yOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0V3JpdGFibGUoLi4uKQog
ICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICogICAgIC5zZXRFbnVtZXJhYmxl
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUHJv
cGVydHlEZXNjcmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rv
ck9iamVjdDo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0R2V0KFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZXQoUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Rocm93
bihib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIFJlcHJlc2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4g
RWl0aGVyIHJlbW90ZSBvYmplY3QgaWQgPGNvZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2
ZSA8Y29kZT52YWx1ZTwvY29kZT4gb3IgbmVpdGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBz
aG91bGQgYmUgc3BlY2lmaWVkLiAqLwpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEFy
Z3VtZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENhbGxBcmd1bWVudD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q2FsbEFyZ3VtZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxBcmd1bWVudD4gcmVzdWx0ID0g
Q2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDYWxsQXJndW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0Ojpz
ZXRWYWx1ZTsKCgogICAgdm9pZCBzZXRPYmplY3RJZChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIFJ1bnRpbWUKCm5hbWVzcGFjZSBD
b25zb2xlIHsKLyogQ29uc29sZSBtZXNzYWdlLiAqLwpjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1
Y3QgU291cmNlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBIdG1sID0gMTksCiAg
ICAgICAgICAgIFdtbCA9IDIwLAogICAgICAgICAgICBYbWwgPSAyMSwKICAgICAgICAgICAgSmF2
YXNjcmlwdCA9IDIyLAogICAgICAgICAgICBOZXR3b3JrID0gMjMsCiAgICAgICAgICAgIENvbnNv
bGVfYXBpID0gMjQsCiAgICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgfTsKICAgIH07IC8v
IHN0cnVjdCBTb3VyY2UKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdsZXZlbCcg
d2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBMZXZlbCB7CiAgICAg
ICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgVGlwID0gMjYsCiAgICAgICAgICAgIExvZyA9IDI3
LAogICAgICAgICAgICBXYXJuaW5nID0gMjgsCiAgICAgICAgICAgIEVycm9yID0gMjksCiAgICAg
ICAgICAgIERlYnVnID0gMzAsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBMZXZlbAoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgQ29u
c29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgTG9nID0gMjcsCiAgICAgICAgICAgIERpciA9IDMxLAogICAgICAgICAgICBEaXJ4bWwg
PSAzMiwKICAgICAgICAgICAgVHJhY2UgPSAzMywKICAgICAgICAgICAgU3RhcnRHcm91cCA9IDM0
LAogICAgICAgICAgICBTdGFydEdyb3VwQ29sbGFwc2VkID0gMzUsCiAgICAgICAgICAgIEVuZEdy
b3VwID0gMzYsCiAgICAgICAgICAgIEFzc2VydCA9IDM3LAogICAgICAgIH07CiAgICB9OyAvLyBz
dHJ1Y3QgVHlwZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3BhcmFtZXRlcnMn
IHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBjbGFzcyBQYXJhbWV0ZXJzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgUGFyYW1ldGVycygp
IHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGFyYW1ldGVycz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFBhcmFtZXRlcnMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU291cmNlU2V0ID0gMSA8PCAwLAogICAgICAgIExldmVs
U2V0ID0gMSA8PCAxLAogICAgICAgIFRleHRTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFNvdXJjZVNldCB8IExldmVsU2V0IHwgVGV4dFNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvbnNvbGVNZXNzYWdlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDb25zb2xlTWVzc2Fn
ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4mIHNldFNv
dXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGV2ZWxTZXQ+JiBzZXRMZXZlbChM
ZXZlbDo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBMZXZlbFNldCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibGV2ZWwiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExldmVsU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRleHRTZXQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGV4
dFNldCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRl
eHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q29uc29sZU1lc3Nh
Z2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxDb25zb2xlTWVzc2FnZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb25zb2xlTWVzc2FnZT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+IHJlc3VsdCA9IENvbnNvbGVNZXNzYWdlOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRTb3VyY2UoLi4uKQogICAgICogICAgIC5zZXRMZXZlbCguLi4pCiAg
ICAgKiAgICAgLnNldFRleHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDb25zb2xlTWVzc2FnZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUeXBl
KFR5cGU6OkVudW0gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0eXBlIiwg
Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVwZWF0Q291
bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigicmVwZWF0Q291bnQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8UGFyYW1l
dGVycz4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInBhcmFtZXRlcnMiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFy
cmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TmV0d29ya1JlcXVl
c3RJZChjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1ZSk7CiAgICB9
Cn07CgovKiBTdGFjayBlbnRyeSBmb3IgY29uc29sZSBlcnJvcnMgYW5kIGFzc2VydGlvbnMuICov
CmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRnVuY3Rpb25OYW1lU2V0ID0g
MSA8PCAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0g
MSA8PCAyLAogICAgICAgIENvbHVtbk51bWJlclNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoRnVuY3Rpb25OYW1lU2V0IHwgVXJsU2V0IHwgTGluZU51bWJlclNldCB8IENvbHVt
bk51bWJlclNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ2FsbEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRnVuY3Rpb25OYW1lU2V0PiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnVuY3Rpb25O
YW1lU2V0KSwgcHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEZ1bmN0aW9uTmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0
eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpbmVOdW1iZXJTZXQ+JiBzZXRMaW5lTnVtYmVy
KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBMaW5lTnVtYmVyU2V0KSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TGluZU51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OdW1iZXJTZXQ+JiBzZXRDb2x1bW5OdW1iZXIoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVt
bk51bWJlclNldCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q2FsbEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxG
cmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0Q29sdW1uTnVt
YmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIENhbGwgZnJhbWVzIGZvciBhc3NlcnRpb25zIG9y
IGVycm9yIG1lc3NhZ2VzLiAqLwpjbGFzcyBTdGFja1RyYWNlIDogcHVibGljIEluc3BlY3RvckFy
cmF5IHsKcHJpdmF0ZToKICAgIFN0YWNrVHJhY2UoKSB7IH0KCnB1YmxpYzoKICAgIHZvaWQgYWRk
SXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDYWxsRnJhbWU+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgfQoKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0YWNrVHJhY2U+IGNyZWF0ZSgpIHsKICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0YWNrVHJhY2UoKSk7CiAgICB9Cn07Cgp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBOZXR3
b3JrIHsKLyogVGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgcmVxdWVzdC4gKi8KY2xhc3MgUmVz
b3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFJlcXVlc3RUaW1lU2V0ID0gMSA8PCAw
LAogICAgICAgIFByb3h5U3RhcnRTZXQgPSAxIDw8IDEsCiAgICAgICAgUHJveHlFbmRTZXQgPSAx
IDw8IDIsCiAgICAgICAgRG5zU3RhcnRTZXQgPSAxIDw8IDMsCiAgICAgICAgRG5zRW5kU2V0ID0g
MSA8PCA0LAogICAgICAgIENvbm5lY3RTdGFydFNldCA9IDEgPDwgNSwKICAgICAgICBDb25uZWN0
RW5kU2V0ID0gMSA8PCA2LAogICAgICAgIFNzbFN0YXJ0U2V0ID0gMSA8PCA3LAogICAgICAgIFNz
bEVuZFNldCA9IDEgPDwgOCwKICAgICAgICBTZW5kU3RhcnRTZXQgPSAxIDw8IDksCiAgICAgICAg
U2VuZEVuZFNldCA9IDEgPDwgMTAsCiAgICAgICAgUmVjZWl2ZUhlYWRlcnNFbmRTZXQgPSAxIDw8
IDExLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSZXF1ZXN0VGltZVNldCB8IFByb3h5U3RhcnRT
ZXQgfCBQcm94eUVuZFNldCB8IERuc1N0YXJ0U2V0IHwgRG5zRW5kU2V0IHwgQ29ubmVjdFN0YXJ0
U2V0IHwgQ29ubmVjdEVuZFNldCB8IFNzbFN0YXJ0U2V0IHwgU3NsRW5kU2V0IHwgU2VuZFN0YXJ0
U2V0IHwgU2VuZEVuZFNldCB8IFJlY2VpdmVIZWFkZXJzRW5kU2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzb3VyY2VUaW1pbmc+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlVGlt
aW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVxdWVzdFRpbWVTZXQ+
JiBzZXRSZXF1ZXN0VGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUmVxdWVzdFRpbWVTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0VGlt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlcXVlc3RU
aW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RUaW1lU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFByb3h5U3RhcnRTZXQ+JiBz
ZXRQcm94eVN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBQcm94eVN0YXJ0U2V0KSwgcHJvcGVydHlfcHJveHlTdGFydF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5U3RhcnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHJveHlTdGFydFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQcm94eUVuZFNldD4mIHNldFByb3h5RW5k
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQcm94eUVuZFNldCksIHByb3BlcnR5X3Byb3h5RW5kX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UHJveHlFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRG5zU3RhcnRTZXQ+JiBzZXREbnNTdGFydChkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRG5zU3RhcnRTZXQpLCBw
cm9wZXJ0eV9kbnNTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoImRuc1N0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERu
c1N0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERuc0VuZFNl
dD4mIHNldERuc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRG5zRW5kU2V0KSwgcHJvcGVydHlfZG5zRW5kX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zRW5kIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERuc0VuZFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0U3RhcnRTZXQ+JiBzZXRDb25uZWN0U3RhcnQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bm5lY3RTdGFydFNldCksIHByb3BlcnR5X2Nvbm5lY3RTdGFydF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RTdGFydCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0U3RhcnRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdEVuZFNldD4mIHNldENvbm5lY3RFbmQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bm5lY3RFbmRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0RW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdEVuZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNzbFN0YXJ0U2V0PiYgc2V0U3NsU3RhcnQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNzbFN0YXJ0U2V0KSwg
cHJvcGVydHlfc3NsU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJzc2xTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
c2xTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTc2xFbmRT
ZXQ+JiBzZXRTc2xFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNzbEVuZFNldCksIHByb3BlcnR5X3NzbEVuZF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbEVuZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTc2xFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU2VuZFN0YXJ0U2V0PiYgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5kU3Rh
cnRTZXQpLCBwcm9wZXJ0eV9zZW5kU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U2VuZFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNlbmRFbmRTZXQ+JiBzZXRTZW5kRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5kRW5kU2V0KSwgcHJvcGVydHlfc2Vu
ZEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNlbmRF
bmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VuZEVuZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZWNlaXZlSGVhZGVyc0VuZFNldD4m
IHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZWNlaXZlSGVhZGVyc0VuZFNldCksIHByb3BlcnR5
X3JlY2VpdmVIZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8UmVjZWl2ZUhlYWRlcnNFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRpbWlu
Zz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxS
ZXNvdXJjZVRpbWluZz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVz
b3VyY2VUaW1pbmc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+IHJlc3VsdCA9
IFJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0VGltZSguLi4p
CiAgICAgKiAgICAgLnNldFByb3h5U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRQcm94eUVuZCgu
Li4pCiAgICAgKiAgICAgLnNldERuc1N0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RG5zRW5kKC4u
LikKICAgICAqICAgICAuc2V0Q29ubmVjdFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVj
dEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNzbFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U3Ns
RW5kKC4uLikKICAgICAqICAgICAuc2V0U2VuZFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U2Vu
ZEVuZCguLi4pCiAgICAgKiAgICAgLnNldFJlY2VpdmVIZWFkZXJzRW5kKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkp
OwogICAgfQp9OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBNZXRob2RTZXQgPSAxIDw8
IDEsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
VXJsU2V0IHwgTWV0aG9kU2V0IHwgSGVhZGVyc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlcXVlc3Q+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBw
cm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1ldGhvZFNldD4mIHNldE1ldGhvZChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1ldGhvZFNldCksIHByb3BlcnR5X21ldGhvZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXRob2RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlcXVlc3Q+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlcXVlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVx
dWVzdD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlcXVlc3QoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
SFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgIFN0YXR1c1NldCA9IDEgPDwgMSwKICAgICAgICBT
dGF0dXNUZXh0U2V0ID0gMSA8PCAyLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDMsCiAgICAg
ICAgTWltZVR5cGVTZXQgPSAxIDw8IDQsCiAgICAgICAgQ29ubmVjdGlvblJldXNlZFNldCA9IDEg
PDwgNSwKICAgICAgICBDb25uZWN0aW9uSWRTZXQgPSAxIDw8IDYsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFVybFNldCB8IFN0YXR1c1NldCB8IFN0YXR1c1RleHRTZXQgfCBIZWFkZXJzU2V0IHwg
TWltZVR5cGVTZXQgfCBDb25uZWN0aW9uUmV1c2VkU2V0IHwgQ29ubmVjdGlvbklkU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVz
cG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc3Bv
bnNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJs
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dGF0dXNTZXQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzVGV4dFNldD4mIHNldFN0YXR1c1RleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTdGF0dXNUZXh0U2V0KSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzVGV4dFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1p
bWVUeXBlU2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb25uZWN0aW9uUmV1c2VkU2V0PiYgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbm5lY3Rp
b25SZXVzZWRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uUmV1c2VkX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbm5lY3Rpb25SZXVzZWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdGlvblJldXNlZFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0aW9uSWRTZXQ+JiBzZXRDb25u
ZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvbm5lY3Rpb25JZFNldCksIHByb3BlcnR5X2Nvbm5lY3Rpb25JZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3Rpb25JZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0aW9uSWRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzcG9uc2U+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzcG9uc2U+IHJlc3VsdCA9IFJlc3Bv
bnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTdGF0
dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVh
ZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLikKICAgICAqICAgICAuc2V0Q29u
bmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25JZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc3BvbnNlKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJoZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJlcXVlc3RIZWFkZXJzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJyZXF1ZXN0SGVhZGVyc1RleHQiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRGcm9tRGlza0NhY2hlKGJvb2wgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiZnJvbURpc2tDYWNoZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFRpbWluZyhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNv
dXJjZVRpbWluZz4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmci
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBX
ZWJTb2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSZXF1ZXN0S2V5M1NldCA9IDEg
PDwgMCwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChSZXF1ZXN0S2V5M1NldCB8IEhlYWRlcnNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0Owog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVxdWVzdEtleTNTZXQ+JiBzZXRS
ZXF1ZXN0S2V5Myhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFJlcXVlc3RLZXkzU2V0KSwgcHJvcGVydHlfcmVxdWVzdEtl
eTNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
S2V5MyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXF1ZXN0S2V5M1Nl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0
SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hl
YWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFk
ZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiByZXN1bHQgPSBXZWJTb2NrZXRSZXF1ZXN0OjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0S2V5MyguLi4pCiAgICAgKiAgICAgLnNldEhlYWRl
cnMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBX
ZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAgIH0KfTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRh
LiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3RhdHVz
U2V0ID0gMSA8PCAwLAogICAgICAgIFN0YXR1c1RleHRTZXQgPSAxIDw8IDEsCiAgICAgICAgSGVh
ZGVyc1NldCA9IDEgPDwgMiwKICAgICAgICBDaGFsbGVuZ2VSZXNwb25zZVNldCA9IDEgPDwgMywK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RhdHVzU2V0IHwgU3RhdHVzVGV4dFNldCB8IEhlYWRl
cnNTZXQgfCBDaGFsbGVuZ2VSZXNwb25zZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1
cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU3RhdHVzU2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTdGF0dXNUZXh0U2V0PiYgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1RleHRT
ZXQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdGF0dXNUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFk
ZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
aGFsbGVuZ2VSZXNwb25zZVNldD4mIHNldENoYWxsZW5nZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ2hh
bGxlbmdlUmVzcG9uc2VTZXQpLCBwcm9wZXJ0eV9jaGFsbGVuZ2VSZXNwb25zZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNoYWxsZW5nZVJlc3BvbnNlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENoYWxsZW5nZVJlc3BvbnNlU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNl
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNw
b25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0
U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5z
ZXRDaGFsbGVuZ2VSZXNwb25zZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9y
bWF0aW9uIGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNzIENhY2hlZFJlc291cmNl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgVHlwZVNldCA9
IDEgPDwgMSwKICAgICAgICBCb2R5U2l6ZVNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IEJvZHlTaXplU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNl
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBl
U2V0PiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCb2R5U2l6ZVNldD4mIHNldEJvZHlTaXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCb2R5U2l6ZVNldCksIHByb3BlcnR5
X2JvZHlTaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
Ym9keVNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qm9keVNpemVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJlc3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAg
ICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBDYWNoZWRSZXNvdXJjZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXNwb25z
ZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IEluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGluaXRpYXRvci4gKi8KY2xhc3MgSW5pdGlh
dG9yIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgSW5pdGlhdG9yLgogICAgc3Ry
dWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFBhcnNlciA9IDM4LAog
ICAgICAgICAgICBTY3JpcHQgPSAzOSwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9
OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlw
ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPEluaXRpYXRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgSW5pdGlhdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlw
ZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8SW5pdGlhdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPEluaXRpYXRvcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8SW5pdGlhdG9yPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaXRpYXRvcj4gcmVzdWx0ID0g
SW5pdGlhdG9yOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkpKTsKICAgIH0K
CiAgICB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6
U3RhY2tUcmFjZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJh
Y2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldExpbmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51
bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVj
dC4gKi8KY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAw
LAogICAgICAgIERvbWFpblNldCA9IDEgPDwgMSwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAyLAog
ICAgICAgIFZlcnNpb25TZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKElkU2V0
IHwgRG9tYWluU2V0IHwgTmFtZVNldCB8IFZlcnNpb25TZXQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQp
LCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlf
bmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWZXJzaW9uU2V0PiYgc2V0VmVyc2lvbihjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZlcnNpb25TZXQpLCBwcm9wZXJ0eV92ZXJzaW9uX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxWZXJzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPERhdGFiYXNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RGF0YWJhc2U+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPERhdGFiYXNlPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPERhdGFiYXNlPiByZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0SWQoLi4uKQogICAgICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1l
KC4uLikKICAgICAqICAgICAuc2V0VmVyc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0KfTsKCn0gLy8gRGF0
YWJhc2UKCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCm5hbWVzcGFjZSBJbmRleGVkREIgewovKiBPcmlnaW4gd2l0aCBkYXRhYmFzZSBu
YW1lcyBhbmQgZnJhbWUgaWRzLiAqLwpjbGFzcyBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ2RhdGFiYXNlTmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVXaXRoRGF0YWJhc2VO
YW1lcy4KICAgIGNsYXNzIERhdGFiYXNlTmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewog
ICAgcHJpdmF0ZToKICAgICAgICBEYXRhYmFzZU5hbWVzKCkgeyB9CgogICAgcHVibGljOgogICAg
ICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgdGhpcy0+cHVzaFN0cmluZyh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZU5hbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRGF0YWJhc2VOYW1lcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAg
ICAgIFNlY3VyaXR5T3JpZ2luU2V0ID0gMSA8PCAxLAogICAgICAgIERhdGFiYXNlTmFtZXNTZXQg
PSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKEZyYW1lSWRTZXQgfCBTZWN1cml0eU9y
aWdpblNldCB8IERhdGFiYXNlTmFtZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVdpdGhEYXRhYmFz
ZU5hbWVzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVJZFNldD4m
IHNldEZyYW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZyYW1lSWRTZXQp
LCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxG
cmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlY3VyaXR5
T3JpZ2luU2V0PiYgc2V0U2VjdXJpdHlPcmlnaW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWN1cml0eU9yaWdpblNl
dCksIHByb3BlcnR5X3NlY3VyaXR5T3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygic2VjdXJpdHlPcmlnaW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2VjdXJpdHlPcmlnaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRGF0YWJhc2VOYW1lc1NldD4mIHNldERhdGFiYXNlTmFtZXMoUGFzc1Jl
ZlB0cjxEYXRhYmFzZU5hbWVzPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBEYXRhYmFzZU5hbWVzU2V0KSwgcHJvcGVydHlfZGF0YWJhc2VOYW1l
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZGF0YWJhc2VO
YW1lcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEYXRhYmFzZU5hbWVz
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lV2l0aERhdGFi
YXNlTmFtZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lV2l0aERh
dGFiYXNlTmFtZXM+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1l
V2l0aERhdGFiYXNlTmFtZXM+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VO
YW1lcz4gcmVzdWx0ID0gRnJhbWVXaXRoRGF0YWJhc2VOYW1lczo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldFNlY3VyaXR5T3JpZ2luKC4uLikKICAg
ICAqICAgICAuc2V0RGF0YWJhc2VOYW1lcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aERhdGFiYXNlTmFtZXMoKSkpOwogICAgfQp9
OwoKfSAvLyBJbmRleGVkREIKCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKbmFt
ZXNwYWNlIERPTVN0b3JhZ2UgewovKiBET00gU3RvcmFnZSBlbnRyeS4gKi8KY2xhc3MgRW50cnkg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIEhvc3RTZXQgPSAxIDw8IDAsCiAgICAgICAgSXNMb2NhbFN0
b3JhZ2VTZXQgPSAxIDw8IDEsCiAgICAgICAgSWRTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEhvc3RTZXQgfCBJc0xvY2FsU3RvcmFnZVNldCB8IElkU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RW50cnk+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEVudHJ5OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSG9zdFNldD4mIHNldEhvc3QoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBIb3N0U2V0KSwgcHJvcGVydHlfaG9zdF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImhvc3QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SG9zdFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJc0xvY2Fs
U3RvcmFnZVNldD4mIHNldElzTG9jYWxTdG9yYWdlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSXNMb2NhbFN0b3JhZ2VTZXQpLCBwcm9w
ZXJ0eV9pc0xvY2FsU3RvcmFnZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxJc0xvY2FsU3RvcmFnZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBJZFNldD4mIHNldElkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiaWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFbnRyeT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFbnRyeT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8RW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RW50cnk+
IHJlc3VsdCA9IEVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRIb3N0KC4uLikKICAgICAq
ICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoLi4uKQogICAgICogICAgIC5zZXRJZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEVudHJ5KCkpKTsKICAg
IH0KfTsKCn0gLy8gRE9NU3RvcmFnZQoKbmFtZXNwYWNlIEFwcGxpY2F0aW9uQ2FjaGUgewovKiBE
ZXRhaWxlZCBhcHBsaWNhdGlvbiBjYWNoZSByZXNvdXJjZSBpbmZvcm1hdGlvbi4gKi8KY2xhc3Mg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAx
IDw8IDAsCiAgICAgICAgU2l6ZVNldCA9IDEgPDwgMSwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAy
LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBTaXplU2V0IHwgVHlwZVNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJv
cGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaXplU2V0PiYgc2V0U2l6ZShpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNl
dCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAg
LnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKCkp
KTsKICAgIH0KfTsKCi8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIGluZm9ybWF0aW9uLiAq
LwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Jlc291cmNlcycgd2hpbGUgZ2Vu
ZXJhdGluZyBBcHBsaWNhdGlvbkNhY2hlLgogICAgY2xhc3MgUmVzb3VyY2VzIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVzb3VyY2VzKCkgeyB9CgogICAg
cHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZXNvdXJjZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTWFuaWZlc3RVUkxTZXQgPSAxIDw8IDAs
CiAgICAgICAgU2l6ZVNldCA9IDEgPDwgMSwKICAgICAgICBDcmVhdGlvblRpbWVTZXQgPSAxIDw8
IDIsCiAgICAgICAgVXBkYXRlVGltZVNldCA9IDEgPDwgMywKICAgICAgICBSZXNvdXJjZXNTZXQg
PSAxIDw8IDQsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1hbmlmZXN0VVJMU2V0IHwgU2l6ZVNl
dCB8IENyZWF0aW9uVGltZVNldCB8IFVwZGF0ZVRpbWVTZXQgfCBSZXNvdXJjZXNTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBBcHBsaWNhdGlvbkNhY2hlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWFuaWZlc3RVUkxTZXQ+JiBzZXRNYW5pZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hbmlmZXN0VVJMU2V0
KSwgcHJvcGVydHlfbWFuaWZlc3RVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxNYW5pZmVzdFVSTFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTaXplU2V0PiYgc2V0U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCksIHByb3BlcnR5X3NpemVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ3JlYXRpb25UaW1lU2V0PiYgc2V0Q3JlYXRpb25UaW1lKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
cmVhdGlvblRpbWVTZXQpLCBwcm9wZXJ0eV9jcmVhdGlvblRpbWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjcmVhdGlvblRpbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q3JlYXRpb25UaW1lU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFVwZGF0ZVRpbWVTZXQ+JiBzZXRVcGRhdGVUaW1lKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBV
cGRhdGVUaW1lU2V0KSwgcHJvcGVydHlfdXBkYXRlVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInVwZGF0ZVRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VXBkYXRlVGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBSZXNvdXJjZXNTZXQ+JiBzZXRSZXNvdXJjZXMoUGFzc1JlZlB0cjxSZXNv
dXJjZXM+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJlc291cmNlc1NldCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFJlc291cmNlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1h
bmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldENy
ZWF0aW9uVGltZSguLi4pCiAgICAgKiAgICAgLnNldFVwZGF0ZVRpbWUoLi4uKQogICAgICogICAg
IC5zZXRSZXNvdXJjZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlKCkpKTsKICAgIH0KfTsKCi8qIEZyYW1lIGlkZW50
aWZpZXIgLSBtYW5pZmVzdCBVUkwgcGFpci4gKi8KY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3QgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTWFuaWZlc3RV
UkxTZXQgPSAxIDw8IDEsCiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChGcmFtZUlkU2V0IHwgTWFuaWZlc3RVUkxTZXQgfCBTdGF0dXNTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFt
ZVdpdGhNYW5pZmVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgRnJhbWVXaXRoTWFuaWZlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJh
bWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgRnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTWFuaWZlc3RVUkxTZXQ+JiBzZXRNYW5pZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hbmlmZXN0
VVJMU2V0KSwgcHJvcGVydHlfbWFuaWZlc3RVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNYW5pZmVzdFVSTFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTdGF0dXNTZXQ+JiBzZXRTdGF0dXMoaW50IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0
YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1
cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHJlc3VsdCA9IEZyYW1lV2l0aE1hbmlmZXN0Ojpj
cmVhdGUoKQogICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0TWFuaWZl
c3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBGcmFtZVdpdGhNYW5pZmVzdCgpKSk7CiAgICB9
Cn07Cgp9IC8vIEFwcGxpY2F0aW9uQ2FjaGUKCm5hbWVzcGFjZSBET00gewovKiBET00gaW50ZXJh
Y3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXBy
ZXNlbnQgdGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9y
IHR5cGUuICovCmNsYXNzIE5vZGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRp
bmcgTm9kZS4KICAgIGNsYXNzIENoaWxkcmVuIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAg
IHByaXZhdGU6CiAgICAgICAgQ2hpbGRyZW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxkcmVuPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2hpbGRyZW4oKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdhdHRyaWJ1dGVzJyB3aGlsZSBnZW5lcmF0aW5nIE5v
ZGUuCiAgICBjbGFzcyBBdHRyaWJ1dGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHBy
aXZhdGU6CiAgICAgICAgQXR0cmlidXRlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lk
IGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMt
PnB1c2hTdHJpbmcodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
QXR0cmlidXRlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF0
dHJpYnV0ZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgTm9kZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIE5vZGVUeXBlU2V0
ID0gMSA8PCAxLAogICAgICAgIE5vZGVOYW1lU2V0ID0gMSA8PCAyLAogICAgICAgIExvY2FsTmFt
ZVNldCA9IDEgPDwgMywKICAgICAgICBOb2RlVmFsdWVTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKE5vZGVJZFNldCB8IE5vZGVUeXBlU2V0IHwgTm9kZU5hbWVTZXQgfCBMb2Nh
bE5hbWVTZXQgfCBOb2RlVmFsdWVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBOb2RlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTm9kZUlkU2V0PiYgc2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlSWRTZXQpLCBwcm9wZXJ0eV9ub2RlSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZUlkU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVUeXBlU2V0PiYgc2V0Tm9kZVR5cGUoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5v
ZGVUeXBlU2V0KSwgcHJvcGVydHlfbm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxOb2RlVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBOb2RlTmFtZVNldD4mIHNldE5vZGVOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZU5hbWVTZXQpLCBw
cm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5v
ZGVOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExvY2FsTmFt
ZVNldD4mIHNldExvY2FsTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2FsTmFtZVNldCksIHByb3BlcnR5X2xv
Y2FsTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxv
Y2FsTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2NhbE5hbWVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZVZhbHVlU2V0PiYg
c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZVZhbHVlU2V0KSwgcHJvcGVydHlfbm9kZVZhbHVl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZVZhbHVl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVWYWx1ZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxOb2RlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
Tm9kZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxOb2RlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxOb2RlPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPE5vZGU+IHJlc3VsdCA9IE5vZGU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldE5vZGVJZCguLi4pCiAgICAgKiAgICAgLnNldE5vZGVUeXBlKC4uLikKICAgICAqICAgICAu
c2V0Tm9kZU5hbWUoLi4uKQogICAgICogICAgIC5zZXRMb2NhbE5hbWUoLi4uKQogICAgICogICAg
IC5zZXROb2RlVmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBOb2RlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkTm9kZUNvdW50KGlu
dCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50Iiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxDaGlsZHJlbj4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0QXR0cmlidXRlcyhQYXNzUmVmUHRyPEF0dHJpYnV0ZXM+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3lzdGVtSWQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN5c3Rl
bUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImludGVybmFsU3Vic2V0
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVyc2lvbihjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygieG1sVmVyc2lvbiIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidmFs
dWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoK
CiAgICB2b2lkIHNldENvbnRlbnREb2N1bWVudChQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudERvY3Vt
ZW50IiwgdmFsdWUpOwogICAgfQp9OwoKLyogRE9NIGludGVyYWN0aW9uIGlzIGltcGxlbWVudGVk
IGluIHRlcm1zIG9mIG1pcnJvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IHRoZSBhY3R1YWwgRE9N
IG5vZGVzLiBET01Ob2RlIGlzIGEgYmFzZSBub2RlIG1pcnJvciB0eXBlLiAqLwpjbGFzcyBFdmVu
dExpc3RlbmVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAg
IFVzZUNhcHR1cmVTZXQgPSAxIDw8IDEsCiAgICAgICAgSXNBdHRyaWJ1dGVTZXQgPSAxIDw8IDIs
CiAgICAgICAgTm9kZUlkU2V0ID0gMSA8PCAzLAogICAgICAgIEhhbmRsZXJCb2R5U2V0ID0gMSA8
PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0IHwgVXNlQ2FwdHVyZVNldCB8IElz
QXR0cmlidXRlU2V0IHwgTm9kZUlkU2V0IHwgSGFuZGxlckJvZHlTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBFdmVudExpc3Rl
bmVyOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBVc2VDYXB0dXJlU2V0PiYgc2V0VXNlQ2FwdHVyZShib29sIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVzZUNhcHR1cmVTZXQpLCBwcm9w
ZXJ0eV91c2VDYXB0dXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJv
b2xlYW4oInVzZUNhcHR1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VXNlQ2FwdHVyZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJc0F0
dHJpYnV0ZVNldD4mIHNldElzQXR0cmlidXRlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSXNBdHRyaWJ1dGVTZXQpLCBwcm9wZXJ0eV9p
c0F0dHJpYnV0ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFu
KCJpc0F0dHJpYnV0ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJc0F0
dHJpYnV0ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlSWRT
ZXQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgSGFuZGxlckJvZHlTZXQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEhhbmRsZXJCb2R5U2V0KSwgcHJvcGVydHlfaGFuZGxlckJvZHlfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGVyQm9keSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIYW5kbGVyQm9keVNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxFdmVudExpc3RlbmVyPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxFdmVudExpc3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJlc3Vs
dCA9IEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAg
ICogICAgIC5zZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUoLi4u
KQogICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9keSgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEV2ZW50
TGlzdGVuZXIoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0TG9jYXRpb24oUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9s
ZGluZyBhbiBSR0JBIGNvbG9yLiAqLwovLyBUeXBlIG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JB
Jy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUlNldCA9IDEgPDwgMCwKICAgICAg
ICBHU2V0ID0gMSA8PCAxLAogICAgICAgIEJTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFJTZXQgfCBHU2V0IHwgQlNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJnYmE+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSU2V0PiYgc2V0UihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUlNldCksIHByb3BlcnR5X3JfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
R1NldD4mIHNldEcoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEdTZXQpLCBwcm9wZXJ0eV9nX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxHU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJTZXQ+JiBz
ZXRCKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBCU2V0KSwgcHJvcGVydHlfYl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QlNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UmdiYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxSZ2JhPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZ2Jh
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFJnYmE+IHJlc3VsdCA9IFJnYmE6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFIoLi4uKQogICAgICogICAgIC5zZXRHKC4uLikKICAgICAqICAgICAuc2V0Qigu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJnYmEo
KSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJhdGlvbiBkYXRh
IGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNzIEhpZ2hsaWdo
dENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gMAogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SGlnaGxpZ2h0
Q29uZmlnPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBIaWdo
bGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxIaWdobGln
aHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25maWc+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxIaWdobGlnaHRDb25maWc+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiByZXN1bHQgPSBIaWdobGlnaHRDb25m
aWc6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTaG93SW5mbyhib29s
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInNob3dJbmZvIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRPTTo6UmdiYT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJjb250ZW50
Q29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYWRkaW5nQ29sb3IoUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRP
YmplY3QoInBhZGRpbmdDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEJvcmRlckNv
bG9yKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldE1hcmdpbkNvbG9yKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJtYXJnaW5Db2xvciIsIHZhbHVlKTsKICAg
IH0KfTsKCn0gLy8gRE9NCgpuYW1lc3BhY2UgQ1NTIHsKLyogVGhpcyBvYmplY3QgaWRlbnRpZmll
cyBhIENTUyBzdHlsZSBpbiBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1N0eWxlSWQgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBPcmRpbmFs
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0SWRTZXQgfCBP
cmRpbmFsU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8Q1NTU3R5bGVJZD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ1NTU3R5bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2hl
ZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgT3JkaW5hbFNldD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9yZGluYWxTZXQpLCBwcm9w
ZXJ0eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigib3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmRpbmFs
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlSWQ+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJ
ZD4gcmVzdWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVl
dElkKC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0eWxlSWQoKSkpOwogICAgfQogICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVJZD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0OwogICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwojaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpOwojZW5kaWYgIC8vICFB
U1NFUlRfRElTQUJMRUQKICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQ1NTU3R5bGVJZCkg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVJZCo+KG9iamVjdC5nZXQoKSk7CiAgICB9CgojaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAp9OwoKLyogVGhp
cyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBydWxlIGluIGEgdW5pcXVlIHdheS4gKi8KY2xhc3Mg
Q1NTUnVsZUlkIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAs
CiAgICAgICAgT3JkaW5hbFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3R5
bGVTaGVldElkU2V0IHwgT3JkaW5hbFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1J1bGVJZD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmRpbmFsU2V0PiYgc2V0T3JkaW5hbChpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3Jk
aW5hbFNldCksIHByb3BlcnR5X29yZGluYWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE9yZGluYWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
Q1NTUnVsZUlkPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGVJZD4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUnVsZUlkPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PENTU1J1bGVJZD4gcmVzdWx0ID0gQ1NTUnVsZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRT
dHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0K
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVJZD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0OwogICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0
KTsKICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwojaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpOwojZW5kaWYg
IC8vICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQ1NTUnVs
ZUlkKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwogICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NSdWxlSWQqPihvYmplY3QuZ2V0KCkpOwogICAgfQoK
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8q
IENTUyBydWxlIGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3Mg
UHNldWRvSWRSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBQc2V1ZG9J
ZFJ1bGVzLgogICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJp
dmF0ZToKICAgICAgICBSdWxlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0
ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBQc2V1ZG9JZFNldCA9IDEgPDwgMCwKICAgICAgICBS
dWxlc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUHNldWRvSWRTZXQgfCBS
dWxlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBQc2V1ZG9JZFNldD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQc2V1ZG9JZFNldCksIHByb3BlcnR5
X3BzZXVkb0lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
cHNldWRvSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHNldWRvSWRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRS
dWxlcyhQYXNzUmVmUHRyPFJ1bGVzPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxl
cz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQ
c2V1ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1
ZG9JZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBz
ZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAq
ICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBQc2V1ZG9JZFJ1bGVzKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxl
Y3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgSW5oZXJpdGVkU3R5bGVF
bnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdtYXRjaGVkQ1NTUnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcgSW5oZXJp
dGVkU3R5bGVFbnRyeS4KICAgIGNsYXNzIE1hdGNoZWRDU1NSdWxlcyA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIE1hdGNoZWRDU1NSdWxlcygpIHsgfQoKICAg
IHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3Qo
dmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1
bGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0Y2hlZENT
U1J1bGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIE1hdGNoZWRDU1NSdWxlc1NldCA9IDEgPDwgMCwKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoTWF0Y2hlZENTU1J1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVF
bnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hdGNoZWRDU1NSdWxl
c1NldD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxlcz4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hl
ZENTU1J1bGVzU2V0KSwgcHJvcGVydHlfbWF0Y2hlZENTU1J1bGVzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlZENTU1J1bGVzU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcmVzdWx0ID0gSW5oZXJpdGVkU3R5bGVF
bnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5oZXJpdGVkU3R5bGVF
bnRyeSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmpl
Y3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGluZm9ybWF0
aW9uIGZvciBhIERPTSBzdHlsZSBhdHRyaWJ1dGUuICovCmNsYXNzIENTU1N0eWxlQXR0cmlidXRl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFN0eWxlU2V0
ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgU3R5bGVTZXQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxD
U1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1l
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NT
U3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0
eWxlQXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVBdHRyaWJ1dGUoKSkp
OwogICAgfQp9OwoKLyogQ1NTIHN0eWxlc2hlZXQgbWV0YWluZm9ybWF0aW9uLiAqLwpjbGFzcyBD
U1NTdHlsZVNoZWV0SGVhZGVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQg
PSAxIDw8IDAsCiAgICAgICAgU291cmNlVVJMU2V0ID0gMSA8PCAxLAogICAgICAgIFRpdGxlU2V0
ID0gMSA8PCAyLAogICAgICAgIERpc2FibGVkU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxk
c1NldCA9IChTdHlsZVNoZWV0SWRTZXQgfCBTb3VyY2VVUkxTZXQgfCBUaXRsZVNldCB8IERpc2Fi
bGVkU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlcjsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlVVJMU2V0PiYgc2V0U291cmNlVVJM
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU291cmNlVVJMU2V0KSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVVSTFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0
bGVTZXQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRpdGxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpc2FibGVk
U2V0PiYgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBEaXNhYmxlZFNldCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpc2FibGVkU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhl
YWRlcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAg
ICAuc2V0U291cmNlVVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAg
IC5zZXREaXNhYmxlZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IENTU1N0eWxlU2hlZXRIZWFkZXIoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxl
c2hlZXQgY29udGVudHMuICovCmNsYXNzIENTU1N0eWxlU2hlZXRCb2R5IDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3J1
bGVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1N0eWxlU2hlZXRCb2R5LgogICAgY2xhc3MgUnVsZXMg
OiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSdWxlcygpIHsg
fQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NSdWxlPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hP
YmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+
IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQgPSAxIDw8IDEsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFJ1bGVzU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldEJvZHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElk
U2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBSdWxlc1NldD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8UnVsZXM+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJ1bGVzU2V0KSwg
cHJvcGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoInJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJ1bGVzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0
Qm9keTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAg
ICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0Iiwg
dmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENT
U1J1bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnb3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBz
dHJ1Y3QgT3JpZ2luIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVc2VyID0gNDAs
CiAgICAgICAgICAgIFVzZXJfYWdlbnQgPSA0MSwKICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIs
CiAgICAgICAgICAgIFJlZ3VsYXIgPSA0MywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9y
aWdpbgoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21lZGlhJyB3aGlsZSBnZW5l
cmF0aW5nIENTU1J1bGUuCiAgICBjbGFzcyBNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CiAgICBwcml2YXRlOgogICAgICAgIE1lZGlhKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZv
aWQgYWRkSXRlbShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0K
CiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWE+IGNyZWF0ZSgpIHsKICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYSgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTZWxlY3RvclRleHRTZXQgPSAxIDw8
IDAsCiAgICAgICAgU291cmNlTGluZVNldCA9IDEgPDwgMSwKICAgICAgICBPcmlnaW5TZXQgPSAx
IDw8IDIsCiAgICAgICAgU3R5bGVTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFNlbGVjdG9yVGV4dFNldCB8IFNvdXJjZUxpbmVTZXQgfCBPcmlnaW5TZXQgfCBTdHlsZVNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PENTU1J1bGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENT
U1J1bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWxlY3RvclRleHRT
ZXQ+JiBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWxlY3RvclRleHRTZXQpLCBwcm9wZXJ0
eV9zZWxlY3RvclRleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzZWxlY3RvclRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U2VsZWN0b3JUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNv
dXJjZUxpbmVTZXQ+JiBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VMaW5lU2V0KSwgcHJvcGVydHlfc291
cmNlTGluZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNv
dXJjZUxpbmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlTGlu
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBz
ZXRPcmlnaW4oT3JpZ2luOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE9yaWdpblNldCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JpZ2luU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5
bGUoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0
eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0
eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENTU1J1bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENT
U1J1bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3Jl
YXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291
cmNlTGluZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0
eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q1NTUnVsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSdWxlSWQoUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NSdWxlSWQ+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgicnVsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWxlY3RvclJhbmdlKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgic2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKFBh
c3NSZWZQdHI8TWVkaWE+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRp
YSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3VyY2UuICov
CmNsYXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGFydFNldCA9IDEgPDwg
MCwKICAgICAgICBFbmRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0YXJ0
U2V0IHwgRW5kU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIFNvdXJjZVJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU3RhcnRTZXQ+JiBzZXRTdGFydChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhcnRTZXQpLCBwcm9wZXJ0eV9zdGFydF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0IiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXJ0U2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVuZFNldD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRW5kU2V0KSwgcHJvcGVy
dHlfZW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZW5k
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVuZFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTb3VyY2VSYW5nZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFNvdXJjZVJhbmdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPFNvdXJjZVJhbmdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxTb3VyY2VSYW5nZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0
ID0gU291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4uLikKICAgICAq
ICAgICAuc2V0RW5kKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgU291cmNlUmFuZ2UoKSkpOwogICAgfQp9OwoKY2xhc3MgQ1NTQ29tcHV0ZWRTdHls
ZVByb3BlcnR5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAg
IFZhbHVlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFs
dWVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TmFtZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+
JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1bHQgPSBD
U1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4u
KQogICAgICogICAgIC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSgpKSk7CiAgICB9Cn07
CgovKiBDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1N0eWxlIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ2Nzc1Byb3BlcnRpZXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTU3R5bGUuCiAgICBjbGFzcyBD
c3NQcm9wZXJ0aWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAg
ICAgQ3NzUHJvcGVydGllcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0o
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENzc1Byb3BlcnRpZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDc3NQcm9wZXJ0aWVzKCkpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2hvcnRoYW5kRW50cmllcycgd2hpbGUg
Z2VuZXJhdGluZyBDU1NTdHlsZS4KICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMg
SW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzKCkg
eyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZh
bHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNob3J0aGFuZEVudHJp
ZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaG9ydGhhbmRF
bnRyaWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIENzc1Byb3BlcnRpZXNTZXQgPSAxIDw8IDAsCiAgICAgICAgU2hvcnRo
YW5kRW50cmllc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ3NzUHJvcGVy
dGllc1NldCB8IFNob3J0aGFuZEVudHJpZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDc3NQcm9wZXJ0aWVzU2V0PiYgc2V0Q3NzUHJvcGVydGllcyhQ
YXNzUmVmUHRyPENzc1Byb3BlcnRpZXM+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENzc1Byb3BlcnRpZXNTZXQpLCBwcm9wZXJ0eV9jc3NQcm9w
ZXJ0aWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQ
cm9wZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENzc1Byb3Bl
cnRpZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5k
RW50cmllc1NldD4mIHNldFNob3J0aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRy
aWVzPiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTaG9ydGhhbmRFbnRyaWVzU2V0KSwgcHJvcGVydHlfc2hvcnRoYW5kRW50cmllc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaG9ydGhhbmRFbnRyaWVzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTU3R5bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENTU1N0eWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlPiByZXN1bHQgPSBD
U1NTdHlsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Q3NzUHJvcGVydGllcyguLi4pCiAgICAg
KiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRT
dHlsZUlkKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4gdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRX
aWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
d2lkdGgiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJj
ZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxl
IGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVt
IEVudW0gewogICAgICAgICAgICBBY3RpdmUgPSA0NCwKICAgICAgICAgICAgSW5hY3RpdmUgPSA0
NSwKICAgICAgICAgICAgRGlzYWJsZWQgPSA0NiwKICAgICAgICAgICAgU3R5bGUgPSA0NywKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0g
MSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQ
cm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NT
UHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYg
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+
IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikK
ICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlv
cml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
cHJpb3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9r
KGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFNob3J0aGFuZE5hbWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OlNvdXJjZVJhbmdlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdl
IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3IuICovCmNs
YXNzIENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGluZyBDU1NNZWRp
YS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE1l
ZGlhUnVsZSA9IDQ4LAogICAgICAgICAgICBJbXBvcnRSdWxlID0gNDksCiAgICAgICAgICAgIExp
bmtlZFNoZWV0ID0gNTAsCiAgICAgICAgICAgIElubGluZVNoZWV0ID0gNTEsCiAgICAgICAgfTsK
ICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VTZXQgPSAxIDw8IDEs
CiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFRleHRTZXQgfCBTb3VyY2VTZXQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NNZWRpYT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTTWVkaWE7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUZXh0U2V0PiYgc2V0VGV4dChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRleHRTZXQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNv
dXJjZVNldD4mIHNldFNvdXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwg
Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTb3VyY2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVk
aWE+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+
IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLikKICAg
ICAqICAgICAuc2V0U291cmNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJM
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3Vy
Y2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9
Cn07CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9m
aWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNlbGVjdG9yU2V0ID0gMSA8PCAwLAogICAg
ICAgIFVybFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAyLAogICAg
ICAgIFRpbWVTZXQgPSAxIDw8IDMsCiAgICAgICAgSGl0Q291bnRTZXQgPSAxIDw8IDQsCiAgICAg
ICAgTWF0Y2hDb3VudFNldCA9IDEgPDwgNSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0
b3JTZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgVGltZVNldCB8IEhpdENvdW50U2V0IHwg
TWF0Y2hDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbGVjdG9yU2V0PiYgc2V0U2VsZWN0b3IoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTZWxlY3RvclNldCksIHByb3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U2VsZWN0b3JTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVy
dHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJs
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJl
cihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVGltZVNldD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVTZXQpLCBwcm9wZXJ0
eV90aW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidGlt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhpdENvdW50U2V0PiYgc2V0SGl0Q291bnQo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEhpdENvdW50U2V0KSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxIaXRDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNYXRjaENvdW50U2V0PiYgc2V0TWF0Y2hDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hDb3VudFNldCksIHBy
b3BlcnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1hdGNoQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2Vs
ZWN0b3JQcm9maWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxl
Y3RvclByb2ZpbGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
U2VsZWN0b3JQcm9maWxlRW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxl
RW50cnk+IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRTZWxlY3RvciguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNl
dExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0
SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlRW50cnko
KSkpOwogICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdo
aWxlIGdlbmVyYXRpbmcgU2VsZWN0b3JQcm9maWxlLgogICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBJ
bnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIERhdGEoKSB7IH0KCiAgICBwdWJs
aWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2Vs
ZWN0b3JQcm9maWxlRW50cnk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVz
aE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRh
PiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YSgpKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICBUb3RhbFRpbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgRGF0YVNldCA9IDEgPDwgMSwKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoVG90YWxUaW1lU2V0IHwgRGF0YVNldCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmls
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQ
cm9maWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVG90YWxUaW1lU2V0
PiYgc2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUb3RhbFRpbWVTZXQpLCBwcm9wZXJ0eV90b3RhbFRpbWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ0b3RhbFRpbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VG90YWxUaW1lU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBzZXREYXRhKFBhc3NSZWZQ
dHI8RGF0YT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRGF0YVNldCksIHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RGF0YVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxl
Y3RvclByb2ZpbGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclBy
b2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAg
LnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBTZWxlY3RvclByb2ZpbGUoKSkpOwogICAgfQp9OwoKfSAvLyBDU1MKCm5hbWVzcGFjZSBU
aW1lbGluZSB7Ci8qIFRpbWVsaW5lIHJlY29yZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgcmVjb3JkZWQgYWN0aXZpdHkuICovCmNsYXNzIFRpbWVsaW5lRXZlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
Y2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGltZWxpbmVFdmVudC4KICAgIGNsYXNzIENoaWxk
cmVuIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRy
ZW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDaGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIERhdGFT
ZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQgfCBEYXRhU2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
VGltZWxpbmVFdmVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgVGltZWxpbmVFdmVudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRGF0YVNldD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIERhdGFTZXQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZGF0YSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxEYXRhU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFRpbWVs
aW5lRXZlbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxUaW1lbGluZUV2ZW50Pio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFRpbWVsaW5lRXZlbnQ+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8VGltZWxpbmVFdmVudD4gcmVzdWx0ID0gVGltZWxpbmVFdmVudDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBUaW1lbGluZUV2ZW50
KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8Q2hpbGRyZW4+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAg
IH0KfTsKCn0gLy8gVGltZWxpbmUKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFt
ZXNwYWNlIERlYnVnZ2VyIHsKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFz
cyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2NyaXB0SWRTZXQgPSAxIDw8IDAsCiAg
ICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2Ny
aXB0SWRTZXQgfCBMaW5lTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU2NyaXB0SWRTZXQ+JiBzZXRTY3JpcHRJZChjb25zdCBUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OlNjcmlwdElkJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTY3JpcHRJZFNldCksIHByb3BlcnR5X3NjcmlwdElkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2NyaXB0SWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPExvY2F0aW9uPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTG9jYXRpb24oKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgIH0KI2lmICFBU1NF
UlRfRElTQUJMRUQKICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8qIEphdmFTY3Jp
cHQgY2FsbCBmcmFtZS4gQXJyYXkgb2YgY2FsbCBmcmFtZXMgZm9ybSB0aGUgY2FsbCBzdGFjay4g
Ki8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Njb3BlQ2hhaW4nIHdoaWxlIGdlbmVyYXRp
bmcgQ2FsbEZyYW1lLgogICAgY2xhc3MgU2NvcGVDaGFpbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CiAgICBwcml2YXRlOgogICAgICAgIFNjb3BlQ2hhaW4oKSB7IH0KCiAgICBwdWJsaWM6CiAg
ICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29w
ZT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
ICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+IGNyZWF0ZSgp
IHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY29wZUNoYWluKCkpOwogICAgICAg
IH0KI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0
VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVE
CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBDYWxs
RnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBGdW5jdGlvbk5hbWVTZXQgPSAxIDw8IDEsCiAg
ICAgICAgTG9jYXRpb25TZXQgPSAxIDw8IDIsCiAgICAgICAgU2NvcGVDaGFpblNldCA9IDEgPDwg
MywKICAgICAgICBUaGlzU2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChDYWxs
RnJhbWVJZFNldCB8IEZ1bmN0aW9uTmFtZVNldCB8IExvY2F0aW9uU2V0IHwgU2NvcGVDaGFpblNl
dCB8IFRoaXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIENhbGxGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENhbGxGcmFtZUlkU2V0PiYgc2V0Q2FsbEZyYW1lSWQoY29uc3QgVHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpDYWxsRnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ2FsbEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlk
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENhbGxGcmFtZUlkU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZ1bmN0aW9uTmFtZVNldD4mIHNl
dEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZ1bmN0aW9uTmFtZVNldCksIHByb3BlcnR5X2Z1bmN0
aW9uTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1
bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGdW5jdGlv
bk5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYXRpb25T
ZXQ+JiBzZXRMb2NhdGlvbihQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IExvY2F0aW9uU2V0KSwgcHJvcGVydHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxMb2NhdGlvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2NvcGVDaGFpbihQYXNzUmVmUHRyPFNjb3BlQ2hh
aW4+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNjb3BlQ2hhaW5TZXQpLCBwcm9wZXJ0eV9zY29wZUNoYWluX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJzY29wZUNoYWluIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNjb3BlQ2hhaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGhpc1NldD4mIHNldFRoaXMoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUaGlzU2V0KSwgcHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VGhpc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4u
LikKICAgICAqICAgICAuc2V0TG9jYXRpb24oLi4uKQogICAgICogICAgIC5zZXRTY29wZUNoYWlu
KC4uLikKICAgICAqICAgICAuc2V0VGhpcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxGcmFtZSgpKSk7CiAgICB9CiAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYWxsRnJhbWU+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQogICAgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAg
ICBhc3NlcnRDb3JyZWN0VmFsdWUob2JqZWN0LmdldCgpKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENhbGxGcmFtZSkgPT0gc2l6ZW9m
KEluc3BlY3Rvck9iamVjdCksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2FsbEZyYW1lKj4ob2JqZWN0LmdldCgpKTsKICAgIH0KCiNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUq
IHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECn07CgovKiBTY29wZSBkZXNjcmlw
dGlvbi4gKi8KY2xhc3MgU2NvcGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBT
Y29wZS4KICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBH
bG9iYWwgPSA1MiwKICAgICAgICAgICAgTG9jYWwgPSA1MywKICAgICAgICAgICAgV2l0aCA9IDU0
LAogICAgICAgICAgICBDbG9zdXJlID0gNTUsCiAgICAgICAgICAgIENhdGNoID0gNTYsCiAgICAg
ICAgfTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3Jy
ZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FC
TEVECiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIE9iamVjdFNldCA9IDEgPDwg
MSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IE9iamVjdFNldCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNjb3BlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTY29wZTsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGU6OkVu
dW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoIm9iamVjdCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTY29wZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTY29wZT4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2NvcGU+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8U2NvcGU+IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBl
KC4uLikKICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2NvcGUoKSkpOwogICAgfQojaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2
YWx1ZSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCm5hbWVzcGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUu
ICovCnN0cnVjdCBET01CcmVha3BvaW50VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1
YnRyZWVfbW9kaWZpZWQgPSA1NywKICAgICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1OCwKICAg
ICAgICBOb2RlX3JlbW92ZWQgPSA1OSwKICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50
VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCmNsYXNzIEluc3BlY3RvckZyb250ZW5k
IHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Kik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9y
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBjb25z
dCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAgICAgICAg
dm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3BlY3Rvciog
aW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVtb3J5IHsK
ICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAmbV9tZW1v
cnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxv
YWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0
ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZCgvKmNvbnN0
IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFBhZ2UqIHBhZ2UoKSB7IHJldHVybiAmbV9wYWdlOyB9CgogICAgY2xhc3MgUnVudGltZSB7CiAg
ICBwdWJsaWM6CiAgICAgICAgUnVudGltZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBSdW50aW1lKiBydW50aW1lKCkgeyByZXR1cm4gJm1fcnVu
dGltZTsgfQoKICAgIGNsYXNzIENvbnNvbGUgewogICAgcHVibGljOgogICAgICAgIENvbnNvbGUo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIG1lc3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6
OkNvbnNvbGVNZXNzYWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsK
ICAgICAgICB2b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KTsKICAgICAg
ICB2b2lkIG1lc3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyByZXR1cm4gJm1f
Y29uc29sZTsgfQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAgICAgIE5ldHdv
cmsoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVp
bGRlcjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3Qg
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQs
IGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91
YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0
b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVz
cG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9uc2UpOwog
ICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpOwogICAgICAgIHZv
aWQgcmVzcG9uc2VSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0IFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpMb2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBkb3VibGUgdGlt
ZXN0YW1wLCAvKlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0qLyBjb25zdCBT
dHJpbmcmIHR5cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIGRh
dGFSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBp
bnQgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVkKC8qY29u
c3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVl
c3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKC8qY29u
c3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVl
c3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJv
b2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5
Q2FjaGUoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiov
IGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9h
ZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVS
TCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJ
bml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0V2lsbFNl
bmRIYW5kc2hha2VSZXF1ZXN0KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0KTsKICAgICAgICB2b2lkIHdlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElk
JiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDcmVhdGVk
KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q2xv
c2VkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdvcmsoKSB7IHJl
dHVybiAmbV9uZXR3b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNzIERh
dGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRGF0YWJh
c2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgbmFtZSAnY29sdW1uTmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc3FsVHJh
bnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgQ29sdW1uTmFtZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENvbHVtbk5hbWVzKCkg
eyB9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hTdHJpbmco
dmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb2x1
bW5OYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b2x1bW5OYW1lcygpKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBuYW1lICd2YWx1ZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc3Fs
VHJhbnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgVmFsdWVzIDogcHVibGljIEluc3Bl
Y3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBWYWx1ZXMoKSB7IH0KCiAg
ICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hW
YWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFZhbHVlcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBW
YWx1ZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNxbFRyYW5z
YWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1uTmFt
ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0
cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKICAgICAgICB2
b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiAm
bV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQiB7CiAgICBwdWJsaWM6CiAgICAg
ICAgSW5kZXhlZERCKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCBkYXRhYmFzZU5hbWVzTG9hZGVkKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6SW5kZXhlZERCOjpGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZVdpdGhEYXRhYmFzZU5hbWVzKTsKICAgICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5kZXhlZERCKiBp
bmRleGVkZGIoKSB7IHJldHVybiAmbV9pbmRleGVkZGI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIERPTVN0b3JhZ2UgewogICAgcHVibGljOgogICAgICAg
IERPTVN0b3JhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERPTVN0b3JhZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET01TdG9yYWdlOjpFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3Rv
cmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01T
dG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNz
IEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJp
bmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKTsKICAgICAgICB2b2lkIG5ldHdvcmtTdGF0ZVVw
ZGF0ZWQoYm9vbCBpc05vd09ubGluZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBw
cml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uY2Fj
aGUoKSB7IHJldHVybiAmbV9hcHBsaWNhdGlvbmNhY2hlOyB9CgojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQogICAgY2xhc3MgRmlsZVN5c3RlbSB7CiAgICBwdWJsaWM6CiAgICAgICAgRmlsZVN5c3Rl
bShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBG
aWxlU3lzdGVtKiBmaWxlc3lzdGVtKCkgeyByZXR1cm4gJm1fZmlsZXN5c3RlbTsgfQoKI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAg
ICAgRE9NKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBkb2N1bWVudFVwZGF0ZWQoKTsKICAgICAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgbmFtZSAnbm9kZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc2V0Q2hpbGRO
b2Rlcy4KICAgICAgICBjbGFzcyBOb2RlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgTm9kZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAg
ICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVzPiBj
cmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVzKCkpOwog
ICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBw
YXJlbnRJZCwgLypQYXNzUmVmUHRyPE5vZGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG5vZGVzKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgdm9pZCBhdHRyaWJ1
dGVSZW1vdmVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ25vZGVJZHMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQg
aW5saW5lU3R5bGVJbnZhbGlkYXRlZC4KICAgICAgICBjbGFzcyBOb2RlSWRzIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBOb2RlSWRzKCkgeyB9
CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGludCB2YWx1ZSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaE51bWJlcih2YWx1ZSk7CiAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVJZHM+IGNyZWF0ZSgp
IHsKICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUlkcygpKTsKICAgICAg
ICAgICAgfQogICAgICAgIH07CgogICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZCgv
KlBhc3NSZWZQdHI8Tm9kZUlkcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRz
KTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hpbGROb2RlQ291bnRVcGRhdGVk
KGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVJ
bnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBu
b2RlKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50
IG5vZGVJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICB9OwoKICAgIERPTSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xhc3MgQ1NTIHsK
ICAgIHB1YmxpYzoKICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2Vk
KCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIENTUyogY3NzKCkgeyByZXR1cm4gJm1fY3NzOyB9CgogICAgY2xhc3MgVGltZWxpbmUgewog
ICAgcHVibGljOgogICAgICAgIFRpbWVsaW5lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmVudFJlY29yZGVkKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJu
ICZtX3RpbWVsaW5lOyB9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFz
cyBEZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGdsb2Jh
bE9iamVjdENsZWFyZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZCgvKmNvbnN0IFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKi8gY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGludCBzdGFydExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExp
bmUsIGludCBlbmRDb2x1bW4sIGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VNYXBVUkwpOwogICAgICAgIHZvaWQgc2NyaXB0RmFpbGVkVG9QYXJz
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UsIGludCBzdGFy
dExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICAg
ICB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkJiovIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbG9jYXRpb24pOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdj
YWxsRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNlZC4KICAgICAgICBjbGFzcyBD
YWxsRnJhbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAg
ICAgICAgICBDYWxsRnJhbWVzKCkgeyB9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9p
ZCBhZGRJdGVtKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FsbEZyYW1l
cz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYWxsRnJh
bWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIg
cGFyYW1ldGVyIG5hbWUgJ3JlYXNvbicgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBwYXVzZWQuCiAg
ICAgICAgc3RydWN0IFJlYXNvbiB7CiAgICAgICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
ICAgICBYSFIgPSA1LAogICAgICAgICAgICAgICAgRE9NID0gNjAsCiAgICAgICAgICAgICAgICBF
dmVudExpc3RlbmVyID0gNjEsCiAgICAgICAgICAgICAgICBFeGNlcHRpb24gPSA2MiwKICAgICAg
ICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgICAgIH07CiAgICAgICAgfTsgLy8gc3RydWN0
IFJlYXNvbgoKICAgICAgICB2b2lkIHBhdXNlZCgvKlBhc3NSZWZQdHI8Q2FsbEZyYW1lcz4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNv
bnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAg
ICAgICAgdm9pZCByZXN1bWVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2
YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CiAgICB9OwoKICAgIERlYnVnZ2VyKiBkZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2Rl
YnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERPTURlYnVnZ2VyIHsKICAgIHB1Ymxp
YzoKICAgICAgICBET01EZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0
ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOwogICAgfTsKCiAgICBET01EZWJ1Z2dlciogZG9tZGVidWdnZXIoKSB7IHJldHVybiAm
bV9kb21kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBw
dWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZFByb2ZpbGVIZWFkZXIoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcik7CiAgICAgICAgdm9pZCBhZGRIZWFwU25hcHNo
b3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcmIGNodW5rKTsKICAgICAgICB2b2lkIGZpbmlz
aEhlYXBTbmFwc2hvdChpbnQgdWlkKTsKICAgICAgICB2b2lkIHNldFJlY29yZGluZ1Byb2ZpbGUo
Ym9vbCBpc1Byb2ZpbGluZyk7CiAgICAgICAgdm9pZCByZXNldFByb2ZpbGVzKCk7CiAgICAgICAg
dm9pZCByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhpbnQgZG9uZSwgaW50IHRvdGFsKTsKICAg
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUHJv
ZmlsZXIqIHByb2ZpbGVyKCkgeyByZXR1cm4gJm1fcHJvZmlsZXI7IH0KCiNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShXT1JLRVJTKQogICAgY2xhc3MgV29y
a2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBXb3JrZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHdvcmtlckNyZWF0ZWQo
aW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpbnNwZWN0b3JDb25uZWN0ZWQp
OwogICAgICAgIHZvaWQgd29ya2VyVGVybWluYXRlZChpbnQgd29ya2VySWQpOwogICAgICAgIHZv
aWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihpbnQgd29ya2VySWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RlZEZyb21Xb3Jr
ZXIoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgV29ya2VyKiB3b3JrZXIoKSB7IHJldHVybiAmbV93b3JrZXI7IH0KCiNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgSW5zcGVjdG9yIG1faW5zcGVjdG9yOwogICAg
TWVtb3J5IG1fbWVtb3J5OwogICAgUGFnZSBtX3BhZ2U7CiAgICBSdW50aW1lIG1fcnVudGltZTsK
ICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0d29yayBtX25ldHdvcms7CiNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogICAgRGF0YWJhc2UgbV9kYXRhYmFzZTsKI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIEluZGV4ZWREQiBt
X2luZGV4ZWRkYjsKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgRE9NU3Rv
cmFnZSBtX2RvbXN0b3JhZ2U7CiAgICBBcHBsaWNhdGlvbkNhY2hlIG1fYXBwbGljYXRpb25jYWNo
ZTsKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIEZpbGVTeXN0ZW0gbV9maWxlc3lzdGVtOwoj
ZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRE9NIG1fZG9tOwogICAgQ1NTIG1fY3Nz
OwogICAgVGltZWxpbmUgbV90aW1lbGluZTsKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgRGVidWdnZXIgbV9kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBET01EZWJ1Z2dlciBt
X2RvbWRlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIFByb2ZpbGVyIG1fcHJvZmlsZXI7CiNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShXT1JLRVJTKQogICAg
V29ya2VyIG1fd29ya2VyOwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCn07CgojZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>