<?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>110769</bug_id>
          
          <creation_ts>2013-02-25 10:56:10 -0800</creation_ts>
          <short_desc>[V8] Generate a wrapper function for method callbacks</short_desc>
          <delta_ts>2013-02-25 13:33:26 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>110667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841108</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 10:56:10 -0800</bug_when>
    <thetext>This is one of steps to insert TRACE_EVENT_STATE() macros into DOM bindings. This patch introduces an indirection function for xxxMethod(), like this:

// For non-custom methods
void xxxMethodCallback(...) {
  xxxMethod(...);
}

// For custom methods
void xxxMethodCallback(...) {
  return xxxMethodCustom(...);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841146</commentid>
    <comment_count>1</comment_count>
      <attachid>190097</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 11:33:26 -0800</bug_when>
    <thetext>Created attachment 190097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841148</commentid>
    <comment_count>2</comment_count>
      <attachid>190097</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 11:36:28 -0800</bug_when>
    <thetext>Comment on attachment 190097
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1473
&gt; -sub GenerateOverloadedFunctionCallback
&gt; +sub GenerateOverloadedFunction

The diff is confusing, but basically I just factored ${name}MethodCallback() out of GenerateOverloadedFunctionCallback().

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1533
&gt; +        push(@implContentDecls, &quot;    return ${v8InterfaceName}::${name}MethodCustom(args);\n&quot;);
&gt; +    } else {
&gt; +        push(@implContentDecls, &quot;    return ${interfaceName}V8Internal::${name}Method(args);\n&quot;);
&gt; +    }

And this is the essential part of the patch. Other diffs are just for making this part workable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841250</commentid>
    <comment_count>3</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 13:33:14 -0800</bug_when>
    <thetext>Committed r143967: &lt;http://trac.webkit.org/changeset/143967&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190097</attachid>
            <date>2013-02-25 11:33:26 -0800</date>
            <delta_ts>2013-02-25 13:33:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110769-20130225112942.patch</filename>
            <type>text/plain</type>
            <size>91792</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRjNWEzMDBlMDUxNTU0
MWVjNjc4OGRjODNmZTAwMjE4MmVlOGVjMS4uZmFlMzc0NGYyYjE0ZmRlYjI1Zjc5YmQ2NzQxY2Jh
YzUwNjJiNWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBAQAorMjAxMy0wMi0yNSAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBHZW5lcmF0
ZSBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIG1ldGhvZCBjYWxsYmFja3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDc2OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgb25lIG9mIHN0ZXBzIHRv
IGluc2VydCBUUkFDRV9FVkVOVF9TVEFURSgpIG1hY3JvcworICAgICAgICBpbnRvIERPTSBiaW5k
aW5ncy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluZGlyZWN0aW9uCisgICAgICAgIGZ1bmN0
aW9uIGZvciB4eHhNZXRob2QoKSwgbGlrZSB0aGlzOgorCisgICAgICAgIC8vIEZvciBub24tY3Vz
dG9tIG1ldGhvZHMKKyAgICAgICAgdm9pZCB4eHhNZXRob2RDYWxsYmFjayguLi4pIHsKKyAgICAg
ICAgICB4eHhNZXRob2QoLi4uKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvciBjdXN0b20g
bWV0aG9kcworICAgICAgICB2b2lkIHh4eE1ldGhvZENhbGxiYWNrKC4uLikgeworICAgICAgICAg
IHJldHVybiB4eHhNZXRob2RDdXN0b20oLi4uKTsKKyAgICAgICAgfQorCisgICAgICAgIE5vIHRl
c3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlRG9tYWluU2FmZUZ1bmN0aW9u
R2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uKToK
KyAgICAgICAgKEdlbmVyYXRlTm9uU3RhbmRhcmRGdW5jdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXQ2NEFycmF5VjhJbnRlcm5hbDo6Zm9vTWV0aG9kQ2FsbGJh
Y2spOgorICAgICAgICAoRmxvYXQ2NEFycmF5VjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdDY0QXJyYXlWOEludGVybmFsOjpzZXRNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4RmxvYXQ2NEFycmF5VGVtcGxh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJu
YWw6OmV4Y2l0aW5nRnVuY3Rpb25NZXRob2RDYWxsYmFjayk6CisgICAgICAgIChUZXN0QWN0aXZl
RE9NT2JqZWN0VjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2Jq
ZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdEFjdGl2ZURPTU9iamVjdFRlbXBs
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyVjhJ
bnRlcm5hbDo6YW5vdGhlckZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoVGVzdEN1
c3RvbU5hbWVkR2V0dGVyVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0VjhJbnRlcm5hbDo6aXRlbU1ldGhvZENhbGxiYWNr
KToKKyAgICAgICAgKFRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEV2ZW50VGFyZ2V0VjhJbnRlcm5hbDo6YWRkRXZlbnRMaXN0ZW5lck1ldGhvZENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OnJlbW92
ZUV2ZW50TGlzdGVuZXJNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RXZl
bnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50TWV0aG9kQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RFdmVudFRhcmdl
dFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpz
dXBwbGVtZW50YWxNZXRob2QxTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoVGVzdEludGVyZmFj
ZVY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6
OnN1cHBsZW1lbnRhbE1ldGhvZDJNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTWV0aG9kM01ldGhvZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50
YWxNZXRob2Q0TWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb25maWd1cmVWOFRlc3RJbnRlcmZhY2VUZW1wbGF0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJWOEludGVybmFsOjpt
ZXRob2RNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6dm9pZE1ldGhvZE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFRlc3RPYmpWOElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2b2lkTWV0aG9k
V2l0aEFyZ3NNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6bG9uZ01ldGhvZE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpsb25nTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b2JqTWV0aG9kTWV0aG9kKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RNZXRob2RDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b2JqTWV0aG9kV2l0aEFyZ3NNZXRo
b2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9k
V2l0aFNlcXVlbmNlQXJnTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6Om1ldGhvZFJldHVybmluZ1NlcXVlbmNlTWV0aG9kQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3NNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6Om9wdGlvbnNPYmplY3RNZXRob2RDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbk1ldGhv
ZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjdXN0b21N
ZXRob2RNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5h
bDo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6YWRkRXZlbnRMaXN0ZW5lck1ldGhvZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpyZW1vdmVFdmVudExpc3RlbmVyTWV0
aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRTdGF0ZVZvaWRNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlT2JqTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25N
ZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0
aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvbk1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc01ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjp3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrTWV0aG9kQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25h
bEFyZ01ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ01ldGhvZENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3NNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nTWV0aG9kQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzVW5kZWZpbmVkTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZ01l
dGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRo
b2RXaXRoQ2FsbGJhY2tBcmdNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdNZXRo
b2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QxTWV0aG9kQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsTWV0aG9k
Mk1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpj
b25kaXRpb25hbE1ldGhvZDNNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZE1ldGhvZENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZFdpdGhPcHRp
b25hbE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
OjpjbGFzc01ldGhvZDJNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDFNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRoQ2xhbXBNZXRob2RDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVu
dGltZU1ldGhvZDFNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZU1ldGhvZDJNZXRob2RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZFBlckNvbnRleHRNZXRob2QxTWV0
aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJs
ZWRQZXJDb250ZXh0TWV0aG9kMk1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRvbVN0cmluZ0xpc3RGdW5jdGlvbk1l
dGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpnZXRT
VkdEb2N1bWVudE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjpjb252ZXJ0MU1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpjb252ZXJ0Mk1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0NE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0NU1ldGhvZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptdXRhYmxlUG9pbnRGdW5jdGlvbk1ldGhv
ZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjppbW11dGFi
bGVQb2ludEZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6Om9yYW5nZU1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpzdHJpY3RGdW5jdGlvbk1ldGhvZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2YXJpYWRpY1N0cmluZ01ldGhvZE1ldGhvZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2YXJpYWRpY0Rv
dWJsZU1ldGhvZE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjp2YXJpYWRpY05vZGVNZXRob2RNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6aW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjphY2NlcHRUcmFuc2Zlckxpc3RN
ZXRob2RDYWxsYmFjayk6CisgICAgICAgIChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6bXVsdGlUcmFuc2Zlckxpc3RNZXRob2RDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFR5cGVkZWZzVjhJbnRl
cm5hbDo6ZnVuY01ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFRlc3RUeXBlZGVmc1Y4SW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6bXVsdGlUcmFu
c2Zlckxpc3RNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNW
OEludGVybmFsOjpzZXRTaGFkb3dNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0VHlwZWRlZnNWOEludGVybmFsOjptZXRob2RXaXRoU2VxdWVuY2VBcmdNZXRob2RDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVybmFsOjpudWxsYWJsZUFy
cmF5QXJnTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFR5cGVkZWZzVjhJ
bnRlcm5hbDo6ZnVuY1dpdGhDbGFtcE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmltbXV0YWJsZVBvaW50RnVuY3Rpb25NZXRob2RDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVybmFsOjpzdHJpbmdB
cnJheUZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFR5cGVk
ZWZzVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbjJNZXRob2RDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9u
TWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b25maWd1cmVWOFRlc3RUeXBlZGVmc1RlbXBsYXRlKToKKwogMjAxMy0wMi0yNSAgU2VyZ2lvIFZp
bGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbc291cF0gIlRvbyBt
YW55IHJlZGlyZWN0cyIgZXJyb3IgbG9hZGluZyBjaGF0IGluIHBsdXMuZ29vZ2xlLmNvbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpp
bmRleCAzYjVjYmYwZWEzMWYyOTUwNGM2YWM0NjEzNDg0YjVmZmQ1NjgyYzM5Li5kNjhiNjkxM2Jl
ODExYmI1NmIzOGNhOTQwNTcxMTQwOTg0OTA5MGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtODAxLDcgKzgwMSw3IEBA
IHN1YiBHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcgogICAgICAgICAkc2lnbmF0dXJl
ID0gInY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpIjsKICAgICB9CiAKLSAgICBteSAkbmV3VGVt
cGxhdGVTdHJpbmcgPSAidjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldygke2ludGVyZmFjZU5hbWV9
VjhJbnRlcm5hbDo6JHtmdW5jTmFtZX1NZXRob2QsIHY4VW5kZWZpbmVkKCksICRzaWduYXR1cmUp
IjsKKyAgICBteSAkbmV3VGVtcGxhdGVTdHJpbmcgPSAidjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5l
dygke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHtmdW5jTmFtZX1NZXRob2RDYWxsYmFjaywg
djhVbmRlZmluZWQoKSwgJHNpZ25hdHVyZSkiOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkZy
YW1lLmgiKTsKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC0xNDcwLDcg
KzE0NzAsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvblBhcmFtZXRlcnNDaGVjawogICAgIHJldHVy
biAoJG51bU1hbmRhdG9yeVBhcmFtcywgam9pbigiIHx8ICIsIEBvckV4cHJlc3Npb24pKTsKIH0K
IAotc3ViIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uQ2FsbGJhY2sKK3N1YiBHZW5lcmF0ZU92
ZXJsb2FkZWRGdW5jdGlvbgogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogICAgIG15ICRp
bnRlcmZhY2UgPSBzaGlmdDsKQEAgLTE0OTYsNyArMTQ5Niw4IEBAIEVORAogICAgICAgICBteSAo
JG51bU1hbmRhdG9yeVBhcmFtcywgJHBhcmFtZXRlcnNDaGVjaykgPSBHZW5lcmF0ZUZ1bmN0aW9u
UGFyYW1ldGVyc0NoZWNrKCRvdmVybG9hZCk7CiAgICAgICAgICRsZWFzdE51bU1hbmRhdG9yeVBh
cmFtcyA9ICRudW1NYW5kYXRvcnlQYXJhbXMgaWYgKCRudW1NYW5kYXRvcnlQYXJhbXMgPCAkbGVh
c3ROdW1NYW5kYXRvcnlQYXJhbXMpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIGlmICgkcGFyYW1ldGVyc0NoZWNrKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgICAgIHJldHVybiAke25hbWV9JG92ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH1N
ZXRob2QoYXJncyk7XG4iKTsKKyAgICAgICAgbXkgJG92ZXJsb2FkZWRJbmRleFN0cmluZyA9ICRv
dmVybG9hZC0+e292ZXJsb2FkSW5kZXh9OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgICAgICByZXR1cm4gJHtuYW1lfSR7b3ZlcmxvYWRlZEluZGV4U3RyaW5nfU1ldGhvZChh
cmdzKTtcbiIpOwogICAgIH0KICAgICBpZiAoJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zID49IDEp
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJncy5MZW5ndGgo
KSA8ICRsZWFzdE51bU1hbmRhdG9yeVBhcmFtcylcbiIpOwpAQCAtMTUxOCwzMCArMTUxOSw0NiBA
QCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCiAgICAgbXkgJHY4SW50ZXJmYWNlTmFtZSA9
ICJWOCRpbnRlcmZhY2VOYW1lIjsKICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lOwogCi0gICAgaWYgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxKSB7Ci0gICAg
ICAgICMgQXBwZW5kIGEgbnVtYmVyIHRvIGFuIG92ZXJsb2FkZWQgbWV0aG9kJ3MgbmFtZSB0byBt
YWtlIGl0IHVuaXF1ZToKLSAgICAgICAgJG5hbWUgPSAkbmFtZSAuICRmdW5jdGlvbi0+e292ZXJs
b2FkSW5kZXh9OwotICAgIH0KLQogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8
PEVORCk7Ci1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7bmFtZX1NZXRob2QoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtuYW1l
fU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiBFTkQKICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZUZlYXR1cmVPYnNlcnZhdGlvbigkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4TWVhc3VyZUFzIn0pKTsKLQog
ICAgIGlmIChIYXNDdXN0b21NZXRob2QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcykpIHsKLSAgICAgICAgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIHJldHVybiAke3Y4
SW50ZXJmYWNlTmFtZX06OiR7bmFtZX1NZXRob2RDdXN0b20oYXJncyk7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuICR7djhJbnRlcmZhY2VOYW1lfTo6JHtuYW1l
fU1ldGhvZEN1c3RvbShhcmdzKTtcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuICR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjok
e25hbWV9TWV0aG9kKGFyZ3MpO1xuIik7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICJ9XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCi1FTkQK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFs
U3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CitzdWIgR2VuZXJhdGVGdW5jdGlv
bgoreworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlm
dDsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKKyAgICBteSAk
djhJbnRlcmZhY2VOYW1lID0gIlY4JGludGVyZmFjZU5hbWUiOworICAgIG15ICRuYW1lID0gJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgbXkgJGZ1bmNFeHQgPSAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzOworCisgICAgaWYgKEhhc0N1c3RvbU1ldGhvZCgk
ZnVuY0V4dCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChAeyRmdW5jdGlv
bi0+e292ZXJsb2Fkc319ID4gMSkgeworICAgICAgICAjIEFwcGVuZCBhIG51bWJlciB0byBhbiBv
dmVybG9hZGVkIG1ldGhvZCdzIG5hbWUgdG8gbWFrZSBpdCB1bmlxdWU6CisgICAgICAgICRuYW1l
ID0gJG5hbWUgLiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fTsKKyAgICB9CisKKyAgICBteSAk
Y29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0
cmluZygkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgInN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
JHtuYW1lfU1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKVxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIntcbiIpOworCiAgICAgaWYgKCRuYW1lIGVxICJhZGRFdmVudExp
c3RlbmVyIiB8fCAkbmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpIHsKICAgICAgICAgbXkg
JGxvb2t1cFR5cGUgPSAoJG5hbWUgZXEgImFkZEV2ZW50TGlzdGVuZXIiKSA/ICJPckNyZWF0ZSIg
OiAiT25seSI7CiAgICAgICAgIG15ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJG5hbWUgZXEgImFk
ZEV2ZW50TGlzdGVuZXIiKSA/ICIiIDogIi5nZXQoKSI7CkBAIC0yNDQ4LDcgKzI0NjUsNyBAQCBF
TkQKIAogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0
ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y29uZGl0aW9uYWx9JHRlbXBsYXRl
LT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKFwiJG5hbWVcIiksIHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWw6OiR7bmFtZX1NZXRob2QsIHY4VW5k
ZWZpbmVkKCksICR7c2lnbmF0dXJlfSkkcHJvcGVydHlfYXR0cmlidXRlcyk7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NvbmRpdGlvbmFsfSR0ZW1wbGF0ZS0+U2V0KHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbChcIiRuYW1lXCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCR7
aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke25hbWV9TWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZp
bmVkKCksICR7c2lnbmF0dXJlfSkkcHJvcGVydHlfYXR0cmlidXRlcyk7XG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwogfQogCkBAIC0yNzgwLDkgKzI3OTcsMTIgQEAgRU5ECiAgICAgbXkg
JG5lZWRzRG9tYWluU2FmZUZ1bmN0aW9uU2V0dGVyID0gMDsKICAgICAjIEdlbmVyYXRlIG1ldGhv
ZHMgZm9yIGZ1bmN0aW9ucy4KICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgIEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjaygkZnVuY3Rp
b24sICRpbnRlcmZhY2UpOwotICAgICAgICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0g
PiAxICYmICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID09IEB7JGZ1bmN0aW9uLT57b3Zlcmxv
YWRzfX0pIHsKLSAgICAgICAgICAgIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uQ2FsbGJhY2so
JGZ1bmN0aW9uLCAkaW50ZXJmYWNlKTsKKyAgICAgICAgR2VuZXJhdGVGdW5jdGlvbigkZnVuY3Rp
b24sICRpbnRlcmZhY2UpOworICAgICAgICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0g
PT0gQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgeworICAgICAgICAgICAgaWYgKCRmdW5jdGlv
bi0+e292ZXJsb2FkSW5kZXh9ID4gMSkgeworICAgICAgICAgICAgICAgIEdlbmVyYXRlT3Zlcmxv
YWRlZEZ1bmN0aW9uKCRmdW5jdGlvbiwgJGludGVyZmFjZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2soJGZ1bmN0aW9uLCAkaW50ZXJmYWNlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAi
aXRlbSIpIHsKQEAgLTI4NzMsNyArMjg5Myw3IEBAIEVORAogICAgICAgICBteSAkY29uZGl0aW9u
YWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVu
Y3Rpb24tPnNpZ25hdHVyZSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29u
ZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgeyIkbmFtZSIsICR7aW50ZXJmYWNlTmFtZX1WOElu
dGVybmFsOjoke25hbWV9TWV0aG9kfSwKKyAgICB7IiRuYW1lIiwgJHtpbnRlcmZhY2VOYW1lfVY4
SW50ZXJuYWw6OiR7bmFtZX1NZXRob2RDYWxsYmFja30sCiBFTkQKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgJG51
bV9jYWxsYmFja3MrKzsKQEAgLTMxOTUsNyArMzIxNSw3IEBAIEVORAogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgp
ICYmICR7ZW5hYmxlRnVuY3Rpb259KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCkpKSB7
XG4iKTsKICAgICAgICAgICAgIG15ICRuYW1lID0gJHJ1bnRpbWVGdW5jLT5zaWduYXR1cmUtPm5h
bWU7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgICAgICBwcm90
by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiJHtuYW1lfSIpLCB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KCR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke25hbWV9TWV0aG9kLCB2OFVu
ZGVmaW5lZCgpLCBkZWZhdWx0U2lnbmF0dXJlKS0+R2V0RnVuY3Rpb24oKSk7CisgICAgICAgIHBy
b3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCIke25hbWV9IiksIHY4OjpGdW5jdGlvblRl
bXBsYXRlOjpOZXcoJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWw6OiR7bmFtZX1NZXRob2RDYWxs
YmFjaywgdjhVbmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSktPkdldEZ1bmN0aW9uKCkpOwog
RU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0zNjc3LDcgKzM2OTcsNyBAQCBzdWIgR2V0VjhT
a2lwVlRhYmxlVmFsaWRhdGlvbkZvckludGVyZmFjZQogICAgIHJldHVybiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhTa2lwVlRhYmxlVmFsaWRhdGlvbiJ9OwogfQogCi1zdWIg
R2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQorc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3Ry
aW5nCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAgICAgbXkgJG51bWJlck9mUGFyYW1l
dGVycyA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKaW5kZXggYWE2MWYwMjYyYjFhMzdmNzU1
MzhlZGJhZGJlNzBiZDI3NWI3ZjMwMy4uZjJhOTI3MzNkNDkzY2I0MTNiNzkwNTZlNjFjNmUwZjcz
NGFmNmIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCkBAIC04OSwxMSArODksMjEgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmb29NZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKICAgICByZXR1cm4gdG9WOChpbXAtPmZvbyhhcnJheSksIGFyZ3MuSG9sZGVyKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmb29NZXRo
b2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBGbG9h
dDY0QXJyYXlWOEludGVybmFsOjpmb29NZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc2V0TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXI8RmxvYXQ2NEFycmF5LCBWOEZsb2F0NjRBcnJh
eT4oYXJncyk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2V0TWV0aG9kQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gRmxvYXQ2NEFy
cmF5VjhJbnRlcm5hbDo6c2V0TWV0aG9kKGFyZ3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBGbG9h
dDY0QXJyYXlWOEludGVybmFsCiAKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChGbG9hdDY0
QXJyYXkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKQEAgLTEwNiw3ICsxMTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXAoRmxvYXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQwogfQogCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQ2FsbGJh
Y2sgVjhGbG9hdDY0QXJyYXlDYWxsYmFja3NbXSA9IHsKLSAgICB7InNldCIsIEZsb2F0NjRBcnJh
eVY4SW50ZXJuYWw6OnNldE1ldGhvZH0sCisgICAgeyJzZXQiLCBGbG9hdDY0QXJyYXlWOEludGVy
bmFsOjpzZXRNZXRob2RDYWxsYmFja30sCiB9OwogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhG
bG9hdDY0QXJyYXk6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTEzNCw3ICsxNDQsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4RmxvYXQ2NEFycmF5VGVtcGxhdGUodjg6OgogICAgIGNvbnN0
IGludCBmb29BcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBm
b29Bcmd2W2Zvb0FyZ2NdID0geyBWOEZsb2F0MzJBcnJheTo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0
ZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGZvb1NpZ25hdHVyZSA9IHY4OjpT
aWduYXR1cmU6Ok5ldyhkZXNjLCBmb29BcmdjLCBmb29Bcmd2KTsKLSAgICBwcm90by0+U2V0KHY4
OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZm9vIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoRmxv
YXQ2NEFycmF5VjhJbnRlcm5hbDo6Zm9vTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBmb29TaWduYXR1
cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZm9vIiksIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoRmxvYXQ2NEFycmF5VjhJbnRlcm5hbDo6Zm9vTWV0aG9kQ2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIGZvb1NpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIHRv
U3RyaW5nIHRlbXBsYXRlCiAgICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgidG9T
dHJpbmciKSwgVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT50b1N0cmluZ1RlbXBsYXRlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCAyNDMwNzQxYzJlYTFlOTZm
NzY4MGNiMzFhZjY1ODc1MDlkM2U1NjUzLi4wNzI1NDMyMjI1MjYxYmRkNWVlOGUyMzA3NjBjYzRj
Mzc2MjUzNzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtOTQsNiAr
OTQsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0Z1bmN0aW9uTWV0
aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjaXRpbmdGdW5jdGlvbk1ldGhv
ZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RB
Y3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0Z1bmN0aW9uTWV0aG9kKGFyZ3MpOwor
fQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvc3RNZXNzYWdlTWV0aG9kKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAt
MTA0LDkgKzEwOSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvc3RNZXNzYWdl
TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VNZXRob2RD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0QWN0
aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2QoYXJncyk7Cit9CisKIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBs
YXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaW5mby5HZXRJ
c29sYXRlKCksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4
SW50ZXJuYWw6OnBvc3RNZXNzYWdlTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJl
OjpOZXcoVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0ZShpbmZvLkdldElzb2xh
dGUoKSkpKSk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46
Ok5ldyhpbmZvLkdldElzb2xhdGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0QWN0
aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRl
ZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3
VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSkpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZShpbmZvLkdldElzb2xhdGUoKSkpOwogICAg
IGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUg
YnkgJ29iamVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCkBAIC0xMTUs
NyArMTI1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3N0TWVzc2FnZUF0dHJH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGMKICAgICB9CiAgICAgVGVzdEFjdGl2
ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShob2xkZXIp
OwogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoQmlu
ZGluZ1N0YXRlOjppbnN0YW5jZSgpLCBpbXAtPmZyYW1lKCksIERvTm90UmVwb3J0U2VjdXJpdHlF
cnJvcikpIHsKLSAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
Pjo6TmV3KGluZm8uR2V0SXNvbGF0ZSgpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RB
Y3RpdmVET01PYmplY3RWOEludGVybmFsOjpwb3N0TWVzc2FnZU1ldGhvZCwgdjhVbmRlZmluZWQo
KSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxh
dGUoaW5mby5HZXRJc29sYXRlKCkpKSkpOworICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaW5mby5HZXRJc29sYXRlKCksIHY4OjpGdW5jdGlvblRl
bXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlTWV0
aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOFRlc3RBY3Rp
dmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKGluZm8uR2V0SXNvbGF0ZSgpKSkpKTsKICAgICAg
ICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAgIH0KIApAQCAtMTY5
LDcgKzE3OSw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Q29uZmlndXJlVjhUZXN0QWN0aXZlRE9NT2JqZWN0VGVtcGxhCiAgICAgY29uc3QgaW50IGV4Y2l0
aW5nRnVuY3Rpb25BcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBleGNpdGluZ0Z1bmN0aW9uQXJndltleGNpdGluZ0Z1bmN0aW9uQXJnY10gPSB7IFY4Tm9kZTo6
R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+
IGV4Y2l0aW5nRnVuY3Rpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgZXhj
aXRpbmdGdW5jdGlvbkFyZ2MsIGV4Y2l0aW5nRnVuY3Rpb25Bcmd2KTsKLSAgICBwcm90by0+U2V0
KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZXhjaXRpbmdGdW5jdGlvbiIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0Z1bmN0
aW9uTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBleGNpdGluZ0Z1bmN0aW9uU2lnbmF0dXJlKSk7Cisg
ICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImV4Y2l0aW5nRnVuY3Rpb24iKSwg
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6
ZXhjaXRpbmdGdW5jdGlvbk1ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBleGNpdGluZ0Z1
bmN0aW9uU2lnbmF0dXJlKSk7CiAKICAgICAvLyBGdW5jdGlvbiAncG9zdE1lc3NhZ2UnIChFeHRB
dHRyOiAnRG9Ob3RDaGVja1NlY3VyaXR5JykKICAgICBwcm90by0+U2V0QWNjZXNzb3Iodjg6OlN0
cmluZzo6TmV3U3ltYm9sKCJwb3N0TWVzc2FnZSIpLCBUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRl
cm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVyQ2FsbGJhY2ssIFRlc3RBY3RpdmVET01PYmplY3RW
OEludGVybmFsOjpUZXN0QWN0aXZlRE9NT2JqZWN0RG9tYWluU2FmZUZ1bmN0aW9uU2V0dGVyLCB2
OFVuZGVmaW5lZCgpLCB2ODo6QUxMX0NBTl9SRUFELCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmNwcAppbmRleCBjMmNhZDVjZWFhODFkZGIwNjFhNDUzMjE1MGI5MjVkYzEzNGJkZGVjLi5h
OTdmZjcxNTBmZjYwZjI0ODAzODI2OTI3OWZmYjI0ZTNhZjQ4NzM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTgwLDEwICs4MCwxNSBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFub3RoZXJGdW5jdGlvbk1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGFub3RoZXJGdW5jdGlvbk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RDdXN0b21OYW1lZEdldHRlclY4SW50ZXJu
YWw6OmFub3RoZXJGdW5jdGlvbk1ldGhvZChhcmdzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVz
dEN1c3RvbU5hbWVkR2V0dGVyVjhJbnRlcm5hbAogCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1
cmF0aW9uOjpCYXRjaGVkQ2FsbGJhY2sgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDYWxsYmFja3Nb
XSA9IHsKLSAgICB7ImFub3RoZXJGdW5jdGlvbiIsIFRlc3RDdXN0b21OYW1lZEdldHRlclY4SW50
ZXJuYWw6OmFub3RoZXJGdW5jdGlvbk1ldGhvZH0sCisgICAgeyJhbm90aGVyRnVuY3Rpb24iLCBU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJWOEludGVybmFsOjphbm90aGVyRnVuY3Rpb25NZXRob2RDYWxs
YmFja30sCiB9OwogCiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IENvbmZpZ3VyZVY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBpc29sYXRlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAKaW5kZXggZWRmYmVlMmVhZGY0ZTUyOTZkY2I3NzgwMThjOTkxNTI2
ZDZhZGNkOC4uZDg3ZmIyNTk1MWUzMjMwM2Q3NGM0NjU4Zjc5ZWNlMDc2MjFhNzkwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC05Miw2ICs5MiwxMSBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGl0ZW1NZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBy
ZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaXRlbU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6Oml0
ZW1NZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRkRXZl
bnRMaXN0ZW5lck1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmdldEV2ZW50
TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKQEAgLTEwMyw2
ICsxMDgsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGRFdmVudExpc3RlbmVy
TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWRkRXZlbnRMaXN0ZW5lck1l
dGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRl
c3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVuZXJNZXRob2QoYXJncyk7Cit9
CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRXZlbnRMaXN0ZW5lck1ldGhv
ZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmdldEV2ZW50TGlzdGVuZXIoYXJnc1sx
XSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwpAQCAtMTE0LDYgKzEyNCwxMSBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUV2ZW50TGlzdGVuZXJNZXRob2QoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUV2ZW50TGlzdGVuZXJNZXRob2RDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0RXZlbnRUYXJnZXRW
OEludGVybmFsOjpyZW1vdmVFdmVudExpc3RlbmVyTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3BhdGNoRXZlbnRNZXRob2QoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0xMzEsMTIgKzE0
NiwxNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3BhdGNoRXZlbnRNZXRob2Qo
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVj
LCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
ZGlzcGF0Y2hFdmVudE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7
CisgICAgcmV0dXJuIFRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OmRpc3BhdGNoRXZlbnRNZXRo
b2QoYXJncyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWwK
IAogc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZENhbGxiYWNrIFY4VGVz
dEV2ZW50VGFyZ2V0Q2FsbGJhY2tzW10gPSB7Ci0gICAgeyJpdGVtIiwgVGVzdEV2ZW50VGFyZ2V0
VjhJbnRlcm5hbDo6aXRlbU1ldGhvZH0sCi0gICAgeyJhZGRFdmVudExpc3RlbmVyIiwgVGVzdEV2
ZW50VGFyZ2V0VjhJbnRlcm5hbDo6YWRkRXZlbnRMaXN0ZW5lck1ldGhvZH0sCi0gICAgeyJyZW1v
dmVFdmVudExpc3RlbmVyIiwgVGVzdEV2ZW50VGFyZ2V0VjhJbnRlcm5hbDo6cmVtb3ZlRXZlbnRM
aXN0ZW5lck1ldGhvZH0sCisgICAgeyJpdGVtIiwgVGVzdEV2ZW50VGFyZ2V0VjhJbnRlcm5hbDo6
aXRlbU1ldGhvZENhbGxiYWNrfSwKKyAgICB7ImFkZEV2ZW50TGlzdGVuZXIiLCBUZXN0RXZlbnRU
YXJnZXRWOEludGVybmFsOjphZGRFdmVudExpc3RlbmVyTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsi
cmVtb3ZlRXZlbnRMaXN0ZW5lciIsIFRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OnJlbW92ZUV2
ZW50TGlzdGVuZXJNZXRob2RDYWxsYmFja30sCiB9OwogCiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50VGFyZ2V0VGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQpAQCAtMTYxLDcgKzE4MSw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0RXZlbnRUYXJnZXRUZW1wbGF0ZSh2CiAgICAg
Y29uc3QgaW50IGRpc3BhdGNoRXZlbnRBcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBkaXNwYXRjaEV2ZW50QXJndltkaXNwYXRjaEV2ZW50QXJnY10gPSB7IFY4
RXZlbnQ6OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2ln
bmF0dXJlPiBkaXNwYXRjaEV2ZW50U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2Ms
IGRpc3BhdGNoRXZlbnRBcmdjLCBkaXNwYXRjaEV2ZW50QXJndik7Ci0gICAgcHJvdG8tPlNldCh2
ODo6U3RyaW5nOjpOZXdTeW1ib2woImRpc3BhdGNoRXZlbnQiKSwgdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhUZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50TWV0aG9kLCB2
OFVuZGVmaW5lZCgpLCBkaXNwYXRjaEV2ZW50U2lnbmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2
ODo6U3RyaW5nOjpOZXdTeW1ib2woImRpc3BhdGNoRXZlbnQiKSwgdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhUZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50TWV0aG9kQ2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIGRpc3BhdGNoRXZlbnRTaWduYXR1cmUpKTsKIAogICAgIC8v
IEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQogICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woInRvU3RyaW5nIiksIFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdU
ZW1wbGF0ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggNmVjODZlOWJiYjNkYzRiYzBj
YThkMjM3ZGZmZGJiMmEwMDVhYTU4Ny4uMTdlMDFkMzAyZTkwNTI0NDQ4OWZhNDRiNGUyNDI3ZDY4
ZmQ0OTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTIzNiw2ICsyMzYsMTUgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2QxTWV0aG9kKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRh
bE1ldGhvZDFNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IHJldHVybiBUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTWV0aG9kMU1ldGhv
ZChhcmdzKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQorCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsTWV0aG9kMk1l
dGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMikKQEAgLTI1OSw3ICsyNjgsMTYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
dXBwbGVtZW50YWxNZXRob2QyTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbE1ldGhvZDNNZXRob2QoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFs
TWV0aG9kMk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAg
cmV0dXJuIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2QyTWV0aG9k
KGFyZ3MpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2QzTWV0
aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICByZXR1cm4gVjhU
ZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2QzTWV0aG9kQ3VzdG9tKGFyZ3MpOwogfQpA
QCAtMjc2LDYgKzI5NCwxNSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1l
bnRhbE1ldGhvZDRNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogCiAjZW5kaWYgLy8g
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiAKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2Q0TWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1
cHBsZW1lbnRhbE1ldGhvZDRNZXRob2QoYXJncyk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKwogfSAvLyBuYW1lc3BhY2UgVGVzdElu
dGVyZmFjZVY4SW50ZXJuYWwKIAogc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0
Y2hlZEF0dHJpYnV0ZSBWOFRlc3RJbnRlcmZhY2VBdHRyc1tdID0gewpAQCAtMzA3LDEwICszMzQs
MTAgQEAgc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSBW
OFRlc3RJbnRlcmZhY2VBdHRyc1tdID0gewogCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0
aW9uOjpCYXRjaGVkQ2FsbGJhY2sgVjhUZXN0SW50ZXJmYWNlQ2FsbGJhY2tzW10gPSB7CiAjaWYg
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgeyJzdXBwbGVt
ZW50YWxNZXRob2QxIiwgVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDFNZXRob2R9LAorICAgIHsic3VwcGxlbWVudGFsTWV0aG9kMSIsIFRlc3RJbnRlcmZhY2VWOElu
dGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2QxTWV0aG9kQ2FsbGJhY2t9LAogI2VuZGlmCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgeyJzdXBwbGVt
ZW50YWxNZXRob2QzIiwgVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDNNZXRob2R9LAorICAgIHsic3VwcGxlbWVudGFsTWV0aG9kMyIsIFRlc3RJbnRlcmZhY2VWOElu
dGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2QzTWV0aG9kQ2FsbGJhY2t9LAogI2VuZGlmCiB9Owog
CkBAIC0zODIsMTAgKzQwOSwxMCBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEludGVyZmFjZVRlbXBsYXRlKHY4OgogICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHN1cHBsZW1lbnRhbE1ldGhvZDJBcmd2W3N1cHBs
ZW1lbnRhbE1ldGhvZDJBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4o
KSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8
djg6OlNpZ25hdHVyZT4gc3VwcGxlbWVudGFsTWV0aG9kMlNpZ25hdHVyZSA9IHY4OjpTaWduYXR1
cmU6Ok5ldyhkZXNjLCBzdXBwbGVtZW50YWxNZXRob2QyQXJnYywgc3VwcGxlbWVudGFsTWV0aG9k
MkFyZ3YpOwogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
ICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJzdXBwbGVtZW50YWxNZXRob2Qy
IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1
cHBsZW1lbnRhbE1ldGhvZDJNZXRob2QsIHY4VW5kZWZpbmVkKCksIHN1cHBsZW1lbnRhbE1ldGhv
ZDJTaWduYXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgic3Vw
cGxlbWVudGFsTWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RJbnRlcmZh
Y2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2QyTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZp
bmVkKCksIHN1cHBsZW1lbnRhbE1ldGhvZDJTaWduYXR1cmUpKTsKICNlbmRpZiAvLyBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJzdXBwbGVtZW50YWxNZXRob2Q0IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhvZDRNZXRob2QsIHY4VW5k
ZWZpbmVkKCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7CisgICAgZGVzYy0+U2V0KHY4
OjpTdHJpbmc6Ok5ld1N5bWJvbCgic3VwcGxlbWVudGFsTWV0aG9kNCIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2Q0
TWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigp
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
CiAgICAgVjhET01Db25maWd1cmF0aW9uOjpiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyhkZXNjLCBw
cm90bywgVjhUZXN0SW50ZXJmYWNlQ29uc3RzLCBXVEZfQVJSQVlfTEVOR1RIKFY4VGVzdEludGVy
ZmFjZUNvbnN0cyksIGlzb2xhdGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKaW5kZXggM2Q4N2I1MzUxOGRhODMzMGYzNGQwNTZiMzdmN2UzZjBhMGVi
YmVhYi4uMDFjNDZhNjYzODE3MGM2NzQ4MWJjMGMzZWFiNDdlN2JlMWIyZTVlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtODEsMTAgKzgxLDE1
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kTWV0aG9kKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJWOElu
dGVybmFsOjptZXRob2RNZXRob2QoYXJncyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyVjhJbnRlcm5hbAogCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1
cmF0aW9uOjpCYXRjaGVkQ2FsbGJhY2sgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxi
YWNrc1tdID0gewotICAgIHsibWV0aG9kIiwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJWOElu
dGVybmFsOjptZXRob2RNZXRob2R9LAorICAgIHsibWV0aG9kIiwgVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJWOEludGVybmFsOjptZXRob2RNZXRob2RDYWxsYmFja30sCiB9OwogCiBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDY2ZGNkY2Ew
NzgzZGI2NTM3NTMyYWRmYmQyMGIzMGZhOWE2MDJmZTguLjc5NzU4N2M5NzVhMjAxNTk3YjdiMmM0
NTA0OTYwZmZkZGI5NmVkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0xMzAzLDYgKzEzMDMsMTEgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2b2lkTWV0aG9kTWV0aG9kKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdm9pZE1ldGhvZE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp2b2lkTWV0aG9k
TWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZvaWRNZXRo
b2RXaXRoQXJnc01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMykKQEAgLTEzMTUsMTIgKzEzMjAsMjIgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2b2lkTWV0aG9kV2l0aEFyZ3NNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2b2lkTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6dm9pZE1l
dGhvZFdpdGhBcmdzTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGxvbmdNZXRob2RNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIHJl
dHVybiB2OEludGVnZXIoaW1wLT5sb25nTWV0aG9kKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0K
IAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBsb25nTWV0aG9kTWV0aG9kQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJu
YWw6OmxvbmdNZXRob2RNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbG9uZ01ldGhvZFdpdGhBcmdzTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAzKQpAQCAtMTMzMiwxMyArMTM0NywyMyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdNZXRob2RXaXRoQXJnc01ldGhvZChjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5sb25nTWV0
aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7
CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbG9uZ01ldGhvZFdpdGhBcmdzTWV0
aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVz
dE9ialY4SW50ZXJuYWw6OmxvbmdNZXRob2RXaXRoQXJnc01ldGhvZChhcmdzKTsKK30KKwogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpNZXRob2RNZXRob2QoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKLSAgICBGZWF0dXJlT2JzZXJ2ZXI6Om9ic2VydmUoYWN0aXZlRE9NV2lu
ZG93KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSksIEZlYXR1cmVPYnNlcnZlcjo6VGVzdEZlYXR1
cmUpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAgICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRob2QoKSwgYXJncy5Ib2xkZXIoKSwgYXJn
cy5HZXRJc29sYXRlKCkpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1l
dGhvZE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgRmVh
dHVyZU9ic2VydmVyOjpvYnNlcnZlKGFjdGl2ZURPTVdpbmRvdyhCaW5kaW5nU3RhdGU6Omluc3Rh
bmNlKCkpLCBGZWF0dXJlT2JzZXJ2ZXI6OlRlc3RGZWF0dXJlKTsKKyAgICByZXR1cm4gVGVzdE9i
alY4SW50ZXJuYWw6Om9iak1ldGhvZE1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmpNZXRob2RXaXRoQXJnc01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMykKQEAgLTEzNTAsNiArMTM3NSwx
MSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhvZFdpdGhBcmdzTWV0aG9k
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRo
b2RXaXRoQXJncyhsb25nQXJnLCBzdHJBcmcsIG9iakFyZyksIGFyZ3MuSG9sZGVyKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpNZXRo
b2RXaXRoQXJnc01ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RXaXRoQXJnc01ldGhvZChhcmdz
KTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoU2VxdWVuY2VB
cmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5n
dGgoKSA8IDEpCkBAIC0xMzYwLDYgKzEzOTAsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIK
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aFNl
cXVlbmNlQXJnTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG1ldGhvZFJldHVybmluZ1NlcXVlbmNlTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtMTM2OSw2ICsxNDA0LDExIEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VNZXRob2Qo
Y29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICByZXR1cm4gdjhBcnJheShpbXAtPm1ldGhvZFJldHVy
bmluZ1NlcXVlbmNlKGxvbmdBcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VNZXRob2RDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c01l
dGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMikKQEAgLTEzODcsNiArMTQyNywxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NNZXRob2QoY29uc3Qgdjg6OgogICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhy
b3dzTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1
cm4gVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NN
ZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXpl
ZFZhbHVlTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQpAQCAtMTQwMCw2ICsxNDQ1LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gc2VyaWFsaXplZFZhbHVlTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZU1l
dGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2Jq
ZWN0TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQpAQCAtMTQxNSw2ICsxNDY1LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gb3B0aW9uc09iamVjdE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAg
IHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG9wdGlvbnNPYmplY3RNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6b3B0aW9uc09iamVjdE1ldGhvZChhcmdz
KTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9u
TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKQEAgLTE0MjksMTMgKzE0ODQsMTgg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uTWV0aG9k
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVj
LCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y3VzdG9tTWV0aG9kTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25NZXRob2RDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6
bWV0aG9kV2l0aEV4Y2VwdGlvbk1ldGhvZChhcmdzKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjdXN0b21NZXRob2RNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIEZlYXR1cmVPYnNlcnZlcjo6b2JzZXJ2ZShhY3RpdmVET01XaW5kb3co
QmluZGluZ1N0YXRlOjppbnN0YW5jZSgpKSwgRmVhdHVyZU9ic2VydmVyOjpDdXN0b21UZXN0RmVh
dHVyZSk7CiAgICAgcmV0dXJuIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kTWV0aG9kQ3VzdG9tKGFy
Z3MpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3RvbU1ldGhvZFdpdGhB
cmdzTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGN1c3RvbU1ldGhvZFdpdGhBcmdzTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICByZXR1cm4gVjhUZXN0T2JqOjpjdXN0b21NZXRob2RXaXRo
QXJnc01ldGhvZEN1c3RvbShhcmdzKTsKIH0KQEAgLTE0NTEsNiArMTUxMSwxMSBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkZEV2ZW50TGlzdGVuZXJNZXRob2QoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhZGRFdmVudExpc3RlbmVyTWV0aG9kQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmFk
ZEV2ZW50TGlzdGVuZXJNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcmVtb3ZlRXZlbnRMaXN0ZW5lck1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RXZlbnRMaXN0ZW5l
ckxpc3Q6OmdldEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkp
OwpAQCAtMTQ2Miw2ICsxNTI3LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVt
b3ZlRXZlbnRMaXN0ZW5lck1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVt
b3ZlRXZlbnRMaXN0ZW5lck1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpyZW1vdmVFdmVudExpc3RlbmVyTWV0
aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRT
dGF0ZVZvaWRNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtMTQ3OCw2ICsx
NTQ4LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlVm9p
ZE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlVm9p
ZE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lkTWV0aG9kKGFyZ3MpOworfQor
CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZU9iak1ldGhvZChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CkBAIC0xNDk0LDYgKzE1NjksMTEgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVPYmpNZXRob2QoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBhcmdz
LkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRT
dGF0ZU9iak1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKQEAgLTE1MTcsNiArMTU5NywxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25NZXRob2QoY29uc3Qgdjg6OkFyZ3VtZQogICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uTWV0
aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVz
dE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25NZXRob2QoYXJncyk7
Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqRXhj
ZXB0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKQEAgLTE1NDAsNiArMTYy
NSwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbk1ldGhvZChjb25zdCB2ODo6QXJndW1lbgogICAgIHJldHVybiBzZXRET01FeGNlcHRp
b24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25NZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKQEAgLTE1NDgsNiArMTYzOCwxMSBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kKGNvbnN0IHY4OjpB
cmd1bWVudAogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6
OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtMTU2NSw2ICsxNjYwLDEx
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZU1ldGhvZChjb25zCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9
CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb25NZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtMTU4OSw2ICsxNjg5
LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvCiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlv
bihlYywgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25N
ZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBU
ZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbk1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc01l
dGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CkBAIC0xNjA2LDYgKzE3MTEsMTEgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlV2l0aFNwYWNlc00KICAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgp
LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja01ldGhvZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CkBAIC0xNjE0LDYgKzE3MjQsMTEgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrTWV0aG9kKGNv
bnN0IHY4OjpBcmcKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrTWV0aG9kQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4
SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tNZXRob2QoYXJncyk7Cit9
CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsQXJnTWV0
aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKQEAgLTE2MjYsNiArMTc0MSwxMSBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbEFyZ01ldGhvZChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcgogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbEFyZ01ldGhvZENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpW
OEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxBcmdNZXRob2QoYXJncyk7Cit9CisKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCkBAIC0xNjQxLDYgKzE3NjEsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ01ldGhvZChjb25z
dAogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnTWV0aG9kQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50
ZXJuYWw6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnTWV0aG9kKGFyZ3Mp
OworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZFR3b09wdGlvbmFsQXJnc01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTE2NjEsNiArMTc4NiwxMSBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJnc01ldGhvZChjbwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJnc01ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRU
d29PcHRpb25hbEFyZ3NNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKQEAgLTE2NzMsNiArMTgwMywxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJgog
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ01ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRNZXRob2QoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtMTY4MSw2ICsxODE2LDExIEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRNZXRob2Qo
Y29uc3Qgdjg6CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRNZXRob2RD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2Jq
VjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRNZXRob2QoYXJn
cyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNOdWxsU3RyaW5nTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKQEAg
LTE2ODksNiArMTgyOSwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZ01ldGhvZChjb25zdCB2OAogICAgIHJldHVybiB2
OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZ01ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmdNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnTWV0aG9kKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtMTcwMSw2
ICsxODQ2LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENhbGxi
YWNrQXJnTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyCiAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENhbGxi
YWNrQXJnTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBy
ZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ01ldGhvZChhcmdz
KTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZ01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKQEAgLTE3MTQsNiArMTg2NCwxMSBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnTWV0aG9kKGNvbnN0CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tB
cmdNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVy
biBUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tB
cmdNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwpAQCAtMTcyNyw2ICsxODgyLDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2QoY29uc3Qgdjg6OkFyCiAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2QoYXJncyk7Cit9CisKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbE1l
dGhvZDFNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTE3MzcsNiArMTg5Nywx
NSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFsTWV0aG9kMU1ldGhv
ZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlv
bjEpCiAKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb25kaXRpb25hbE1ldGhvZDFNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRo
b2QxTWV0aG9kKGFyZ3MpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCisKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiAKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9uYWxNZXRob2QyTWV0aG9kKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCkBAIC0xNzQ4LDYgKzE5MTcsMTUgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25kaXRpb25hbE1ldGhvZDJNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikK
IAorI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKworc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbE1ldGhvZDJNZXRob2RDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5h
bDo6Y29uZGl0aW9uYWxNZXRob2QyTWV0aG9kKGFyZ3MpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbmRpdGlvbmFsTWV0aG9kM01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAt
MTc1OSw2ICsxOTM3LDE1IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9u
YWxNZXRob2QzTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAKICNlbmRpZiAvLyBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKKyNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29uZGl0aW9uYWxNZXRob2QzTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsTWV0
aG9kM01ldGhvZChhcmdzKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9h
ZGVkTWV0aG9kMU1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMikKQEAgLTE5MDYsMTIgKzIwOTMsMjIgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKDAsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
IH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kTWV0aG9k
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9i
alY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2RNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKIHsKICAgICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwogICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzTWV0aG9k
TWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4g
VGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsTWV0aG9kKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgewpA
QCAtMTkyMSw3ICsyMTE4LDEyIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NN
ZXRob2RXaXRoT3B0aW9uYWxNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICByZXR1cm4g
djhJbnRlZ2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZyksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzc01ldGhv
ZDJNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoT3B0aW9uYWxNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NN
ZXRob2RXaXRoT3B0aW9uYWxNZXRob2QoYXJncyk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY2xhc3NNZXRob2QyTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICByZXR1cm4gVjhUZXN0T2JqOjpjbGFzc01ldGhvZDJNZXRob2RDdXN0b20o
YXJncyk7CiB9CkBAIC0xOTY3LDYgKzIxNjksMTUgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBvdmVybG9hZGVkTWV0aG9kMU1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCiAKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMU1ldGhvZENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpW
OEludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kMU1ldGhvZChhcmdzKTsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShDb25kaXRpb24xKQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNz
TWV0aG9kV2l0aENsYW1wTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQpAQCAtMTk4NCw2ICsyMTk1LDExIEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoQ2xhbXBNZXRob2QoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJnCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoQ2xhbXBNZXRob2RDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6
Y2xhc3NNZXRob2RXaXRoQ2xhbXBNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhvZDFNZXRob2QoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0xOTk0LDYgKzIy
MTAsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkQXRSdW50aW1lTWV0
aG9kMU1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJgogICAgIHJldHVybiB2OFVuZGVmaW5lZCgp
OwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVNZXRo
b2QxTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1
cm4gVGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxTWV0aG9kKGFyZ3Mp
OworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVNZXRo
b2QyTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQpAQCAtMjAwNCw2ICsyMjI1LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhvZDJNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYK
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBlbmFibGVkQXRSdW50aW1lTWV0aG9kMk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRS
dW50aW1lTWV0aG9kMk1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBlbmFibGVkUGVyQ29udGV4dE1ldGhvZDFNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0yMDE0LDYgKzIyNDAsMTEg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkUGVyQ29udGV4dE1ldGhvZDFN
ZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0K
IAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkUGVyQ29udGV4dE1ldGhvZDFN
ZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBU
ZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZFBlckNvbnRleHRNZXRob2QxTWV0aG9kKGFyZ3MpOwor
fQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9k
Mk1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMSkKQEAgLTIwMjQsNiArMjI1NSwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMk1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJgog
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkUGVy
Q29udGV4dE1ldGhvZDJNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gc3RyaW5nQXJyYXlGdW5jdGlvbk1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTIwNDEsNiArMjI3NywxMSBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rpb25NZXRob2QoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJp
bmdBcnJheUZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0FycmF5RnVuY3Rpb25NZXRo
b2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9tU3RyaW5nTGlz
dEZ1bmN0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQpAQCAtMjA1OCw2ICsyMjk5LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZG9tU3RyaW5nTGlzdEZ1bmN0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyCiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkp
OwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRvbVN0cmluZ0xpc3RGdW5jdGlv
bk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjpkb21TdHJpbmdMaXN0RnVuY3Rpb25NZXRob2QoYXJncyk7Cit9
CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRNZXRob2QoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtMjA3NCw2ICsyMzIwLDExIEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRNZXRob2QoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xh
dGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRN
ZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBU
ZXN0T2JqVjhJbnRlcm5hbDo6Z2V0U1ZHRG9jdW1lbnRNZXRob2QoYXJncyk7Cit9CisKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydDFNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0yMDg0LDYgKzIzMzUs
MTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0MU1ldGhvZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQxTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmNvbnZl
cnQxTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnQyTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQpAQCAtMjA5NCw2ICsyMzUwLDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydDJNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0Mk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0
dXJuIFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0Mk1ldGhvZChhcmdzKTsKK30KKwogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0NE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTIxMDQsNiArMjM2NSwx
MSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ0TWV0aG9kKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydDRNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVy
dDRNZXRob2QoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVy
dDVNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5n
dGgoKSA8IDEpCkBAIC0yMTE0LDE4ICsyMzgwLDMzIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydDVNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0NU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0
dXJuIFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0NU1ldGhvZChhcmdzKTsKK30KKwogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdXRhYmxlUG9pbnRGdW5jdGlvbk1ldGhvZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHUHJv
cGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5tdXRhYmxlUG9pbnRGdW5jdGlv
bigpKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBtdXRhYmxlUG9pbnRGdW5jdGlvbk1ldGhvZENhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
OjptdXRhYmxlUG9pbnRGdW5jdGlvbk1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBpbW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKICAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRl
YXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSkp
LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gaW1tdXRhYmxlUG9pbnRGdW5jdGlvbk1ldGhvZENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpp
bW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG9yYW5nZU1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CkBA
IC0yMTMzLDYgKzI0MTQsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcmFuZ2VN
ZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcmFuZ2VNZXRob2RDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6b3JhbmdlTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHN0cmljdEZ1bmN0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAzKQpAQCAtMjE1Miw2ICsyNDM4LDExIEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaWN0RnVuY3Rpb25NZXRob2QoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xh
dGUoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaWN0RnVuY3Rpb25N
ZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBU
ZXN0T2JqVjhJbnRlcm5hbDo6c3RyaWN0RnVuY3Rpb25NZXRob2QoYXJncyk7Cit9CisKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFyaWFkaWNTdHJpbmdNZXRob2RNZXRob2QoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0y
MTYzLDYgKzI0NTQsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YXJpYWRpY1N0
cmluZ01ldGhvZE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICByZXR1cm4gdjhV
bmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YXJpYWRpY1N0
cmluZ01ldGhvZE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp2YXJpYWRpY1N0cmluZ01ldGhvZE1ldGhvZChh
cmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YXJpYWRpY0RvdWJsZU1l
dGhvZE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKQEAgLTIxNzQsNiArMjQ3MCwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhcmlhZGljRG91YmxlTWV0aG9kTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
ZwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhcmlhZGljRG91YmxlTWV0aG9kTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnZhcmlhZGljRG91
YmxlTWV0aG9kTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhcmlhZGljTm9kZU1ldGhvZE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTIxOTAsNiArMjQ5MSwxMSBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhcmlhZGljTm9kZU1ldGhvZE1ldGhvZChjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhcmlhZGljTm9kZU1ldGhvZE1ldGhvZENhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
Ojp2YXJpYWRpY05vZGVNZXRob2RNZXRob2QoYXJncyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRl
c3RPYmpWOEludGVybmFsCiAKIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNo
ZWRBdHRyaWJ1dGUgVjhUZXN0T2JqQXR0cnNbXSA9IHsKQEAgLTIzMjYsNTMgKzI2MzIsNTMgQEAg
c3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSBWOFRlc3RP
YmpBdHRyc1tdID0gewogfTsKIAogc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0
Y2hlZENhbGxiYWNrIFY4VGVzdE9iakNhbGxiYWNrc1tdID0gewotICAgIHsidm9pZE1ldGhvZCIs
IFRlc3RPYmpWOEludGVybmFsOjp2b2lkTWV0aG9kTWV0aG9kfSwKLSAgICB7ImxvbmdNZXRob2Qi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ01ldGhvZE1ldGhvZH0sCi0gICAgeyJvYmpNZXRob2Qi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6b2JqTWV0aG9kTWV0aG9kfSwKLSAgICB7Im1ldGhvZFJldHVy
bmluZ1NlcXVlbmNlIiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFJldHVybmluZ1NlcXVlbmNl
TWV0aG9kfSwKLSAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpWOEludGVybmFsOjpzZXJp
YWxpemVkVmFsdWVNZXRob2R9LAotICAgIHsib3B0aW9uc09iamVjdCIsIFRlc3RPYmpWOEludGVy
bmFsOjpvcHRpb25zT2JqZWN0TWV0aG9kfSwKLSAgICB7Im1ldGhvZFdpdGhFeGNlcHRpb24iLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbk1ldGhvZH0sCi0gICAgeyJjdXN0
b21NZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y3VzdG9tTWV0aG9kTWV0aG9kfSwKLSAgICB7
ImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgVGVzdE9ialY4SW50ZXJuYWw6OmN1c3RvbU1ldGhvZFdp
dGhBcmdzTWV0aG9kfSwKLSAgICB7ImFkZEV2ZW50TGlzdGVuZXIiLCBUZXN0T2JqVjhJbnRlcm5h
bDo6YWRkRXZlbnRMaXN0ZW5lck1ldGhvZH0sCi0gICAgeyJyZW1vdmVFdmVudExpc3RlbmVyIiwg
VGVzdE9ialY4SW50ZXJuYWw6OnJlbW92ZUV2ZW50TGlzdGVuZXJNZXRob2R9LAotICAgIHsid2l0
aFNjcmlwdFN0YXRlVm9pZCIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lk
TWV0aG9kfSwKLSAgICB7IndpdGhTY3JpcHRTdGF0ZU9iaiIsIFRlc3RPYmpWOEludGVybmFsOjp3
aXRoU2NyaXB0U3RhdGVPYmpNZXRob2R9LAotICAgIHsid2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2Vw
dGlvbiIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uTWV0
aG9kfSwKLSAgICB7IndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIsIFRlc3RPYmpWOEludGVy
bmFsOjp3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25NZXRob2R9LAotICAgIHsid2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQiLCBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRNZXRob2R9LAotICAgIHsid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZSIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlTWV0aG9kfSwKLSAgICB7IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVPYmpFeGNlcHRpb24iLCBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbk1ldGhvZH0sCi0gICAgeyJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyIsIFRlc3RP
YmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc01ldGhvZH0sCi0gICAgeyJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrIiwg
VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tNZXRob2R9
LAotICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhv
ZFdpdGhPcHRpb25hbEFyZ01ldGhvZH0sCi0gICAgeyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZyIsIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZ01ldGhvZH0sCi0gICAgeyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzTWV0aG9kfSwKLSAgICB7Im1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZyIsIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdNZXRo
b2R9LAotICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQiLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRNZXRob2R9LAot
ICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nIiwgVGVzdE9ialY4SW50
ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZ01ldGhvZH0sCi0gICAg
eyJtZXRob2RXaXRoQ2FsbGJhY2tBcmciLCBUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aENh
bGxiYWNrQXJnTWV0aG9kfSwKLSAgICB7Im1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnIiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnTWV0aG9kfSwKLSAgICB7Im1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJn
IiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnTWV0
aG9kfSwKKyAgICB7InZvaWRNZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dm9pZE1ldGhvZE1l
dGhvZENhbGxiYWNrfSwKKyAgICB7ImxvbmdNZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6bG9u
Z01ldGhvZE1ldGhvZENhbGxiYWNrfSwKKyAgICB7Im9iak1ldGhvZCIsIFRlc3RPYmpWOEludGVy
bmFsOjpvYmpNZXRob2RNZXRob2RDYWxsYmFja30sCisgICAgeyJtZXRob2RSZXR1cm5pbmdTZXF1
ZW5jZSIsIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RSZXR1cm5pbmdTZXF1ZW5jZU1ldGhvZENh
bGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpWOEludGVybmFsOjpzZXJp
YWxpemVkVmFsdWVNZXRob2RDYWxsYmFja30sCisgICAgeyJvcHRpb25zT2JqZWN0IiwgVGVzdE9i
alY4SW50ZXJuYWw6Om9wdGlvbnNPYmplY3RNZXRob2RDYWxsYmFja30sCisgICAgeyJtZXRob2RX
aXRoRXhjZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25NZXRo
b2RDYWxsYmFja30sCisgICAgeyJjdXN0b21NZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y3Vz
dG9tTWV0aG9kTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFja30sCisg
ICAgeyJhZGRFdmVudExpc3RlbmVyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVu
ZXJNZXRob2RDYWxsYmFja30sCisgICAgeyJyZW1vdmVFdmVudExpc3RlbmVyIiwgVGVzdE9ialY4
SW50ZXJuYWw6OnJlbW92ZUV2ZW50TGlzdGVuZXJNZXRob2RDYWxsYmFja30sCisgICAgeyJ3aXRo
U2NyaXB0U3RhdGVWb2lkIiwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRN
ZXRob2RDYWxsYmFja30sCisgICAgeyJ3aXRoU2NyaXB0U3RhdGVPYmoiLCBUZXN0T2JqVjhJbnRl
cm5hbDo6d2l0aFNjcmlwdFN0YXRlT2JqTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsid2l0aFNjcmlw
dFN0YXRlVm9pZEV4Y2VwdGlvbiIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsid2l0aFNjcmlwdFN0YXRlT2JqRXhj
ZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbk1l
dGhvZENhbGxiYWNrfSwKKyAgICB7IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0IiwgVGVzdE9i
alY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0TWV0aG9kQ2FsbGJhY2t9LAor
ICAgIHsid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSIsIFRlc3RPYmpW
OEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlTWV0aG9k
Q2FsbGJhY2t9LAorICAgIHsid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbiIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMiLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNNZXRob2RDYWxsYmFja30sCisgICAgeyJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0
YWNrIiwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tN
ZXRob2RDYWxsYmFja30sCisgICAgeyJtZXRob2RXaXRoT3B0aW9uYWxBcmciLCBUZXN0T2JqVjhJ
bnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsibWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqVjhJbnRlcm5hbDo6
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmdNZXRob2RDYWxsYmFja30sCisg
ICAgeyJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzTWV0
aG9kQ2FsbGJhY2t9LAorICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIiwgVGVzdE9ialY4
SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ01ldGhvZENhbGxiYWNrfSwKKyAgICB7
Im1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkIiwgVGVzdE9ialY4SW50ZXJuYWw6
Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkTWV0aG9kQ2FsbGJhY2t9LAorICAg
IHsibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nIiwgVGVzdE9ialY4SW50ZXJu
YWw6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZ01ldGhvZENhbGxiYWNrfSwK
KyAgICB7Im1ldGhvZFdpdGhDYWxsYmFja0FyZyIsIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RX
aXRoQ2FsbGJhY2tBcmdNZXRob2RDYWxsYmFja30sCisgICAgeyJtZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZyIsIFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoTm9uQ2Fs
bGJhY2tBcmdBbmRDYWxsYmFja0FyZ01ldGhvZENhbGxiYWNrfSwKKyAgICB7Im1ldGhvZFdpdGhD
YWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxs
YmFja0FuZE9wdGlvbmFsQXJnTWV0aG9kQ2FsbGJhY2t9LAogI2lmIEVOQUJMRShDb25kaXRpb24x
KQotICAgIHsiY29uZGl0aW9uYWxNZXRob2QxIiwgVGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlv
bmFsTWV0aG9kMU1ldGhvZH0sCisgICAgeyJjb25kaXRpb25hbE1ldGhvZDEiLCBUZXN0T2JqVjhJ
bnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QxTWV0aG9kQ2FsbGJhY2t9LAogI2VuZGlmCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIHsiY29uZGl0aW9u
YWxNZXRob2QyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsTWV0aG9kMk1ldGhvZH0s
CisgICAgeyJjb25kaXRpb25hbE1ldGhvZDIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9u
YWxNZXRob2QyTWV0aG9kQ2FsbGJhY2t9LAogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIHsiY29uZGl0aW9uYWxNZXRob2QzIiwgVGVzdE9i
alY4SW50ZXJuYWw6OmNvbmRpdGlvbmFsTWV0aG9kM01ldGhvZH0sCisgICAgeyJjb25kaXRpb25h
bE1ldGhvZDMiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QzTWV0aG9kQ2Fs
bGJhY2t9LAogI2VuZGlmCi0gICAgeyJvdmVybG9hZGVkTWV0aG9kIiwgVGVzdE9ialY4SW50ZXJu
YWw6Om92ZXJsb2FkZWRNZXRob2RNZXRob2R9LAotICAgIHsiY2xhc3NNZXRob2RXaXRoQ2xhbXAi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRoQ2xhbXBNZXRob2R9LAotICAgIHsi
Z2V0U1ZHRG9jdW1lbnQiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Z2V0U1ZHRG9jdW1lbnRNZXRob2R9
LAotICAgIHsibXV0YWJsZVBvaW50RnVuY3Rpb24iLCBUZXN0T2JqVjhJbnRlcm5hbDo6bXV0YWJs
ZVBvaW50RnVuY3Rpb25NZXRob2R9LAotICAgIHsiaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIsIFRl
c3RPYmpWOEludGVybmFsOjppbW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kfSwKLSAgICB7Im9y
YW5nZSIsIFRlc3RPYmpWOEludGVybmFsOjpvcmFuZ2VNZXRob2R9LAotICAgIHsic3RyaWN0RnVu
Y3Rpb24iLCBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaWN0RnVuY3Rpb25NZXRob2R9LAotICAgIHsi
dmFyaWFkaWNTdHJpbmdNZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dmFyaWFkaWNTdHJpbmdN
ZXRob2RNZXRob2R9LAotICAgIHsidmFyaWFkaWNEb3VibGVNZXRob2QiLCBUZXN0T2JqVjhJbnRl
cm5hbDo6dmFyaWFkaWNEb3VibGVNZXRob2RNZXRob2R9LAorICAgIHsib3ZlcmxvYWRlZE1ldGhv
ZCIsIFRlc3RPYmpWOEludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kTWV0aG9kQ2FsbGJhY2t9LAor
ICAgIHsiY2xhc3NNZXRob2RXaXRoQ2xhbXAiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NNZXRo
b2RXaXRoQ2xhbXBNZXRob2RDYWxsYmFja30sCisgICAgeyJnZXRTVkdEb2N1bWVudCIsIFRlc3RP
YmpWOEludGVybmFsOjpnZXRTVkdEb2N1bWVudE1ldGhvZENhbGxiYWNrfSwKKyAgICB7Im11dGFi
bGVQb2ludEZ1bmN0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6Om11dGFibGVQb2ludEZ1bmN0aW9u
TWV0aG9kQ2FsbGJhY2t9LAorICAgIHsiaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIsIFRlc3RPYmpW
OEludGVybmFsOjppbW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2t9LAorICAgIHsi
b3JhbmdlIiwgVGVzdE9ialY4SW50ZXJuYWw6Om9yYW5nZU1ldGhvZENhbGxiYWNrfSwKKyAgICB7
InN0cmljdEZ1bmN0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmljdEZ1bmN0aW9uTWV0aG9k
Q2FsbGJhY2t9LAorICAgIHsidmFyaWFkaWNTdHJpbmdNZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5h
bDo6dmFyaWFkaWNTdHJpbmdNZXRob2RNZXRob2RDYWxsYmFja30sCisgICAgeyJ2YXJpYWRpY0Rv
dWJsZU1ldGhvZCIsIFRlc3RPYmpWOEludGVybmFsOjp2YXJpYWRpY0RvdWJsZU1ldGhvZE1ldGhv
ZENhbGxiYWNrfSwKIH07CiAKIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNo
ZWRDb25zdGFudCBWOFRlc3RPYmpDb25zdHNbXSA9IHsKQEAgLTI0NjMsODMgKzI3NjksODMgQEAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRl
c3RPYmpUZW1wbGF0ZSh2ODo6UGVyc2kKICAgICBjb25zdCBpbnQgdm9pZE1ldGhvZFdpdGhBcmdz
QXJnYyA9IDM7CiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdm9pZE1ldGhv
ZFdpdGhBcmdzQXJndlt2b2lkTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwg
VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6
OlNpZ25hdHVyZT4gdm9pZE1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6
TmV3KGRlc2MsIHZvaWRNZXRob2RXaXRoQXJnc0FyZ2MsIHZvaWRNZXRob2RXaXRoQXJnc0FyZ3Yp
OwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJ2b2lkTWV0aG9kV2l0aEFy
Z3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6dm9pZE1l
dGhvZFdpdGhBcmdzTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCB2b2lkTWV0aG9kV2l0aEFyZ3NTaWdu
YXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgidm9pZE1ldGhv
ZFdpdGhBcmdzIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6
OnZvaWRNZXRob2RXaXRoQXJnc01ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCB2b2lkTWV0
aG9kV2l0aEFyZ3NTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2xvbmdN
ZXRob2RXaXRoQXJncycKICAgICBjb25zdCBpbnQgbG9uZ01ldGhvZFdpdGhBcmdzQXJnYyA9IDM7
CiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbG9uZ01ldGhvZFdpdGhBcmdz
QXJndltsb25nTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0T2Jq
OjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVy
ZT4gbG9uZ01ldGhvZFdpdGhBcmdzU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2Ms
IGxvbmdNZXRob2RXaXRoQXJnc0FyZ2MsIGxvbmdNZXRob2RXaXRoQXJnc0FyZ3YpOwotICAgIHBy
b3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJsb25nTWV0aG9kV2l0aEFyZ3MiKSwgdjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ01ldGhvZFdpdGhB
cmdzTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBsb25nTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUpKTsK
KyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgibG9uZ01ldGhvZFdpdGhBcmdz
IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdNZXRo
b2RXaXRoQXJnc01ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBsb25nTWV0aG9kV2l0aEFy
Z3NTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ29iak1ldGhvZFdpdGhB
cmdzJwogICAgIGNvbnN0IGludCBvYmpNZXRob2RXaXRoQXJnc0FyZ2MgPSAzOwogICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG9iak1ldGhvZFdpdGhBcmdzQXJndltvYmpNZXRo
b2RXaXRoQXJnc0FyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RPYmo6OkdldFJhd1RlbXBs
YXRlKGlzb2xhdGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBvYmpNZXRob2RX
aXRoQXJnc1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBvYmpNZXRob2RXaXRo
QXJnc0FyZ2MsIG9iak1ldGhvZFdpdGhBcmdzQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3Ry
aW5nOjpOZXdTeW1ib2woIm9iak1ldGhvZFdpdGhBcmdzIiksIHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om9iak1ldGhvZFdpdGhBcmdzTWV0aG9kLCB2OFVuZGVm
aW5lZCgpLCBvYmpNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSkpOworICAgIHByb3RvLT5TZXQodjg6
OlN0cmluZzo6TmV3U3ltYm9sKCJvYmpNZXRob2RXaXRoQXJncyIpLCB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RXaXRoQXJnc01ldGhvZENhbGxi
YWNrLCB2OFVuZGVmaW5lZCgpLCBvYmpNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSkpOwogCiAgICAg
Ly8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aFNlcXVlbmNlQXJnJwogICAgIGNvbnN0IGlu
dCBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmd2W21ldGhvZFdpdGhTZXF1ZW5j
ZUFyZ0FyZ2NdID0geyBWOHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+OjpHZXRSYXdUZW1wbGF0ZShp
c29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0aG9kV2l0aFNlcXVl
bmNlQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhTZXF1
ZW5jZUFyZ0FyZ2MsIG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0FyZ3YpOwotICAgIHByb3RvLT5TZXQo
djg6OlN0cmluZzo6TmV3U3ltYm9sKCJtZXRob2RXaXRoU2VxdWVuY2VBcmciKSwgdjg6OkZ1bmN0
aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aFNlcXVlbmNlQXJn
TWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUpKTsK
KyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgibWV0aG9kV2l0aFNlcXVlbmNl
QXJnIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhv
ZFdpdGhTZXF1ZW5jZUFyZ01ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RXaXRo
U2VxdWVuY2VBcmdTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ21ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MnCiAgICAgY29uc3QgaW50IG1ldGhvZFRoYXRS
ZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmdjID0gMjsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJndlttZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkgfTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3NTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93c0FyZ2MsIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRU
aHJvd3NBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgibWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzTWV0
aG9kLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzU2ln
bmF0dXJlKSk7Ci0gICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY2xhc3NNZXRo
b2QiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NN
ZXRob2RNZXRob2QsIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7
Ci0gICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY2xhc3NNZXRob2RXaXRoT3B0
aW9uYWwiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y2xh
c3NNZXRob2RXaXRoT3B0aW9uYWxNZXRob2QsIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2ODo6
U2lnbmF0dXJlPigpKSk7Ci0gICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY2xh
c3NNZXRob2QyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6
OmNsYXNzTWV0aG9kMk1ldGhvZCwgdjhVbmRlZmluZWQoKSwgdjg6OkxvY2FsPHY4OjpTaWduYXR1
cmU+KCkpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgibWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRl
c3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzTWV0aG9k
Q2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3NTaWduYXR1cmUpKTsKKyAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjbGFz
c01ldGhvZCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpj
bGFzc01ldGhvZE1ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCB2ODo6TG9jYWw8djg6OlNp
Z25hdHVyZT4oKSkpOworICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNsYXNz
TWV0aG9kV2l0aE9wdGlvbmFsIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4
SW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZp
bmVkKCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7CisgICAgZGVzYy0+U2V0KHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbCgiY2xhc3NNZXRob2QyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpO
ZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kMk1ldGhvZENhbGxiYWNrLCB2OFVuZGVm
aW5lZCgpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOwogI2lmIEVOQUJMRShDb25kaXRp
b24xKQotICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIm92ZXJsb2FkZWRNZXRo
b2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om92ZXJs
b2FkZWRNZXRob2QxTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVy
ZT4oKSkpOworICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIm92ZXJsb2FkZWRN
ZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om92
ZXJsb2FkZWRNZXRob2QxTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2
ODo6U2lnbmF0dXJlPigpKSk7CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxRW5hYmxlZCgp
KQotICAgICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZW5hYmxlZEF0UnVu
dGltZU1ldGhvZDEiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5h
bDo6ZW5hYmxlZEF0UnVudGltZU1ldGhvZDFNZXRob2QsIHY4VW5kZWZpbmVkKCksIGRlZmF1bHRT
aWduYXR1cmUpKTsKKyAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9i
alY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxTWV0aG9kQ2FsbGJhY2ssIHY4VW5k
ZWZpbmVkKCksIGRlZmF1bHRTaWduYXR1cmUpKTsKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6ZmVhdHVyZU5hbWVFbmFibGVkKCkpCi0gICAgICAgIHByb3RvLT5TZXQodjg6OlN0cmlu
Zzo6TmV3U3ltYm9sKCJlbmFibGVkQXRSdW50aW1lTWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lTWV0aG9kMk1ldGhv
ZCwgdjhVbmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSkpOworICAgICAgICBwcm90by0+U2V0
KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZW5hYmxlZEF0UnVudGltZU1ldGhvZDIiKSwgdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZU1l
dGhvZDJNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSkpOwog
CiAgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnc3RyaW5nQXJyYXlGdW5jdGlvbicKICAgICBjb25z
dCBpbnQgc3RyaW5nQXJyYXlGdW5jdGlvbkFyZ2MgPSAxOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHN0cmluZ0FycmF5RnVuY3Rpb25Bcmd2W3N0cmluZ0FycmF5RnVuY3Rp
b25BcmdjXSA9IHsgVjhET01TdHJpbmdbXTo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkgfTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IHN0cmluZ0FycmF5RnVuY3Rpb25TaWduYXR1cmUg
PSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgc3RyaW5nQXJyYXlGdW5jdGlvbkFyZ2MsIHN0cmlu
Z0FycmF5RnVuY3Rpb25Bcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJv
bCgic3RyaW5nQXJyYXlGdW5jdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RP
YmpWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBz
dHJpbmdBcnJheUZ1bmN0aW9uU2lnbmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5n
OjpOZXdTeW1ib2woInN0cmluZ0FycmF5RnVuY3Rpb24iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbk1ldGhvZENhbGxiYWNr
LCB2OFVuZGVmaW5lZCgpLCBzdHJpbmdBcnJheUZ1bmN0aW9uU2lnbmF0dXJlKSk7CiAKICAgICAv
LyBDdXN0b20gU2lnbmF0dXJlICdkb21TdHJpbmdMaXN0RnVuY3Rpb24nCiAgICAgY29uc3QgaW50
IGRvbVN0cmluZ0xpc3RGdW5jdGlvbkFyZ2MgPSAxOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGRvbVN0cmluZ0xpc3RGdW5jdGlvbkFyZ3ZbZG9tU3RyaW5nTGlzdEZ1bmN0
aW9uQXJnY10gPSB7IFY4RE9NU3RyaW5nTGlzdDo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkgfTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGRvbVN0cmluZ0xpc3RGdW5jdGlvblNpZ25h
dHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBkb21TdHJpbmdMaXN0RnVuY3Rpb25Bcmdj
LCBkb21TdHJpbmdMaXN0RnVuY3Rpb25Bcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6
Ok5ld1N5bWJvbCgiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmRvbVN0cmluZ0xpc3RGdW5jdGlvbk1ldGhvZCwgdjhV
bmRlZmluZWQoKSwgZG9tU3RyaW5nTGlzdEZ1bmN0aW9uU2lnbmF0dXJlKSk7CisgICAgcHJvdG8t
PlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImRvbVN0cmluZ0xpc3RGdW5jdGlvbiIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpkb21TdHJpbmdMaXN0RnVu
Y3Rpb25NZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZG9tU3RyaW5nTGlzdEZ1bmN0aW9u
U2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdjb252ZXJ0MScKICAgICBj
b25zdCBpbnQgY29udmVydDFBcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBjb252ZXJ0MUFyZ3ZbY29udmVydDFBcmdjXSA9IHsgVjhhOjpHZXRSYXdUZW1wbGF0
ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gY29udmVydDFTaWdu
YXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY29udmVydDFBcmdjLCBjb252ZXJ0MUFy
Z3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjb252ZXJ0MSIpLCB2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0MU1ldGhv
ZCwgdjhVbmRlZmluZWQoKSwgY29udmVydDFTaWduYXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4
OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY29udmVydDEiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5l
dyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDFNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQo
KSwgY29udmVydDFTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2NvbnZl
cnQyJwogICAgIGNvbnN0IGludCBjb252ZXJ0MkFyZ2MgPSAxOwogICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQyQXJndltjb252ZXJ0MkFyZ2NdID0geyBWOGI6Okdl
dFJhd1RlbXBsYXRlKGlzb2xhdGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBj
b252ZXJ0MlNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjb252ZXJ0MkFyZ2Ms
IGNvbnZlcnQyQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNv
bnZlcnQyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNv
bnZlcnQyTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBjb252ZXJ0MlNpZ25hdHVyZSkpOworICAgIHBy
b3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjb252ZXJ0MiIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0Mk1ldGhvZENhbGxiYWNrLCB2
OFVuZGVmaW5lZCgpLCBjb252ZXJ0MlNpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIFNpZ25h
dHVyZSAnY29udmVydDQnCiAgICAgY29uc3QgaW50IGNvbnZlcnQ0QXJnYyA9IDE7CiAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDRBcmd2W2NvbnZlcnQ0QXJnY10g
PSB7IFY4ZDo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+IGNvbnZlcnQ0U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGNv
bnZlcnQ0QXJnYywgY29udmVydDRBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgiY29udmVydDQiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJ
bnRlcm5hbDo6Y29udmVydDRNZXRob2QsIHY4VW5kZWZpbmVkKCksIGNvbnZlcnQ0U2lnbmF0dXJl
KSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNvbnZlcnQ0IiksIHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNvbnZlcnQ0TWV0aG9k
Q2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIGNvbnZlcnQ0U2lnbmF0dXJlKSk7CiAKICAgICAvLyBD
dXN0b20gU2lnbmF0dXJlICdjb252ZXJ0NScKICAgICBjb25zdCBpbnQgY29udmVydDVBcmdjID0g
MTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb252ZXJ0NUFyZ3ZbY29u
dmVydDVBcmdjXSA9IHsgVjhlOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpI
YW5kbGU8djg6OlNpZ25hdHVyZT4gY29udmVydDVTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpO
ZXcoZGVzYywgY29udmVydDVBcmdjLCBjb252ZXJ0NUFyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6
OlN0cmluZzo6TmV3U3ltYm9sKCJjb252ZXJ0NSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0NU1ldGhvZCwgdjhVbmRlZmluZWQoKSwgY29udmVy
dDVTaWduYXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY29u
dmVydDUiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29u
dmVydDVNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgY29udmVydDVTaWduYXR1cmUpKTsK
IAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ3ZhcmlhZGljTm9kZU1ldGhvZCcKICAgICBjb25z
dCBpbnQgdmFyaWFkaWNOb2RlTWV0aG9kQXJnYyA9IDI7CiAgICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdmFyaWFkaWNOb2RlTWV0aG9kQXJndlt2YXJpYWRpY05vZGVNZXRob2RB
cmdjXSA9IHsgVjhOb2RlOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSwgVjhOb2RlOjpHZXRSYXdU
ZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gdmFyaWFk
aWNOb2RlTWV0aG9kU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIHZhcmlhZGlj
Tm9kZU1ldGhvZEFyZ2MsIHZhcmlhZGljTm9kZU1ldGhvZEFyZ3YpOwotICAgIHByb3RvLT5TZXQo
djg6OlN0cmluZzo6TmV3U3ltYm9sKCJ2YXJpYWRpY05vZGVNZXRob2QiKSwgdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6dmFyaWFkaWNOb2RlTWV0aG9kTWV0aG9k
LCB2OFVuZGVmaW5lZCgpLCB2YXJpYWRpY05vZGVNZXRob2RTaWduYXR1cmUpKTsKKyAgICBwcm90
by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgidmFyaWFkaWNOb2RlTWV0aG9kIiksIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OnZhcmlhZGljTm9kZU1ldGhv
ZE1ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCB2YXJpYWRpY05vZGVNZXRob2RTaWduYXR1
cmUpKTsKICAgICBWOERPTUNvbmZpZ3VyYXRpb246OmJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRl
c2MsIHByb3RvLCBWOFRlc3RPYmpDb25zdHMsIFdURl9BUlJBWV9MRU5HVEgoVjhUZXN0T2JqQ29u
c3RzKSwgaXNvbGF0ZSk7CiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKQEAgLTI2
MDYsMTAgKzI5MTIsMTAgQEAgdm9pZCBWOFRlc3RPYmo6Omluc3RhbGxQZXJDb250ZXh0UHJvdG90
eXBlUHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByb3QKIAogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSB0b1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQocHJvdG8t
PkNyZWF0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5pc0RvY3Vt
ZW50KCkgJiYgQ29udGV4dEZlYXR1cmVzOjplbmFibGVkUGVyQ29udGV4dE1ldGhvZDFFbmFibGVk
KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCkpKSB7Ci0gICAgICAgIHByb3RvLT5TZXQo
djg6OlN0cmluZzo6TmV3U3ltYm9sKCJlbmFibGVkUGVyQ29udGV4dE1ldGhvZDEiKSwgdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZFBlckNvbnRleHRN
ZXRob2QxTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBkZWZhdWx0U2lnbmF0dXJlKS0+R2V0RnVuY3Rp
b24oKSk7CisgICAgICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJlbmFibGVk
UGVyQ29udGV4dE1ldGhvZDEiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJ
bnRlcm5hbDo6ZW5hYmxlZFBlckNvbnRleHRNZXRob2QxTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZp
bmVkKCksIGRlZmF1bHRTaWduYXR1cmUpLT5HZXRGdW5jdGlvbigpKTsKICAgICB9CiAgICAgaWYg
KGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpICYmIENvbnRleHRGZWF0dXJlczo6ZmVh
dHVyZU5hbWVFbmFibGVkKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCkpKSB7Ci0gICAg
ICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJlbmFibGVkUGVyQ29udGV4dE1l
dGhvZDIiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5h
YmxlZFBlckNvbnRleHRNZXRob2QyTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBkZWZhdWx0U2lnbmF0
dXJlKS0+R2V0RnVuY3Rpb24oKSk7CisgICAgICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJlbmFibGVkUGVyQ29udGV4dE1ldGhvZDIiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZFBlckNvbnRleHRNZXRob2QyTWV0aG9kQ2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIGRlZmF1bHRTaWduYXR1cmUpLT5HZXRGdW5jdGlvbigpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKaW5kZXggOGMwNjkyNDE5OGZiM2EwMTZhZjVjYjJlZTA1ZWQxOGI1
MTk0YzI2OC4uOGRjNTk4OGFlMTIzMTk5ODVmZjE2ZDUwYjIzNDBiMDlkMjBkNmNmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKQEAgLTE5MSw2ICsxOTEsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhY2Nl
cHRUcmFuc2Zlckxpc3RNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhY2Nl
cHRUcmFuc2Zlckxpc3RNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIHJldHVybiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5h
bDo6YWNjZXB0VHJhbnNmZXJMaXN0TWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG11bHRpVHJhbnNmZXJMaXN0TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiB7CiAgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wID0g
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKQEAgLTIzNCw2ICsyMzksMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBt
dWx0aVRyYW5zZmVyTGlzdE1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJl
dHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11
bHRpVHJhbnNmZXJMaXN0TWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICByZXR1cm4gVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJu
YWw6Om11bHRpVHJhbnNmZXJMaXN0TWV0aG9kKGFyZ3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbAogCiBzdGF0aWMgY29u
c3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRlIFY4VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzW10gPSB7CkBAIC0yNTAsOCArMjYwLDggQEAgc3RhdGlj
IGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnQKIH07CiAKIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246
OkJhdGNoZWRDYWxsYmFjayBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxs
YmFja3NbXSA9IHsKLSAgICB7ImFjY2VwdFRyYW5zZmVyTGlzdCIsIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjphY2NlcHRUcmFuc2Zlckxpc3RNZXRob2R9LAot
ICAgIHsibXVsdGlUcmFuc2Zlckxpc3QiLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlVjhJbnRlcm5hbDo6bXVsdGlUcmFuc2Zlckxpc3RNZXRob2R9LAorICAgIHsiYWNjZXB0VHJh
bnNmZXJMaXN0IiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6
OmFjY2VwdFRyYW5zZmVyTGlzdE1ldGhvZENhbGxiYWNrfSwKKyAgICB7Im11bHRpVHJhbnNmZXJM
aXN0IiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6Om11bHRp
VHJhbnNmZXJMaXN0TWV0aG9kQ2FsbGJhY2t9LAogfTsKIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RUeXBlZGVmcy5jcHAKaW5kZXggZDMx
ZmY5M2I2NjhmZjIzY2Y1NzNkNGJhNGViZWUxNWZkZGUwMTE4OS4uMjg5MTc3NTUyMTk4NGFiNDI5
ODkyZTFjMjViZjgwZGI0NjZhMzIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMzYsNiAr
MjM2LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZnVuY01ldGhvZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZ1bmNNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpmdW5j
TWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11bHRpVHJh
bnNmZXJMaXN0TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQpAQCAtMjc3LDYgKzI4MiwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG11bHRpVHJhbnNmZXJMaXN0TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbXVsdGlUcmFuc2Zlckxpc3RNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjptdWx0aVRy
YW5zZmVyTGlzdE1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBzZXRTaGFkb3dNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAo
YXJncy5MZW5ndGgoKSA8IDMpCkBAIC0yOTksNiArMzA5LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gc2V0U2hhZG93TWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAg
ICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc2V0U2hhZG93TWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICByZXR1cm4gVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c2V0U2hhZG93TWV0aG9kKGFyZ3Mp
OworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFy
Z01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMSkKQEAgLTMwOCw2ICszMjMsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoU2VxdWVuY2VBcmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAg
ICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oaW1wLT5tZXRob2RX
aXRoU2VxdWVuY2VBcmcoc2VxdWVuY2VBcmcpKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6bWV0
aG9kV2l0aFNlcXVlbmNlQXJnTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG51bGxhYmxlQXJyYXlBcmdNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0zMTgsNiArMzM4LDExIEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnVsbGFibGVBcnJheUFyZ01ldGhvZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG51bGxhYmxlQXJyYXlBcmdNZXRob2RDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOElu
dGVybmFsOjpudWxsYWJsZUFycmF5QXJnTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGZ1bmNXaXRoQ2xhbXBNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0zMzksMTIgKzM2NCwyMiBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZ1bmNXaXRoQ2xhbXBNZXRob2QoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmdW5jV2l0aENsYW1wTWV0aG9kQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gVGVzdFR5cGVkZWZzVjhJbnRl
cm5hbDo6ZnVuY1dpdGhDbGFtcE1ldGhvZChhcmdzKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBpbW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHUHJv
cGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11dGFibGVQb2ludEZ1bmN0
aW9uKCkpKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50RnVuY3Rpb25NZXRob2RDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0VHlwZWRlZnNW
OEludGVybmFsOjppbW11dGFibGVQb2ludEZ1bmN0aW9uTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rpb25NZXRob2QoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0z
NjIsNiArMzk3LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXJyYXlG
dW5jdGlvbk1ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgcmV0dXJuIHNldERP
TUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rpb25NZXRob2RDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpz
dHJpbmdBcnJheUZ1bmN0aW9uTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rpb24yTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtMzc5LDYgKzQxOSwxMSBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rpb24yTWV0aG9k
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMs
IGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
dHJpbmdBcnJheUZ1bmN0aW9uMk1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnN0cmluZ0FycmF5RnVu
Y3Rpb24yTWV0aG9kKGFyZ3MpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
dGhvZFdpdGhFeGNlcHRpb25NZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAg
ICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKQEAgLTM5Myw2ICs0MzgsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBt
ZXRob2RXaXRoRXhjZXB0aW9uTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBy
ZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbk1ldGhvZENhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4
SW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25NZXRob2QoYXJncyk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWwKIAogc3RhdGljIGNvbnN0IFY4RE9NQ29uZmln
dXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSBWOFRlc3RUeXBlZGVmc0F0dHJzW10gPSB7CkBAIC00
MTMsMTIgKzQ2MywxMiBAQCBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVk
QXR0cmlidXRlIFY4VGVzdFR5cGVkZWZzQXR0cnNbXSA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBW
OERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRDYWxsYmFjayBWOFRlc3RUeXBlZGVmc0NhbGxiYWNr
c1tdID0gewotICAgIHsiZnVuYyIsIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmZ1bmNNZXRob2R9
LAotICAgIHsibXVsdGlUcmFuc2Zlckxpc3QiLCBUZXN0VHlwZWRlZnNWOEludGVybmFsOjptdWx0
aVRyYW5zZmVyTGlzdE1ldGhvZH0sCi0gICAgeyJzZXRTaGFkb3ciLCBUZXN0VHlwZWRlZnNWOElu
dGVybmFsOjpzZXRTaGFkb3dNZXRob2R9LAotICAgIHsiZnVuY1dpdGhDbGFtcCIsIFRlc3RUeXBl
ZGVmc1Y4SW50ZXJuYWw6OmZ1bmNXaXRoQ2xhbXBNZXRob2R9LAotICAgIHsiaW1tdXRhYmxlUG9p
bnRGdW5jdGlvbiIsIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmltbXV0YWJsZVBvaW50RnVuY3Rp
b25NZXRob2R9LAotICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RUeXBlZGVmc1Y4SW50
ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25NZXRob2R9LAorICAgIHsiZnVuYyIsIFRlc3RUeXBl
ZGVmc1Y4SW50ZXJuYWw6OmZ1bmNNZXRob2RDYWxsYmFja30sCisgICAgeyJtdWx0aVRyYW5zZmVy
TGlzdCIsIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om11bHRpVHJhbnNmZXJMaXN0TWV0aG9kQ2Fs
bGJhY2t9LAorICAgIHsic2V0U2hhZG93IiwgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c2V0U2hh
ZG93TWV0aG9kQ2FsbGJhY2t9LAorICAgIHsiZnVuY1dpdGhDbGFtcCIsIFRlc3RUeXBlZGVmc1Y4
SW50ZXJuYWw6OmZ1bmNXaXRoQ2xhbXBNZXRob2RDYWxsYmFja30sCisgICAgeyJpbW11dGFibGVQ
b2ludEZ1bmN0aW9uIiwgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6aW1tdXRhYmxlUG9pbnRGdW5j
dGlvbk1ldGhvZENhbGxiYWNrfSwKKyAgICB7Im1ldGhvZFdpdGhFeGNlcHRpb24iLCBUZXN0VHlw
ZWRlZnNWOEludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9uTWV0aG9kQ2FsbGJhY2t9LAogfTsK
IAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdFR5cGVkZWZzOjpjb25zdHJ1Y3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC00NjMsMjUgKzUxMywyNSBAQCBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFR5
cGVkZWZzVGVtcGxhdGUodjg6OgogICAgIGNvbnN0IGludCBtZXRob2RXaXRoU2VxdWVuY2VBcmdB
cmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRo
U2VxdWVuY2VBcmdBcmd2W21ldGhvZFdpdGhTZXF1ZW5jZUFyZ0FyZ2NdID0geyBWOHNlcXVlbmNl
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT46OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpIH07CiAgICAg
djg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUg
PSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnYywgbWV0
aG9kV2l0aFNlcXVlbmNlQXJnQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ01ldGhvZCwgdjhV
bmRlZmluZWQoKSwgbWV0aG9kV2l0aFNlcXVlbmNlQXJnU2lnbmF0dXJlKSk7CisgICAgcHJvdG8t
PlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZ01ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RXaXRoU2VxdWVu
Y2VBcmdTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ251bGxhYmxlQXJy
YXlBcmcnCiAgICAgY29uc3QgaW50IG51bGxhYmxlQXJyYXlBcmdBcmdjID0gMTsKICAgICB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBudWxsYWJsZUFycmF5QXJnQXJndltudWxsYWJs
ZUFycmF5QXJnQXJnY10gPSB7IFY4RE9NU3RyaW5nW106OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUp
IH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBudWxsYWJsZUFycmF5QXJnU2lnbmF0
dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG51bGxhYmxlQXJyYXlBcmdBcmdjLCBudWxs
YWJsZUFycmF5QXJnQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
Im51bGxhYmxlQXJyYXlBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0VHlwZWRl
ZnNWOEludGVybmFsOjpudWxsYWJsZUFycmF5QXJnTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBudWxs
YWJsZUFycmF5QXJnU2lnbmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woIm51bGxhYmxlQXJyYXlBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0
VHlwZWRlZnNWOEludGVybmFsOjpudWxsYWJsZUFycmF5QXJnTWV0aG9kQ2FsbGJhY2ssIHY4VW5k
ZWZpbmVkKCksIG51bGxhYmxlQXJyYXlBcmdTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBT
aWduYXR1cmUgJ3N0cmluZ0FycmF5RnVuY3Rpb24nCiAgICAgY29uc3QgaW50IHN0cmluZ0FycmF5
RnVuY3Rpb25BcmdjID0gMTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBz
dHJpbmdBcnJheUZ1bmN0aW9uQXJndltzdHJpbmdBcnJheUZ1bmN0aW9uQXJnY10gPSB7IFY4RE9N
U3RyaW5nW106OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6
U2lnbmF0dXJlPiBzdHJpbmdBcnJheUZ1bmN0aW9uU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6
TmV3KGRlc2MsIHN0cmluZ0FycmF5RnVuY3Rpb25BcmdjLCBzdHJpbmdBcnJheUZ1bmN0aW9uQXJn
dik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInN0cmluZ0FycmF5RnVu
Y3Rpb24iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0VHlwZWRlZnNWOEludGVybmFs
OjpzdHJpbmdBcnJheUZ1bmN0aW9uTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBzdHJpbmdBcnJheUZ1
bmN0aW9uU2lnbmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
InN0cmluZ0FycmF5RnVuY3Rpb24iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0VHlw
ZWRlZnNWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2ssIHY4VW5k
ZWZpbmVkKCksIHN0cmluZ0FycmF5RnVuY3Rpb25TaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3Rv
bSBTaWduYXR1cmUgJ3N0cmluZ0FycmF5RnVuY3Rpb24yJwogICAgIGNvbnN0IGludCBzdHJpbmdB
cnJheUZ1bmN0aW9uMkFyZ2MgPSAxOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHN0cmluZ0FycmF5RnVuY3Rpb24yQXJndltzdHJpbmdBcnJheUZ1bmN0aW9uMkFyZ2NdID0g
eyBWOERPTVN0cmluZ1tdOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSB9OwogICAgIHY4OjpIYW5k
bGU8djg6OlNpZ25hdHVyZT4gc3RyaW5nQXJyYXlGdW5jdGlvbjJTaWduYXR1cmUgPSB2ODo6U2ln
bmF0dXJlOjpOZXcoZGVzYywgc3RyaW5nQXJyYXlGdW5jdGlvbjJBcmdjLCBzdHJpbmdBcnJheUZ1
bmN0aW9uMkFyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJzdHJp
bmdBcnJheUZ1bmN0aW9uMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RUeXBlZGVm
c1Y4SW50ZXJuYWw6OnN0cmluZ0FycmF5RnVuY3Rpb24yTWV0aG9kLCB2OFVuZGVmaW5lZCgpLCBz
dHJpbmdBcnJheUZ1bmN0aW9uMlNpZ25hdHVyZSkpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmlu
Zzo6TmV3U3ltYm9sKCJzdHJpbmdBcnJheUZ1bmN0aW9uMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0
ZTo6TmV3KFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnN0cmluZ0FycmF5RnVuY3Rpb24yTWV0aG9k
Q2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHN0cmluZ0FycmF5RnVuY3Rpb24yU2lnbmF0dXJlKSk7
CiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKICAgICBkZXNjLT5TZXQodjg6OlN0
cmluZzo6TmV3U3ltYm9sKCJ0b1N0cmluZyIpLCBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCkt
PnRvU3RyaW5nVGVtcGxhdGUoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>