<?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>109899</bug_id>
          
          <creation_ts>2013-02-14 23:24:28 -0800</creation_ts>
          <short_desc>[V8] MAYBE_MISSING_PARAMETER() macro is overkilling</short_desc>
          <delta_ts>2013-02-19 12:49:47 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833732</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-14 23:24:28 -0800</bug_when>
    <thetext>Currently:

- MAYBE_MISSING_PARAMETER(args, index, DefaultIsUndefined) returns args[index].
- MAYBE_MISSING_PARAMETER(args, index, DefaultIsNullString) returns Local&lt;Value&gt;() if args[index] is missing (i.e. the length of |args| is less than |index|). It returns args[index] otherwise.

No one other than CodeGeneratorV8.pm uses MAYBE_MISSING_PARAMETER(args, index, DefaultIsUndefined). Instead, we simply use args[index]. We should remove the redundant usage in CodeGeneratorV8.pm too. The long-name macro has been making generated code less readable.

In addition, we can rename MAYBE_MISSING_PARAMETER() to MissingIsNullString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833734</commentid>
    <comment_count>1</comment_count>
      <attachid>188488</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-14 23:26:26 -0800</bug_when>
    <thetext>Created attachment 188488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834079</commentid>
    <comment_count>2</comment_count>
      <attachid>188488</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 09:09:40 -0800</bug_when>
    <thetext>Comment on attachment 188488
Patch

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

&gt; Source/WebCore/bindings/v8/V8BindingMacros.h:55
&gt; +#define MissingIsNullString(args, index) \

Can we make this an inline function instead of a pre-processor macro?  (If not, we should keep the ALL_CAPS name to let callers know that it&apos;s a macro.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836032</commentid>
    <comment_count>3</comment_count>
      <attachid>189004</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-18 23:38:49 -0800</bug_when>
    <thetext>Created attachment 189004
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836034</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-18 23:39:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Can we make this an inline function instead of a pre-processor macro?  (If not, we should keep the ALL_CAPS name to let callers know that it&apos;s a macro.)

Changed it to an inline function and renamed it to argumentOrNull(). Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836075</commentid>
    <comment_count>5</comment_count>
      <attachid>189004</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 00:23:40 -0800</bug_when>
    <thetext>Comment on attachment 189004
patch for landing

Clearing flags on attachment: 189004

Committed r143305: &lt;http://trac.webkit.org/changeset/143305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836076</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 00:23:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836093</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-19 00:51:42 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 189004 [details])
&gt; Clearing flags on attachment: 189004
&gt; 
&gt; Committed r143305: &lt;http://trac.webkit.org/changeset/143305&gt;

This changed causes lots of warnings in the console during code generation from IDLs:

...
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1815.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
Use of uninitialized value $optional in string eq at ../bindings/scripts/CodeGeneratorV8.pm line 1832.
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836098</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 00:59:54 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 189004 [details] [details])
&gt; &gt; Clearing flags on attachment: 189004
&gt; &gt; 
&gt; &gt; Committed r143305: &lt;http://trac.webkit.org/changeset/143305&gt;
&gt; 
&gt; This changed causes lots of warnings in the console during code generation from IDLs:

Let me fix it in minutes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836102</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 01:02:40 -0800</bug_when>
    <thetext>Fixed in r143308. Sorry for the trouble!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836684</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 12:44:48 -0800</bug_when>
    <thetext>Some Mac binding generation tests are still failing: http://build.webkit.org/builders/Apple%20MountainLion%20Debug%20WK1%20%28Tests%29/builds/5637/steps/bindings-generation-tests/logs/stdio

Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836685</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 12:45:17 -0800</bug_when>
    <thetext>Sorry, one sec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836689</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 12:49:47 -0800</bug_when>
    <thetext>Fixed in r143374. Sorry for the late fix!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188488</attachid>
            <date>2013-02-14 23:26:26 -0800</date>
            <delta_ts>2013-02-18 23:38:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109899-20130215162252.patch</filename>
            <type>text/plain</type>
            <size>56900</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI2MzUwMTk0NmZkOGVk
OTdkODkzYzczMTc4NDM5M2FiM2NiYjFjMy4uOTU3NWQyMjkwNGFjODg1NzNkN2ZkMWZjYTFlZDJh
ZDlkNzA2YWQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxMy0wMi0xNCAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUigpIG1hY3JvIGlzIG92ZXJraWxsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHk6CisKKyAgICAgICAgLSBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCBpbmRleCwgRGVmYXVsdElzVW5kZWZpbmVkKSBy
ZXR1cm5zIGFyZ3NbaW5kZXhdLgorICAgICAgICAtIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIGluZGV4LCBEZWZhdWx0SXNOdWxsU3RyaW5nKSByZXR1cm5zIExvY2FsPFZhbHVlPigpCisg
ICAgICAgIGlmIGFyZ3NbaW5kZXhdIGlzIG1pc3NpbmcgKGkuZS4gdGhlIGxlbmd0aCBvZiB8YXJn
c3wgaXMgbGVzcyB0aGFuIHxpbmRleHwpLgorICAgICAgICBJdCByZXR1cm5zIGFyZ3NbaW5kZXhd
IG90aGVyd2lzZS4KKworICAgICAgICBObyBvbmUgb3RoZXIgdGhhbiBDb2RlR2VuZXJhdG9yVjgu
cG0gdXNlcworICAgICAgICBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCBpbmRleCwgRGVm
YXVsdElzVW5kZWZpbmVkKS4gSW5zdGVhZCwgd2Ugc2ltcGx5IHVzZQorICAgICAgICBhcmdzW2lu
ZGV4XS4gV2Ugc2hvdWxkIHJlbW92ZSB0aGUgcmVkdW5kYW50IHVzYWdlIGZyb20gQ29kZUdlbmVy
YXRvclY4LnBtIHRvby4KKyAgICAgICAgVGhlIGxvbmctbmFtZSBtYWNybyBoYXMgYmVlbiBtYWtp
bmcgZ2VuZXJhdGVkIGNvZGUgbGVzcyByZWFkYWJsZS4KKworICAgICAgICBJbiBhZGRpdGlvbiwg
d2UgY2FuIHJlbmFtZSBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUigpIHRvIE1pc3NpbmdJc051bGxT
dHJpbmcoKS4KKworICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0NjRBcnJheVY4
SW50ZXJuYWw6OmZvb0NhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RBY3Rp
dmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0Z1bmN0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21O
YW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJW
OEludGVybmFsOjphbm90aGVyRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6Oml0ZW1DYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50Q2FsbGJhY2spOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1l
dGhvZDJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OmNvbnN0
cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyVjhJbnRlcm5hbDo6bWV0aG9kQ2FsbGJhY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNr
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2b2lkTWV0aG9kV2l0aEFyZ3NDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ01ldGhvZFdp
dGhBcmdzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om9i
ak1ldGhvZFdpdGhBcmdzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50
ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RSZXR1cm5pbmdTZXF1ZW5jZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVxdWlyZXNBbGxB
cmdzQW5kVGhyb3dzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJu
YWw6Om9wdGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFs
QXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QzQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRo
b2Q0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJs
b2FkZWRNZXRob2Q2Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJu
YWw6Om92ZXJsb2FkZWRNZXRob2Q3Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q4Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q5Q2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QxMENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpvdmVybG9hZGVkTWV0aG9k
MTFDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NN
ZXRob2RXaXRoT3B0aW9uYWxDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2Qy
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRQ
ZXJDb250ZXh0TWV0aG9kMUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjplbmFibGVkUGVyQ29udGV4dE1ldGhvZDJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpkb21TdHJpbmdMaXN0RnVuY3Rpb25D
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDFD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDJD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaWN0RnVu
Y3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6dmFy
aWFkaWNTdHJpbmdNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6dmFyaWFkaWNEb3VibGVNZXRob2RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6dmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGJhY2spOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNv
bnN0cnVjdG9yMUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yMkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yM0NhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yNENh
bGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmZ1bmNDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVybmFsOjpzZXRTaGFkb3dDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVybmFsOjptZXRob2RXaXRoU2Vx
dWVuY2VBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0VHlwZWRlZnNWOEludGVy
bmFsOjpudWxsYWJsZUFycmF5QXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFR5
cGVkZWZzVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnN0cmluZ0FycmF5RnVuY3Rpb24yQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0VHlwZWRlZnM6OmNvbnN0cnVjdG9yQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhpc3Rvcnk6OnB1c2hTdGF0ZUNhbGxiYWNrQ3Vz
dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SGlzdG9yeTo6cmVwbGFjZVN0YXRlQ2FsbGJhY2tD
dXN0b20pOgorCiAyMDEzLTAyLTE0ICBBbmRyZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVzZSBHTCB0eXBlZGVmcyBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aWRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCmluZGV4IDZmZjJjMDUyZmQ4NmEyNjcwMzlhYWUxZTRkNjZjOTgyMmQwNDVmZGIuLjg2
ZmRjM2U1MTZiYWZkYjA1OWU1YjU4MmIyNmQzMTYyYTA5ODM4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xODEyLDcg
KzE4MTIsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICAk
cGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBWOFRSWUNBVENIKFZlY3RvcjwkbmF0aXZlRWxl
bWVudFR5cGU+LCAkcGFyYW1ldGVyTmFtZSwgdG9OYXRpdmVBcmd1bWVudHM8JG5hdGl2ZUVsZW1l
bnRUeXBlPihhcmdzLCAkcGFyYW1JbmRleCkpO1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNpZiAoJG5hdGl2ZVR5cGUgPX4gL15WOFN0cmluZ1Jlc291cmNlLykgewotICAgICAgICAg
ICAgbXkgJHZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAkcGFyYW1JbmRleCwgJHBhcmFtZXRlckRlZmF1bHRQb2xpY3kpIiwg
ImFyZ3MuR2V0SXNvbGF0ZSgpIik7CisgICAgICAgICAgICBteSAkdmFsdWUgPSBKU1ZhbHVlVG9O
YXRpdmUoJHBhcmFtZXRlciwgJG9wdGlvbmFsIGVxICJEZWZhdWx0SXNOdWxsU3RyaW5nIiA/ICJN
aXNzaW5nSXNOdWxsU3RyaW5nKGFyZ3MsICRwYXJhbUluZGV4KSIgOiAiYXJnc1skcGFyYW1JbmRl
eF0iLCAiYXJncy5HZXRJc29sYXRlKCkiKTsKICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0
cmluZyAuPSAiICAgICIgLiBDb252ZXJ0VG9WOFN0cmluZ1Jlc291cmNlKCRwYXJhbWV0ZXIsICRu
YXRpdmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgJHZhbHVlKSAuICJcbiI7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNraW5nIiBleHRlbmRlZCBh
dHRyaWJ1dGUgaXMgcHJlc2VudCwgYW5kIHRoZSBhcmd1bWVudCdzIHR5cGUgaXMgYW4KQEAgLTE4
MzAsNyArMTgzMCw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgIFY4VFJZQ0FUQ0goJG5hdGl2ZVR5cGUsICRwYXJhbWV0ZXJOYW1lLCAiIC4KLSAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAkcGFyYW1JbmRleCwgJHBhcmFtZXRlckRlZmF1bHRQb2xpY3kpIiwgImFy
Z3MuR2V0SXNvbGF0ZSgpIikgLiAiKTtcbiI7CisgICAgICAgICAgICAgICAgIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwgZXEgIkRlZmF1bHRJc051bGxTdHJpbmciID8gIk1p
c3NpbmdJc051bGxTdHJpbmcoYXJncywgJHBhcmFtSW5kZXgpIiA6ICJhcmdzWyRwYXJhbUluZGV4
XSIsICJhcmdzLkdldElzb2xhdGUoKSIpIC4gIik7XG4iOwogICAgICAgICAgICAgaWYgKCRuYXRp
dmVUeXBlIGVxICdEaWN0aW9uYXJ5JykgewogICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNr
U3RyaW5nIC49ICIgICAgaWYgKCEkcGFyYW1ldGVyTmFtZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYm
ICEkcGFyYW1ldGVyTmFtZS5pc09iamVjdCgpKVxuIjsKICAgICAgICAgICAgICAgICRwYXJhbWV0
ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoXCJOb3QgYW4g
b2JqZWN0LlwiLCBhcmdzLkdldElzb2xhdGUoKSk7XG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKaW5k
ZXggN2IyMzdhMDBjOTliMjFlNmI3ZTUxMjUyZjkwZDA4ODk4ZGFjNTA5YS4uOWExZDU4NTI5YmRh
MDkzYTQ5YzA5YzYyNzgzOGYxOGU5OTBjNmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCkBAIC03
Niw3ICs3Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZm9vQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAg
ICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgp
KTsKICAgICBGbG9hdDY0QXJyYXkqIGltcCA9IFY4RmxvYXQ2NEFycmF5Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKEZsb2F0MzJBcnJheSosIGFycmF5LCBWOEZsb2F0
MzJBcnJheTo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhGbG9hdDMyQXJyYXk6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSChG
bG9hdDMyQXJyYXkqLCBhcnJheSwgVjhGbG9hdDMyQXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMF0s
IGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4RmxvYXQzMkFycmF5Ojp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDApOwogICAgIHJldHVybiB0b1Y4KGltcC0+
Zm9vKGFycmF5KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGUwMDI0YjllZWZmODVmNTdiNDdmNGU1
Yzc0NTliNDcyMTY0NmIyOTkuLmRlODNiMGUyYzljZjM5MGVmZjQ2NzM1NDQwZTU4MzNlMDg2MmU5
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC03NSw3ICs3NSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjaXRpbmdGdW5jdGlvbkNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0g
VjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJpbmRpbmdTdGF0ZTo6
aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
Ci0gICAgVjhUUllDQVRDSChOb2RlKiwgbmV4dENoaWxkLCBWOE5vZGU6Okhhc0luc3RhbmNlKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKE5vZGUqLCBuZXh0Q2hpbGQsIFY4Tm9kZTo6SGFzSW5z
dGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhOb2RlOjp0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDApOwogICAgIGltcC0+ZXhjaXRp
bmdGdW5jdGlvbihuZXh0Q2hpbGQpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAt
ODUsNyArODUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvc3RNZXNzYWdlQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKICAgICBUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXAgPSBWOFRlc3RBY3RpdmVE
T01PYmplY3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4
U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBtZXNzYWdlLCBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENI
X0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgbWVzc2FnZSwgYXJnc1sw
XSk7CiAgICAgaW1wLT5wb3N0TWVzc2FnZShtZXNzYWdlKTsKICAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDEzOGMz
NzgzZGNiNDhiNzc1M2ViNGU0ZGE3YzEzMWFiNDFjMGM2NDQuLjliMmMwODE4OGU5NzgzZmRkNDZk
MDIzYmM1YmU5YjcyNzZiNTRkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcApAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFub3Ro
ZXJGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXAg
PSBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAg
VjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0ciwg
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Cisg
ICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0
ciwgYXJnc1swXSk7CiAgICAgaW1wLT5hbm90aGVyRnVuY3Rpb24oc3RyKTsKICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGE5NjQyMTU5
ZDIxYmUyNjYyOGZlNjU4ZDZmMGNlOTQ0YWM4ODFhN2QuLjFlODIwODg0NzkxMzZjOWI3NDdiMmVi
Zjc3NjJmZDVlYTZhN2EyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtNzIsNyAr
NzIsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGl0ZW1DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIFRlc3RFdmVudFRhcmdldCogaW1wID0gVjhUZXN0RXZl
bnRUYXJnZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIKGludCwgaW5kZXgsIHRvVUludDMyKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRS
WUNBVENIKGludCwgaW5kZXgsIHRvVUludDMyKGFyZ3NbMF0pKTsKICAgICBpZiAoVU5MSUtFTFko
aW5kZXggPCAwKSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICBnb3Rv
IGZhaWw7CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBk
aXNwYXRjaEV2ZW50Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBUZXN0
RXZlbnRUYXJnZXQqIGltcCA9IFY4VGVzdEV2ZW50VGFyZ2V0Ojp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB7Ci0gICAgVjhUUllDQVRDSChF
dmVudCosIGV2dCwgVjhFdmVudDo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhFdmVu
dDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNB
VENIKEV2ZW50KiwgZXZ0LCBWOEV2ZW50OjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElz
b2xhdGUoKSkgPyBWOEV2ZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMF0pKSA6IDApOwogICAgIGJvb2wgcmVzdWx0ID0gaW1wLT5kaXNwYXRjaEV2ZW50KGV2
dCwgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEludGVyZmFjZS5jcHAKaW5kZXggZWNmNDdhZDYwNmQ0ZGY1Mzg0OTI1MzQ0MzA5MGViMzcwYTkx
YjFhMS4uZjU4N2IxYTkwYTg5YWZiNzkwMTc5NzI0ZGRjNjkyMGYyY2U4MDRhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEludGVyZmFjZS5jcHAKQEAgLTE4OSw4ICsxODksOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cgogICAgIFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgewotICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAg
IFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdl
dElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVk
KSkpIDogMCk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jl
c291cmNlPD4sIHN0ckFyZywgYXJnc1swXSk7CisgICAgVjhUUllDQVRDSChUZXN0T2JqKiwgb2Jq
QXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMV0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/
IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFd
KSkgOiAwKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKHNjcmlwdENvbnRleHQsIGltcCwg
c3RyQXJnLCBvYmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQpAQCAtMjg5LDggKzI4
OSw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RJbnRlcmZhY2U6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jl
c291cmNlPD4sIHN0cjEsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJp
bmdSZXNvdXJjZTw+LCBzdHIyLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZh
dWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4
U3RyaW5nUmVzb3VyY2U8Piwgc3RyMSwgYXJnc1swXSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhT
VFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0cjIsIGFyZ3NbMV0pOwogCiAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmlu
ZGV4IGViZjkzNmI0YWFmNTI5ZGFlYzFhYTM1OGRjZTBkMTI2MTFlNWY4NTguLmNjYjg2ZmQ5MDkz
M2RhYTAzZTdlYWRkOTQ5YmExOGFlMDMxYTU2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBtZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiBpbXAgPSBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyPiwgbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllD
QVRDSChSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpjcmVhdGUoYXJnc1swXSkpOwogICAgIGltcC0+bWV0aG9kKGxpc3RlbmVy
KTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcAppbmRleCBkMjYyN2Y5ZjJhMThmZGIxMzM2NGVhM2Y2ZDI0MjJiNjA5ZmFjZTRi
Li5iMGJmY2VlOThkMTI5MjE2OTkwNmZmNzIyMjQwMDY2NGUxYzZkNDMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC04Myw5ICs4Myw5IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yQ2FsbGJhY2so
Y29uc3Qgdjg6CiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIxLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKLSAgICBW
OFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyMiwg
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Ci0g
ICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0
cjMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc051bGxTdHJpbmcp
KTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8
Piwgc3RyMSwgYXJnc1swXSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShW
OFN0cmluZ1Jlc291cmNlPD4sIHN0cjIsIGFyZ3NbMV0pOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4
U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIzLCBNaXNzaW5nSXNOdWxsU3Ry
aW5nKGFyZ3MsIDIpKTsKIAogICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbCA9
IFRlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBz
dHIxLCBzdHIyLCBzdHIzLCBlYyk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gYXJncy5Ib2xkZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggZTAzNGM2NjVmMDg0MDliZmY1YzhjNDRk
NWIxYmQ1MGE2ZWYzNzNiNC4uNzNiZTdjNWIxNmQ1NjY2ZWY1MmFmNWVhMzFiZmM0ODg1NWMxYjll
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAKQEAgLTk5Nyw5ICs5OTcsOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZvaWRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
ZwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQs
IGxvbmdBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKSkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhT
dHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEs
IERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywg
VjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBE
ZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSChpbnQs
IGxvbmdBcmcsIHRvSW50MzIoYXJnc1swXSkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5H
UkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIGFyZ3NbMV0pOworICAgIFY4VFJZ
Q0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzJdLCBh
cmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1syXSkpIDogMCk7CiAgICAgaW1wLT52b2lkTWV0aG9kV2l0aEFyZ3Mo
bG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpA
QCAtMTAxNSw5ICsxMDE1LDkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBsb25nTWV0
aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0lu
dDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
KTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8
Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRl
ZmluZWQpKTsKLSAgICBWOFRSWUNBVENIKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFz
SW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZp
bmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0lu
dDMyKGFyZ3NbMF0pKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3Ry
aW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBhcmdzWzFdKTsKKyAgICBWOFRSWUNBVENIKFRlc3RPYmoq
LCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSwgYXJncy5HZXRJc29sYXRl
KCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMl0pKSA6IDApOwogICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5sb25nTWV0aG9kV2l0aEFy
Z3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKQEAg
LTEwMzMsOSArMTAzMyw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9k
V2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQz
MihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7
Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4s
IHN0ckFyZywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7Ci0gICAgVjhUUllDQVRDSChUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0lu
c3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5l
ZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0
SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQz
MihhcmdzWzBdKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmlu
Z1Jlc291cmNlPD4sIHN0ckFyZywgYXJnc1sxXSk7CisgICAgVjhUUllDQVRDSChUZXN0T2JqKiwg
b2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0sIGFyZ3MuR2V0SXNvbGF0ZSgp
KSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzJdKSkgOiAwKTsKICAgICByZXR1cm4gdG9WOChpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGxvbmdB
cmcsIHN0ckFyZywgb2JqQXJnKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwog
fQogCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
dGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxSZWZQdHI8
U2NyaXB0UHJvZmlsZT4gPiwgc2VxdWVuY2VBcmcsICh0b1JlZlB0ck5hdGl2ZUFycmF5PFNjcmlw
dFByb2ZpbGUsIFY4U2NyaXB0UHJvZmlsZT4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywg
MCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpKSk7CisgICAgVjhUUllD
QVRDSChWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4sIHNlcXVlbmNlQXJnLCAodG9SZWZQ
dHJOYXRpdmVBcnJheTxTY3JpcHRQcm9maWxlLCBWOFNjcmlwdFByb2ZpbGU+KGFyZ3NbMF0sIGFy
Z3MuR2V0SXNvbGF0ZSgpKSkpOwogICAgIGltcC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKHNlcXVl
bmNlQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTEwNTQsNyArMTA1NCw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQog
ICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRD
SChpbnQsIGxvbmdBcmcsIHRvSW50MzIoYXJnc1swXSkpOwogICAgIHJldHVybiB2OEFycmF5KGlt
cC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UobG9uZ0FyZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
IH0KIApAQCAtMTA2NSw4ICsxMDY1LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBt
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGJhY2soY29uc3QgdjgKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JF
U09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKLSAgICBWOFRSWUNBVENIKFRlc3RPYmoq
LCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhUZXN0
T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIGFy
Z3NbMF0pOworICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJ
bnN0YW5jZShhcmdzWzFdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpIDogMCk7CiAgICAgUmVmUHRy
PFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyhzdHJBcmcsIG9iakFyZywgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdv
dG8gZmFpbDsKQEAgLTEwOTQsMTAgKzEwOTQsMTAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goRGljdGlvbmFy
eSwgb28sIERpY3Rpb25hcnkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKKyAgICBWOFRSWUNBVENIKERpY3Rp
b25hcnksIG9vLCBEaWN0aW9uYXJ5KGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CiAgICAg
aWYgKCFvby5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFvby5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3QuIiwgYXJncy5HZXRJc29sYXRlKCkp
OwotICAgIFY4VFJZQ0FUQ0goRGljdGlvbmFyeSwgb29vLCBEaWN0aW9uYXJ5KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKSk7CisgICAgVjhUUllDQVRDSChEaWN0aW9uYXJ5LCBvb28sIERpY3Rpb25hcnkoYXJnc1sx
XSwgYXJncy5HZXRJc29sYXRlKCkpKTsKICAgICBpZiAoIW9vby5pc1VuZGVmaW5lZE9yTnVsbCgp
ICYmICFvb28uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJOb3Qg
YW4gb2JqZWN0LiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBpbXAtPm9wdGlvbnNPYmplY3Qo
b28sIG9vbyk7CkBAIC0xMzEwLDcgKzEzMTAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAg
ICAgICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKCk7CiAgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICBWOFRSWUNBVENIKGludCwgb3B0LCB0b0ludDMyKE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBW
OFRSWUNBVENIKGludCwgb3B0LCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpbXAtPm1ldGhvZFdp
dGhPcHRpb25hbEFyZyhvcHQpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTMy
MCwxMiArMTMyMCwxMiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29ucwogICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
YXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIG5vbk9wdCwgdG9JbnQzMihN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Cisg
ICAgVjhUUllDQVRDSChpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZE9wdGlvbmFsQXJnKG5vbk9wdCk7CiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICBWOFRSWUNBVENIKGludCwgb3B0LCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKGlu
dCwgb3B0LCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KQEAgLTEzMzUsMTcgKzEzMzUsMTcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsYmFjaygKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBub25P
cHQsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5k
ZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBub25PcHQsIHRvSW50MzIoYXJnc1swXSkp
OwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAgICAgaW1wLT5tZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0KTsKICAgICAgICAgcmV0dXJu
IHY4VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIFY4VFJZQ0FUQ0goaW50LCBvcHQxLCB0b0ludDMy
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsK
KyAgICBWOFRSWUNBVENIKGludCwgb3B0MSwgdG9JbnQzMihhcmdzWzFdKSk7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMikgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEpOwogICAgICAgICByZXR1cm4gdjhVbmRl
ZmluZWQoKTsKICAgICB9Ci0gICAgVjhUUllDQVRDSChpbnQsIG9wdDIsIHRvSW50MzIoTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4
VFJZQ0FUQ0goaW50LCBvcHQyLCB0b0ludDMyKGFyZ3NbMl0pKTsKICAgICBpbXAtPm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9wdDIpOwog
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnQKICAgICAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmco
KTsKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIFY4VFJZQ0FUQ0hf
Rk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FU
Q0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIGFyZ3NbMF0p
OwogICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKHN0cik7CiAgICAgcmV0dXJuIHY4
VW5kZWZpbmVkKCk7CiB9CkBAIC0xMzY1LDcgKzEzNjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc1VuZGVmaW5lZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBW
OFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyLCBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAg
ICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3Ry
LCBhcmdzWzBdKTsKICAgICBpbXAtPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVk
KHN0cik7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xMzczLDcgKzEzNzMsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
VW5kZWZpbmVkQ2FsbGJhY2soY29uc3Qgdgogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBt
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0
cmluZ1Jlc291cmNlPD4sIHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVm
YXVsdElzTnVsbFN0cmluZykpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0Uo
VjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIE1pc3NpbmdJc051bGxTdHJpbmcoYXJncywgMCkpOwog
ICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKHN0cik7CiAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xMzk1LDcgKzEzOTUsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJn
Q2FsbGJhY2soY29ucwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKICAgICAgICAgcmV0dXJu
IHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhU
UllDQVRDSChpbnQsIG5vbkNhbGxiYWNrLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKGludCwgbm9u
Q2FsbGJhY2ssIHRvSW50MzIoYXJnc1swXSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEg
fHwgIWFyZ3NbMV0tPklzRnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KDAsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFj
ayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKQEAgLTE0NTMsOCArMTQ1Myw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gb3ZlcmxvYWRlZE1ldGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFRlc3RPYmoq
LCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhUZXN0
T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwotICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAg
IFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdz
WzBdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhT
VFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0ckFyZywgYXJnc1sxXSk7CiAgICAg
aW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgc3RyQXJnKTsKICAgICByZXR1cm4gdjhVbmRl
ZmluZWQoKTsKIH0KQEAgLTE0NjQsMTIgKzE0NjQsMTIgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goVGVz
dE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBW
OFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAg
VjhUUllDQVRDSChUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3Nb
MF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAxKSB7CiAgICAgICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOwogICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcs
IHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMV0pKTsK
ICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBsb25nQXJnKTsKICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKIH0KQEAgLTE0NzksNyArMTQ3OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENI
X0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRS
WUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBh
cmdzWzBdKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKIH0KQEAgLTE0ODksNyArMTQ4OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENI
KGludCwgbG9uZ0FyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50
MzIoYXJnc1swXSkpOwogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsKICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE1MTEsNyArMTUxMSw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDZDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRS
WUNBVENIKFJlZlB0cjxET01TdHJpbmdMaXN0PiwgbGlzdEFyZywgdG9ET01TdHJpbmdMaXN0KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKSk7CisgICAgVjhUUllDQVRDSChSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIGxp
c3RBcmcsIHRvRE9NU3RyaW5nTGlzdChhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkpOwogICAg
IGltcC0+b3ZlcmxvYWRlZE1ldGhvZChsaXN0QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KQEAgLTE1MjEsNyArMTUyMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
b3ZlcmxvYWRlZE1ldGhvZDdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJp
bmc+LCBhcnJheUFyZywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKFZlY3Rv
cjxTdHJpbmc+LCBhcnJheUFyZywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAg
ICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwogICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwogfQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvdmVybG9hZGVkTWV0aG9kOENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goVGVzdE9iaios
IG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllD
QVRDSChUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFy
Z3MuR2V0SXNvbGF0ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2Jq
QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE1NDEsNyArMTU0MSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDlDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUo
KSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJpbmc+LCBhcnJheUFyZywgdG9OYXRpdmVBcnJh
eTxTdHJpbmc+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVm
aW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJpbmc+LCBhcnJheUFyZywgdG9OYXRp
dmVBcnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoYXJy
YXlBcmcpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTU1MSw3ICsxNTUxLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMTBDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIFY4VFJZQ0FUQ0goVmVjdG9yPHVuc2lnbmVkPiwgYXJyYXlBcmcsIHRvTmF0aXZl
QXJyYXk8dW5zaWduZWQ+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKFZlY3Rvcjx1bnNpZ25lZD4sIGFycmF5QXJn
LCB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihhcmdzWzBdKSk7CiAgICAgaW1wLT5vdmVybG9hZGVk
TWV0aG9kKGFycmF5QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE1NjEs
NyArMTU2MSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhv
ZDExQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdz
LkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3Ry
aW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNF
KFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBhcmdzWzBdKTsKICAgICBpbXAtPm92ZXJsb2Fk
ZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2MDYs
NyArMTYwNiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRo
T3B0aW9uYWxDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMCkgewogICAgICAgICByZXR1cm4gdjhJbnRlZ2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9k
V2l0aE9wdGlvbmFsKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9Ci0gICAgVjhUUllDQVRD
SChpbnQsIGFyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChpbnQsIGFyZywgdG9JbnQzMihhcmdz
WzBdKSk7CiAgICAgcmV0dXJuIHY4SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRp
b25hbChhcmcpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKQEAgLTE2MjEsNyArMTYyMSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQog
ICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xh
dGUoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIGFyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChp
bnQsIGFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhv
ZDEoYXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2MzQsNyArMTYzNCw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElz
b2xhdGUoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jl
c291cmNlPD4sIHR5cGUsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJp
bmdSZXNvdXJjZTw+LCB0eXBlLCBhcmdzWzBdKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kMSh0eXBlKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2NzgsNyArMTY3
OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhv
ZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElz
b2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQzMihNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllD
QVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoYXJnc1swXSkpOwogICAgIGltcC0+ZW5hYmxlZEF0
UnVudGltZU1ldGhvZDEobG9uZ0FyZyk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBA
IC0xNjg4LDcgKzE2ODgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRB
dFJ1bnRpbWVNZXRob2QyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50
MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkp
OworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBp
bXAtPmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QyKGxvbmdBcmcpOwogICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwogfQpAQCAtMTY5OCw3ICsxNjk4LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBlbmFibGVkUGVyQ29udGV4dE1ldGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQK
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBs
b25nQXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQzMihhcmdz
WzBdKSk7CiAgICAgaW1wLT5lbmFibGVkUGVyQ29udGV4dE1ldGhvZDEobG9uZ0FyZyk7CiAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xNzA4LDcgKzE3MDgsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudAogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhU
UllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJn
LCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpbXAtPmVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMihs
b25nQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE3MjAsNyArMTcyMCw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICB7Ci0gICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5nPiwgdmFsdWVzLCB0b05hdGl2ZUFycmF5
PFN0cmluZz4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKSkpOworICAgIFY4VFJZQ0FUQ0goVmVjdG9yPFN0cmluZz4sIHZhbHVlcywgdG9OYXRpdmVB
cnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBpbXAt
PnN0cmluZ0FycmF5RnVuY3Rpb24odmFsdWVzLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkK
ICAgICAgICAgZ290byBmYWlsOwpAQCAtMTczNyw3ICsxNzM3LDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBkb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJgogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgewotICAgIFY4VFJZQ0FUQ0go
UmVmUHRyPERPTVN0cmluZ0xpc3Q+LCB2YWx1ZXMsIHRvRE9NU3RyaW5nTGlzdChNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xh
dGUoKSkpOworICAgIFY4VFJZQ0FUQ0goUmVmUHRyPERPTVN0cmluZ0xpc3Q+LCB2YWx1ZXMsIHRv
RE9NU3RyaW5nTGlzdChhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkpOwogICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiByZXN1bHQgPSBpbXAtPmRvbVN0cmluZ0xpc3RGdW5jdGlvbih2YWx1ZXMs
IGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xNzY4
LDcgKzE3NjgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQxQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEp
CiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goYSosIHZhbHVlLCBWOGE6Okhhc0luc3RhbmNlKE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKSA/IFY4YTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAw
KTsKKyAgICBWOFRSWUNBVENIKGEqLCB2YWx1ZSwgVjhhOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBh
cmdzLkdldElzb2xhdGUoKSkgPyBWOGE6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoYXJnc1swXSkpIDogMCk7CiAgICAgaW1wLT5jb252ZXJ0MSh2YWx1ZSk7CiAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xNzc4LDcgKzE3NzgsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goYios
IHZhbHVlLCBWOGI6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Yjo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGIqLCB2YWx1
ZSwgVjhiOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOGI6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAgICAg
aW1wLT5jb252ZXJ0Mih2YWx1ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0x
Nzg4LDcgKzE3ODgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ0Q2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goZCosIHZhbHVlLCBWOGQ6Okhhc0luc3RhbmNlKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKSA/IFY4ZDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkg
OiAwKTsKKyAgICBWOFRSWUNBVENIKGQqLCB2YWx1ZSwgVjhkOjpIYXNJbnN0YW5jZShhcmdzWzBd
LCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOGQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAgICAgaW1wLT5jb252ZXJ0NCh2YWx1ZSk7CiAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ1Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0go
ZSosIHZhbHVlLCBWOGU6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4ZTo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGUqLCB2
YWx1ZSwgVjhlOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOGU6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAg
ICAgaW1wLT5jb252ZXJ0NSh2YWx1ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBA
IC0xODI5LDkgKzE4MjksOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmljdEZ1
bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4
U3RyaW5nUmVzb3VyY2U8Piwgc3RyLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKTsKLSAgICBWOFRSWUNBVENIKGZsb2F0LCBhLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKS0+TnVtYmVyVmFsdWUoKSkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBiLCB0b0ludDMyKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAg
ICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3Ry
LCBhcmdzWzBdKTsKKyAgICBWOFRSWUNBVENIKGZsb2F0LCBhLCBzdGF0aWNfY2FzdDxmbG9hdD4o
YXJnc1sxXS0+TnVtYmVyVmFsdWUoKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBiLCB0b0ludDMy
KGFyZ3NbMl0pKTsKICAgICBSZWZQdHI8Ym9vbD4gcmVzdWx0ID0gaW1wLT5zdHJpY3RGdW5jdGlv
bihzdHIsIGEsIGIsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZh
aWw7CkBAIC0xODQ2LDcgKzE4NDYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
cmlhZGljU3RyaW5nTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYQogICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdS
RVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIGhlYWQsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RS
SU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBoZWFkLCBhcmdzWzBdKTsKICAgICBWOFRS
WUNBVENIKFZlY3RvcjxTdHJpbmc+LCB0YWlsLCB0b05hdGl2ZUFyZ3VtZW50czxTdHJpbmc+KGFy
Z3MsIDEpKTsKICAgICBpbXAtPnZhcmlhZGljU3RyaW5nTWV0aG9kKGhlYWQsIHRhaWwpOwogICAg
IHJldHVybiB2OFVuZGVmaW5lZCgpOwpAQCAtMTg1Nyw3ICsxODU3LDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YXJpYWRpY0RvdWJsZU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGEKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZ
Q0FUQ0goZG91YmxlLCBoZWFkLCBzdGF0aWNfY2FzdDxkb3VibGU+KE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCktPk51bWJlclZhbHVlKCkpKTsKKyAg
ICBWOFRSWUNBVENIKGRvdWJsZSwgaGVhZCwgc3RhdGljX2Nhc3Q8ZG91YmxlPihhcmdzWzBdLT5O
dW1iZXJWYWx1ZSgpKSk7CiAgICAgVjhUUllDQVRDSChWZWN0b3I8ZG91YmxlPiwgdGFpbCwgdG9O
YXRpdmVBcmd1bWVudHM8ZG91YmxlPihhcmdzLCAxKSk7CiAgICAgaW1wLT52YXJpYWRpY0RvdWJs
ZU1ldGhvZChoZWFkLCB0YWlsKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAgLTE4Njgs
NyArMTg2OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFyaWFkaWNOb2RlTWV0
aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdz
LkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKE5vZGUqLCBoZWFkLCBWOE5vZGU6Okhhc0lu
c3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKE5vZGUqLCBoZWFkLCBWOE5vZGU6Okhh
c0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gdGFpbDsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3MuTGVuZ3Ro
KCk7ICsraSkgewogICAgICAgICBpZiAoIVY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1tpXSwgYXJn
cy5HZXRJc29sYXRlKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMuY3BwCmluZGV4IDg4NjUzZDkxNGI3NzhkNTAwMjhkNTMzYjNmNTU3NmFjN2YxOGU4ZWIuLjZj
YmM4MzJkMDE3MjBhMGJjYWQyZWY3MzM2ZGY5Nzk3NzExNDk4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yMUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgCi0gICAgVjhUUllDQVRDSChBcnJheUJ1ZmZl
ciosIGFycmF5QnVmZmVyLCBWOEFycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUo
KSkgPyBWOEFycmF5QnVmZmVyOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6
IDApOworICAgIFY4VFJZQ0FUQ0goQXJyYXlCdWZmZXIqLCBhcnJheUJ1ZmZlciwgVjhBcnJheUJ1
ZmZlcjo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhBcnJheUJ1
ZmZlcjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAw
KTsKIAogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1wbCA9IFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXIpOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CkBAIC04Myw3ICs4Myw3IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25z
dHJ1Y3RvcjFDYWxsYmFjayhjb25zdCB2CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3IyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICAKLSAgICBWOFRSWUNBVENIKEFycmF5QnVmZmVyVmlldyosIGFy
cmF5QnVmZmVyVmlldywgVjhBcnJheUJ1ZmZlclZpZXc6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKSA/IFY4QXJyYXlCdWZmZXJWaWV3Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkpKSA6IDApOworICAgIFY4VFJZQ0FUQ0goQXJyYXlCdWZmZXJWaWV3KiwgYXJyYXlCdWZmZXJW
aWV3LCBWOEFycmF5QnVmZmVyVmlldzo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29s
YXRlKCkpID8gVjhBcnJheUJ1ZmZlclZpZXc6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+IGltcGwgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKGFycmF5
QnVmZmVyVmlldyk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5I
b2xkZXIoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yMkNhbGxiYWNrKGNvbnN0IHYKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3Rv
cjNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIAotICAgIFY4VFJZ
Q0FUQ0goQmxvYiosIGJsb2IsIFY4QmxvYjo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8g
VjhCbG9iOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4
VFJZQ0FUQ0goQmxvYiosIGJsb2IsIFY4QmxvYjo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5H
ZXRJc29sYXRlKCkpID8gVjhCbG9iOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbMF0pKSA6IDApOwogCiAgICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzPiBpbXBsID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShibG9iKTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwpAQCAtMTA3
LDcgKzEwNyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpjb25zdHJ1Y3RvcjNDYWxsYmFjayhjb25zdCB2CiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3I0Q2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICAKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNU
UklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyaW5nLCBNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENIX0ZP
Ul9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyaW5nLCBhcmdzWzBdKTsK
IAogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1wbCA9IFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCAzODY5MWYzYjI5ZmZk
YzFiZmFiZWFjZjMwMTBmOTMyZGEyODEzNmJlLi4wMzdhMGY1OTYxNWQ0OGY1ZGMzNjhlYjE5NDIy
NjQ5ZDdkYTIyNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjMwLDcgKzIzMCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soCiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
YXJncy5HZXRJc29sYXRlKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0Uo
VjhTdHJpbmdSZXNvdXJjZTw+LCBoZWxsbywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywg
MCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNP
VVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIGhlbGxvLCBhcmdzWzBdKTsKICAgICBNZXNzYWdlUG9y
dEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7CiAgICAgQXJyYXlCdWZmZXJBcnJh
eSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RUeXBlZGVmcy5jcHAKaW5kZXggOWI2YzE2N2Q3ZWFiZDE2ZGVlYmQ1YmExNzVi
ZGRiOGI3ZTM2MTczZC4uNDQ0ZGRlZGU0MjllNjBiNTIwOTE0MWM5M2M3MGFmZWE4ZTZkMzk4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0VHlwZWRlZnMuY3BwCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBmdW5jQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAg
ICB9CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdz
WzBdKSAmJiAhVjhsb25nW106Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgp
KSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKDAsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
LSAgICBWOFRSWUNBVENIKFZlY3RvcjxpbnQ+LCB4LCB0b05hdGl2ZUFycmF5PGludD4oTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4
VFJZQ0FUQ0goVmVjdG9yPGludD4sIHgsIHRvTmF0aXZlQXJyYXk8aW50PihhcmdzWzBdKSk7CiAg
ICAgaW1wLT5mdW5jKHgpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMjQzLDE5
ICsyNDMsMTkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRTaGFkb3dDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMykK
ICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29s
YXRlKCkpOwogICAgIFRlc3RUeXBlZGVmcyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goZmxvYXQsIHdpZHRoLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKS0+TnVtYmVyVmFsdWUoKSkpOwotICAgIFY4VFJZQ0FUQ0goZmxvYXQsIGhlaWdodCwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJ
c1VuZGVmaW5lZCktPk51bWJlclZhbHVlKCkpKTsKLSAgICBWOFRSWUNBVENIKGZsb2F0LCBibHVy
LCBzdGF0aWNfY2FzdDxmbG9hdD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVm
YXVsdElzVW5kZWZpbmVkKS0+TnVtYmVyVmFsdWUoKSkpOworICAgIFY4VFJZQ0FUQ0goZmxvYXQs
IHdpZHRoLCBzdGF0aWNfY2FzdDxmbG9hdD4oYXJnc1swXS0+TnVtYmVyVmFsdWUoKSkpOworICAg
IFY4VFJZQ0FUQ0goZmxvYXQsIGhlaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3NbMV0tPk51
bWJlclZhbHVlKCkpKTsKKyAgICBWOFRSWUNBVENIKGZsb2F0LCBibHVyLCBzdGF0aWNfY2FzdDxm
bG9hdD4oYXJnc1syXS0+TnVtYmVyVmFsdWUoKSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9
IDMpIHsKICAgICAgICAgaW1wLT5zZXRTaGFkb3cod2lkdGgsIGhlaWdodCwgYmx1cik7CiAgICAg
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIH0KLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNU
UklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgY29sb3IsIE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDMsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9S
X1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBjb2xvciwgYXJnc1szXSk7CiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gNCkgewogICAgICAgICBpbXAtPnNldFNoYWRvdyh3aWR0
aCwgaGVpZ2h0LCBibHVyLCBjb2xvcik7CiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICBWOFRSWUNBVENIKGZsb2F0LCBhbHBoYSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDQsIERlZmF1bHRJc1VuZGVmaW5lZCktPk51bWJl
clZhbHVlKCkpKTsKKyAgICBWOFRSWUNBVENIKGZsb2F0LCBhbHBoYSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFyZ3NbNF0tPk51bWJlclZhbHVlKCkpKTsKICAgICBpbXAtPnNldFNoYWRvdyh3aWR0aCwg
aGVpZ2h0LCBibHVyLCBjb2xvciwgYWxwaGEpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwog
fQpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aFNlcXVlbmNlQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5
cGVkZWZzOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+LCBzZXF1ZW5jZUFyZywgKHRvUmVmUHRyTmF0
aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBWOFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4o
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJn
cy5HZXRJc29sYXRlKCkpKSk7CisgICAgVjhUUllDQVRDSChWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gPiwgc2VxdWVuY2VBcmcsICh0b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSwgVjhTZXJpYWxpemVkU2NyaXB0VmFsdWU+KGFyZ3NbMF0sIGFyZ3Mu
R2V0SXNvbGF0ZSgpKSkpOwogICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoc3RhdGljX2Nhc3Q8
ZG91YmxlPihpbXAtPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZykpKTsKIH0KIApA
QCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnVsbGFibGVB
cnJheUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBl
ZGVmczo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChWZWN0b3I8U3Ry
aW5nPiwgYXJyYXlBcmcsIHRvTmF0aXZlQXJyYXk8U3RyaW5nPihNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChWZWN0
b3I8U3RyaW5nPiwgYXJyYXlBcmcsIHRvTmF0aXZlQXJyYXk8U3RyaW5nPihhcmdzWzBdKSk7CiAg
ICAgaW1wLT5udWxsYWJsZUFycmF5QXJnKGFycmF5QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIH0KQEAgLTMxMyw3ICszMTMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHN0cmluZ0FycmF5RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcgogICAg
IFRlc3RUeXBlZGVmcyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIKFZl
Y3RvcjxTdHJpbmc+LCB2YWx1ZXMsIHRvTmF0aXZlQXJyYXk8U3RyaW5nPihNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRD
SChWZWN0b3I8U3RyaW5nPiwgdmFsdWVzLCB0b05hdGl2ZUFycmF5PFN0cmluZz4oYXJnc1swXSkp
OwogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdCA9IGltcC0+c3RyaW5nQXJyYXlGdW5jdGlvbih2
YWx1ZXMsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBA
IC0zMzAsNyArMzMwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBcnJh
eUZ1bmN0aW9uMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGEKICAgICBUZXN0VHlwZWRl
ZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB7Ci0gICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5n
PiwgdmFsdWVzLCB0b05hdGl2ZUFycmF5PFN0cmluZz4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goVmVjdG9yPFN0
cmluZz4sIHZhbHVlcywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAgICBWZWN0
b3I8U3RyaW5nPiByZXN1bHQgPSBpbXAtPnN0cmluZ0FycmF5RnVuY3Rpb24yKHZhbHVlcywgZWMp
OwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTM5Miw3ICsz
OTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0VHlwZWRlZnM6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYQogICAgICAgICByZXR1cm4gYXJncy5Ib2xk
ZXIoKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd05v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBWOFRSWUNBVENI
X0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgaGVsbG8sIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBoZWxsbywgYXJn
c1swXSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSB8fCAhYXJnc1sxXS0+SXNGdW5jdGlv
bigpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoMCwgYXJncy5HZXRJc29sYXRlKCkp
OwogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IFY4VGVzdENhbGxiYWNr
OjpjcmVhdGUoYXJnc1sxXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmgKaW5kZXggMzUyZWJlZmM2MTM4
MTNlZTQ3YWZlYjZkZjZmMDA4ZjYxMDIxZDY0YS4uODAyOWE5NjFjOGVlYzYyMTA3MmY5ZDJkOWJm
NzQ2NTliYjdjYTlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nTWFjcm9zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
TWFjcm9zLmgKQEAgLTMzLDExICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51
bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKLSAgICBEZWZhdWx0SXNVbmRlZmluZWQsCi0gICAg
RGVmYXVsdElzTnVsbFN0cmluZwotfTsKLQogI2RlZmluZSBWOFRSWUNBVENIKHR5cGUsIHZhciwg
dmFsdWUpIFwKICAgICB0eXBlIHZhcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU3LDggKzUyLDgg
QEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICBpZiAoIXZhci5wcmVwYXJlKCkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
cmV0dXJuOwogCi0jZGVmaW5lIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIGluZGV4LCBw
b2xpY3kpIFwKLSAgICAoKChwb2xpY3kpID09IERlZmF1bHRJc051bGxTdHJpbmcgJiYgKGluZGV4
KSA+PSAoYXJncykuTGVuZ3RoKCkpID8gKHY4OjpMb2NhbDx2ODo6VmFsdWU+KCkpIDogKChhcmdz
KVsoaW5kZXgpXSkpCisjZGVmaW5lIE1pc3NpbmdJc051bGxTdHJpbmcoYXJncywgaW5kZXgpIFwK
KyAgICAoKChpbmRleCkgPj0gKGFyZ3MpLkxlbmd0aCgpKSA/ICh2ODo6TG9jYWw8djg6OlZhbHVl
PigpKSA6ICgoYXJncylbKGluZGV4KV0pKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3Rv
bS5jcHAKaW5kZXggYWZjNDlmZmU1ZDFkNzI0YjdjNzk4MTM1ODVjYzlhZjUwMDg2YTMzYS4uZWVj
YTZlY2NiNTIxOWQ4NDdjMjM3NWY1NDE0MjQ0MGRmMTBjMDk4NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6cHVzaFN0YXRlQ2Fs
bGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIAogICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJp
bmdSZXNvdXJjZTxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+LCB0aXRsZSwgYXJnc1sxXSk7Ci0g
ICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPFdpdGhV
bmRlZmluZWRPck51bGxDaGVjaz4sIHVybCwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywg
MiwgRGVmYXVsdElzTnVsbFN0cmluZykpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVT
T1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+LCB1cmwsIE1p
c3NpbmdJc051bGxTdHJpbmcoYXJncywgMikpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CkBAIC04Miw3ICs4Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnJl
cGxhY2VTdGF0ZUNhbGxiYWNrQ3VzdG9tKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09V
UkNFKFY4U3RyaW5nUmVzb3VyY2U8V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrPiwgdGl0bGUsIGFy
Z3NbMV0pOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNv
dXJjZTxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+LCB1cmwsIE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDIsIERlZmF1bHRJc051bGxTdHJpbmcpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9W
OFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
PiwgdXJsLCBNaXNzaW5nSXNOdWxsU3RyaW5nKGFyZ3MsIDIpKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189004</attachid>
            <date>2013-02-18 23:38:49 -0800</date>
            <delta_ts>2013-02-19 00:23:40 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-109899-20130219163511.patch</filename>
            <type>text/plain</type>
            <size>57609</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI2MzUwMTk0NmZkOGVk
OTdkODkzYzczMTc4NDM5M2FiM2NiYjFjMy4uZjA2NTZhODkwNzkyZTczNzQ5NzEwZWU2Nzg3ZmY0
Yzc4MDYwYTI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxMy0wMi0xNCAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBSZW1vdmUg
cmVkdW5kYW50IHVzYWdlIG9mIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKCkgbWFjcm8KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTg5OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgQ3VycmVudGx5OgorCisgICAg
ICAgIC0gTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgaW5kZXgsIERlZmF1bHRJc1VuZGVm
aW5lZCkgcmV0dXJucyBhcmdzW2luZGV4XS4KKyAgICAgICAgLSBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCBpbmRleCwgRGVmYXVsdElzTnVsbFN0cmluZykgcmV0dXJucyBMb2NhbDxWYWx1
ZT4oKQorICAgICAgICBpZiBhcmdzW2luZGV4XSBpcyBtaXNzaW5nIChpLmUuIHRoZSBsZW5ndGgg
b2YgfGFyZ3N8IGlzIGxlc3MgdGhhbiB8aW5kZXh8KS4KKyAgICAgICAgSXQgcmV0dXJucyBhcmdz
W2luZGV4XSBvdGhlcndpc2UuCisKKyAgICAgICAgTm8gb25lIG90aGVyIHRoYW4gQ29kZUdlbmVy
YXRvclY4LnBtIHVzZXMKKyAgICAgICAgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgaW5k
ZXgsIERlZmF1bHRJc1VuZGVmaW5lZCkuIEluc3RlYWQsIHdlIHNpbXBseSB1c2UKKyAgICAgICAg
YXJnc1tpbmRleF0uIFdlIHNob3VsZCByZW1vdmUgdGhlIHJlZHVuZGFudCB1c2FnZSBmcm9tIENv
ZGVHZW5lcmF0b3JWOC5wbSB0b28uCisgICAgICAgIFRoZSBsb25nLW5hbWUgbWFjcm8gaGFzIGJl
ZW4gbWFraW5nIGdlbmVyYXRlZCBjb2RlIGxlc3MgcmVhZGFibGUuCisKKyAgICAgICAgSW4gYWRk
aXRpb24sIHdlIGNhbiByZW5hbWUgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoKSB0byBhcmd1bWVu
dE9yTnVsbCgpLgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAg
KEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXQ2NEFycmF5
VjhJbnRlcm5hbDo6Zm9vQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEFj
dGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OmV4Y2l0aW5nRnVuY3Rpb25DYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VD
YWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRl
clY4SW50ZXJuYWw6OmFub3RoZXJGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEV2ZW50VGFyZ2V0VjhJbnRlcm5hbDo6aXRlbUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OmRpc3BhdGNoRXZlbnRDYWxsYmFjayk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFs
TWV0aG9kMkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6Y29u
c3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJWOEludGVybmFsOjptZXRob2RDYWxsYmFjayk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnZvaWRNZXRob2RXaXRoQXJnc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpsb25nTWV0aG9k
V2l0aEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
b2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6bWV0aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFJldHVybmluZ1NlcXVlbmNlQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6b3B0aW9uc09iamVjdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmdDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE5v
bkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDFDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDJDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDNDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1l
dGhvZDRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3Zl
cmxvYWRlZE1ldGhvZDZDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDhDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDlDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDEwQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRo
b2QxMUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFz
c01ldGhvZFdpdGhPcHRpb25hbENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kMTJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZU1ldGhvZDFDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZU1ldGhv
ZDJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxl
ZFBlckNvbnRleHRNZXRob2QxQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6OmVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRvbVN0cmluZ0xpc3RGdW5jdGlv
bkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0
MUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0
MkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0
NENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0
NUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdHJpY3RG
dW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2
YXJpYWRpY1N0cmluZ01ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjp2YXJpYWRpY0RvdWJsZU1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjp2YXJpYWRpY05vZGVNZXRob2RDYWxsYmFjayk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6
Y29uc3RydWN0b3IxQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3IyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3IzQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3I0
Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6ZnVuY0NhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnNldFNoYWRvd0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RUeXBlZGVmc1Y4SW50
ZXJuYWw6Om51bGxhYmxlQXJyYXlBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
VHlwZWRlZnNWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbjJD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RUeXBlZGVmczo6Y29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nTWFjcm9zLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SGlzdG9yeTo6cHVzaFN0YXRlQ2FsbGJhY2tD
dXN0b20pOgorICAgICAgICAoV2ViQ29yZTo6VjhIaXN0b3J5OjpyZXBsYWNlU3RhdGVDYWxsYmFj
a0N1c3RvbSk6CisKIDIwMTMtMDItMTQgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVXNlIEdMIHR5cGVkZWZzIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KaW5kZXggNmZmMmMwNTJmZDg2YTI2NzAzOWFhZTFlNGQ2NmM5ODIyZDA0NWZkYi4u
MjAwNjcxZWJlZTA4ZmEzMDE0MDk3YTNiYjI2ZTk0OWQ3MmRhMzkyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTE4MTIs
NyArMTgxMiw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAg
ICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIFY4VFJZQ0FUQ0goVmVjdG9yPCRuYXRpdmVF
bGVtZW50VHlwZT4sICRwYXJhbWV0ZXJOYW1lLCB0b05hdGl2ZUFyZ3VtZW50czwkbmF0aXZlRWxl
bWVudFR5cGU+KGFyZ3MsICRwYXJhbUluZGV4KSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2lmICgkbmF0aXZlVHlwZSA9fiAvXlY4U3RyaW5nUmVzb3VyY2UvKSB7Ci0gICAgICAg
ICAgICBteSAkdmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgIk1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsICRwYXJhbUluZGV4LCAkcGFyYW1ldGVyRGVmYXVsdFBvbGljeSki
LCAiYXJncy5HZXRJc29sYXRlKCkiKTsKKyAgICAgICAgICAgIG15ICR2YWx1ZSA9IEpTVmFsdWVU
b05hdGl2ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwgZXEgIkRlZmF1bHRJc051bGxTdHJpbmciID8g
ImFyZ3VtZW50T3JOdWxsKGFyZ3MsICRwYXJhbUluZGV4KSIgOiAiYXJnc1skcGFyYW1JbmRleF0i
LCAiYXJncy5HZXRJc29sYXRlKCkiKTsKICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmlu
ZyAuPSAiICAgICIgLiBDb252ZXJ0VG9WOFN0cmluZ1Jlc291cmNlKCRwYXJhbWV0ZXIsICRuYXRp
dmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgJHZhbHVlKSAuICJcbiI7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNraW5nIiBleHRlbmRlZCBhdHRy
aWJ1dGUgaXMgcHJlc2VudCwgYW5kIHRoZSBhcmd1bWVudCdzIHR5cGUgaXMgYW4KQEAgLTE4MzAs
NyArMTgzMCw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAi
ICAgIFY4VFJZQ0FUQ0goJG5hdGl2ZVR5cGUsICRwYXJhbWV0ZXJOYW1lLCAiIC4KLSAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAkcGFyYW1JbmRleCwgJHBhcmFtZXRlckRlZmF1bHRQb2xpY3kpIiwgImFyZ3Mu
R2V0SXNvbGF0ZSgpIikgLiAiKTtcbiI7CisgICAgICAgICAgICAgICAgIEpTVmFsdWVUb05hdGl2
ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwgZXEgIkRlZmF1bHRJc051bGxTdHJpbmciID8gImFyZ3Vt
ZW50T3JOdWxsKGFyZ3MsICRwYXJhbUluZGV4KSIgOiAiYXJnc1skcGFyYW1JbmRleF0iLCAiYXJn
cy5HZXRJc29sYXRlKCkiKSAuICIpO1xuIjsKICAgICAgICAgICAgIGlmICgkbmF0aXZlVHlwZSBl
cSAnRGljdGlvbmFyeScpIHsKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgIGlmICghJHBhcmFtZXRlck5hbWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhJHBhcmFt
ZXRlck5hbWUuaXNPYmplY3QoKSlcbiI7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tT
dHJpbmcgLj0gIiAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKFwiTm90IGFuIG9iamVjdC5c
IiwgYXJncy5HZXRJc29sYXRlKCkpO1xuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDdiMjM3
YTAwYzk5YjIxZTZiN2U1MTI1MmY5MGQwODg5OGRhYzUwOWEuLjlhMWQ1ODUyOWJkYTA5M2E0OWMw
OWM2Mjc4MzhmMThlOTkwYzZiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtNzYsNyArNzYs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZvb0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1
cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAg
RmxvYXQ2NEFycmF5KiBpbXAgPSBWOEZsb2F0NjRBcnJheTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgVjhUUllDQVRDSChGbG9hdDMyQXJyYXkqLCBhcnJheSwgVjhGbG9hdDMyQXJyYXk6
Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4RmxvYXQzMkFycmF5Ojp0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4VFJZQ0FUQ0goRmxvYXQzMkFy
cmF5KiwgYXJyYXksIFY4RmxvYXQzMkFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdl
dElzb2xhdGUoKSkgPyBWOEZsb2F0MzJBcnJheTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICByZXR1cm4gdG9WOChpbXAtPmZvbyhhcnJh
eSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBlMDAyNGI5ZWVmZjg1ZjU3YjQ3ZjRlNWM3NDU5YjQ3
MjE2NDZiMjk5Li5kZTgzYjBlMmM5Y2YzOTBlZmY0NjczNTQ0MGU1ODMzZTA4NjJlOWQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4Y2l0aW5nRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogICAgIFRlc3RBY3RpdmVET01PYmplY3QqIGltcCA9IFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNl
KCksIGltcC0+ZnJhbWUoKSkpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIFY4
VFJZQ0FUQ0goTm9kZSosIG5leHRDaGlsZCwgVjhOb2RlOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xh
dGUoKSkgPyBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7
CisgICAgVjhUUllDQVRDSChOb2RlKiwgbmV4dENoaWxkLCBWOE5vZGU6Okhhc0luc3RhbmNlKGFy
Z3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICBpbXAtPmV4Y2l0aW5nRnVuY3Rp
b24obmV4dENoaWxkKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTg1LDcgKzg1
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3N0TWVzc2FnZUNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUo
KSk7CiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JF
U09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgbWVzc2FnZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhT
VFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIG1lc3NhZ2UsIGFyZ3NbMF0pOwogICAg
IGltcC0+cG9zdE1lc3NhZ2UobWVzc2FnZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCAxMzhjMzc4M2RjYjQ4
Yjc3NTNlYjRlNGRhN2MxMzFhYjQxYzBjNjQ0Li45YjJjMDgxODhlOTc4M2ZkZDQ2ZDAyM2JjNWJl
OWI3Mjc2YjU0ZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAg
LTY2LDcgKzY2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhbm90aGVyRnVuY3Rp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJn
cy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wID0gVjhUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FU
Q0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIGFyZ3Nb
MF0pOwogICAgIGltcC0+YW5vdGhlckZ1bmN0aW9uKHN0cik7CiAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBhOTY0MjE1OWQyMWJlMjY2
MjhmZTY1OGQ2ZjBjZTk0NGFjODgxYTdkLi4xZTgyMDg4NDc5MTM2YzliNzQ3YjJlYmY3NzYyZmQ1
ZWE2YTdhMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpdGVtQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICBUZXN0RXZlbnRUYXJnZXQqIGltcCA9IFY4VGVzdEV2ZW50VGFyZ2V0
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICB7Ci0gICAgVjhUUllDQVRDSChpbnQsIGluZGV4LCB0b1VJbnQzMihNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChp
bnQsIGluZGV4LCB0b1VJbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKFVOTElLRUxZKGluZGV4IDwg
MCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgZ290byBmYWlsOwpA
QCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGlzcGF0Y2hF
dmVudENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgVGVzdEV2ZW50VGFy
Z2V0KiBpbXAgPSBWOFRlc3RFdmVudFRhcmdldDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgewotICAgIFY4VFJZQ0FUQ0goRXZlbnQqLCBl
dnQsIFY4RXZlbnQ6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4RXZlbnQ6OnRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSChFdmVu
dCosIGV2dCwgVjhFdmVudDo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkp
ID8gVjhFdmVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBd
KSkgOiAwKTsKICAgICBib29sIHJlc3VsdCA9IGltcC0+ZGlzcGF0Y2hFdmVudChldnQsIGVjKTsK
ICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwCmluZGV4IGVjZjQ3YWQ2MDZkNGRmNTM4NDkyNTM0NDMwOTBlYjM3MGE5MWIxYTEuLmY1
ODdiMWE5MGE4OWFmYjc5MDE3OTcyNGRkYzY5MjBmMmNlODA0YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwCkBAIC0xODksOCArMTg5LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
dXBwbGVtZW50YWxNZXRob2QyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICBU
ZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIX0ZP
Ul9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKLSAgICBWOFRSWUNB
VENIKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRl
KCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDAp
OworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+
LCBzdHJBcmcsIGFyZ3NbMF0pOworICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhU
ZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzFdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpIDogMCk7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0gVGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihzY3JpcHRDb250ZXh0LCBpbXAsIHN0ckFyZywg
b2JqQXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKQEAgLTI4OSw4ICsyODksOCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0SW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+
LCBzdHIxLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3Vy
Y2U8Piwgc3RyMiwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5k
ZWZpbmVkKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jl
c291cmNlPD4sIHN0cjEsIGFyZ3NbMF0pOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVT
T1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIyLCBhcmdzWzFdKTsKIAogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBlYmY5
MzZiNGFhZjUyOWRhZWMxYWEzNThkY2UwZDEyNjExZTVmODU4Li5jY2I4NmZkOTA5MzNkYWEwM2U3
ZWFkZDk0OWJhMThhZTAzMWE1NjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAo
YXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogaW1wID0gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgVjhUUllDQVRDSChSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIGxp
c3RlbmVyLCBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goUmVm
UHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCBsaXN0ZW5lciwgTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Y3JlYXRlKGFyZ3NbMF0pKTsKICAgICBpbXAtPm1ldGhvZChsaXN0ZW5lcik7CiAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggZDI2MjdmOWYyYTE4ZmRiMTMzNjRlYTNmNmQyNDIyYjYwOWZhY2U0Yi4uNTI1Mzdk
N2FlYjU5NGIzM2MwNWUwMmI2M2ExZjQzYTcxYjQ0ZWU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1l
ZENvbnN0cnVjdG9yLmNwcApAQCAtODMsOSArODMsOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4
OgogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElz
b2xhdGUoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBWOFRSWUNBVENIX0ZP
Ul9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyMSwgTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Ci0gICAgVjhUUllDQVRD
SF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0cjIsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIzLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNOdWxsU3RyaW5nKSk7CisgICAg
VjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0cjEs
IGFyZ3NbMF0pOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdS
ZXNvdXJjZTw+LCBzdHIyLCBhcmdzWzFdKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JF
U09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyMywgYXJndW1lbnRPck51bGwoYXJncywgMikp
OwogCiAgICAgUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBpbXBsID0gVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHN0cjEsIHN0cjIsIHN0
cjMsIGVjKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRl
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAppbmRleCBlMDM0YzY2NWYwODQwOWJmZjVjOGM0NGQ1YjFiZDUwYTZlZjM3
M2I0Li43MTdiOTUzYTUwMzRmOTY1Yzc0Njk0YzE3MWYzYWRlMDQyZmYyYzUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cApAQCAtOTk3LDkgKzk5Nyw5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdm9pZE1l
dGhvZFdpdGhBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9J
bnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNl
PD4sIHN0ckFyZywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5k
ZWZpbmVkKSk7Ci0gICAgVjhUUllDQVRDSChUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhh
c0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVm
aW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9J
bnQzMihhcmdzWzBdKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0
cmluZ1Jlc291cmNlPD4sIHN0ckFyZywgYXJnc1sxXSk7CisgICAgVjhUUllDQVRDSChUZXN0T2Jq
Kiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0sIGFyZ3MuR2V0SXNvbGF0
ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmdzWzJdKSkgOiAwKTsKICAgICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhsb25nQXJnLCBzdHJB
cmcsIG9iakFyZyk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xMDE1LDkgKzEw
MTUsOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdNZXRob2RXaXRoQXJnc0Nh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MykKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJ
c29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwotICAgIFY4VFJZ
Q0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAg
IFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdl
dElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVk
KSkpIDogMCk7CisgICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoYXJnc1swXSkp
OworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+
LCBzdHJBcmcsIGFyZ3NbMV0pOworICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhU
ZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzJdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMCk7
CiAgICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmxvbmdNZXRob2RXaXRoQXJncyhsb25nQXJnLCBz
dHJBcmcsIG9iakFyZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIApAQCAtMTAzMyw5ICsxMDMz
LDkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpNZXRob2RXaXRoQXJnc0NhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDMp
CiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKLSAgICBWOFRSWUNB
VENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKLSAgICBW
OFRSWUNBVENIKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJ
c29sYXRlKCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkp
KSA6IDApOworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsK
KyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwg
c3RyQXJnLCBhcmdzWzFdKTsKKyAgICBWOFRSWUNBVENIKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVz
dE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhUZXN0T2Jq
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKSA6IDApOwog
ICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBv
YmpBcmcpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKQEAgLTEwNDQs
NyArMTA0NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aFNlcXVl
bmNlQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goVmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9maWxl
PiA+LCBzZXF1ZW5jZUFyZywgKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgVjhT
Y3JpcHRQcm9maWxlPihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkpKTsKKyAgICBWOFRSWUNBVENIKFZlY3RvcjxS
ZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiwgc2VxdWVuY2VBcmcsICh0b1JlZlB0ck5hdGl2ZUFycmF5
PFNjcmlwdFByb2ZpbGUsIFY4U2NyaXB0UHJvZmlsZT4oYXJnc1swXSwgYXJncy5HZXRJc29sYXRl
KCkpKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoc2VxdWVuY2VBcmcpOwogICAg
IHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTA1NCw3ICsxMDU0LDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RSZXR1cm5pbmdTZXF1ZW5jZUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVy
biB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4
VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKGludCwgbG9uZ0Fy
ZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgcmV0dXJuIHY4QXJyYXkoaW1wLT5tZXRob2RSZXR1
cm5pbmdTZXF1ZW5jZShsb25nQXJnKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCkBAIC0xMDY1
LDggKzEwNjUsOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2OAogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgewotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJp
bmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpOwotICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhU
ZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZh
dWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhT
VFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0ckFyZywgYXJnc1swXSk7CisgICAg
VjhUUllDQVRDSChUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3Nb
MV0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkgOiAwKTsKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVz
dWx0ID0gaW1wLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKHN0ckFyZywgb2Jq
QXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWlsOwpAQCAt
MTA5NCwxMCArMTA5NCwxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9wdGlvbnNP
YmplY3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
YXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChEaWN0aW9uYXJ5LCBvbywgRGljdGlv
bmFyeShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
LCBhcmdzLkdldElzb2xhdGUoKSkpOworICAgIFY4VFJZQ0FUQ0goRGljdGlvbmFyeSwgb28sIERp
Y3Rpb25hcnkoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpKTsKICAgICBpZiAoIW9vLmlzVW5k
ZWZpbmVkT3JOdWxsKCkgJiYgIW9vLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigiTm90IGFuIG9iamVjdC4iLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgVjhUUllD
QVRDSChEaWN0aW9uYXJ5LCBvb28sIERpY3Rpb25hcnkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKKyAgICBW
OFRSWUNBVENIKERpY3Rpb25hcnksIG9vbywgRGljdGlvbmFyeShhcmdzWzFdLCBhcmdzLkdldElz
b2xhdGUoKSkpOwogICAgIGlmICghb29vLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIW9vby5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3QuIiwg
YXJncy5HZXRJc29sYXRlKCkpOwogICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKQEAg
LTEzMTAsNyArMTMxMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0
aE9wdGlvbmFsQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICAgICAgaW1wLT5t
ZXRob2RXaXRoT3B0aW9uYWxBcmcoKTsKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAg
ICAgfQotICAgIFY4VFJZQ0FUQ0goaW50LCBvcHQsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50
LCBvcHQsIHRvSW50MzIoYXJnc1swXSkpOwogICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJn
KG9wdCk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xMzIwLDEyICsxMzIwLDEy
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQog
ICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbm9uT3B0LCB0b0ludDMyKE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENI
KGludCwgbm9uT3B0LCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAxKSB7CiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmcobm9uT3B0KTsKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIFY4
VFJZQ0FUQ0goaW50LCBvcHQsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywg
MSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBvcHQsIHRvSW50
MzIoYXJnc1sxXSkpOwogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmcobm9uT3B0LCBvcHQpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTMz
NSwxNyArMTMzNSwxNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrKAogICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
YXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIG5vbk9wdCwgdG9JbnQzMihN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Cisg
ICAgVjhUUllDQVRDSChpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKICAgICB9Ci0gICAgVjhUUllDQVRDSChpbnQsIG9wdDEsIHRvSW50MzIoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FU
Q0goaW50LCBvcHQxLCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAyKSB7CiAgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzKG5vbk9wdCwgb3B0MSk7CiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAg
IH0KLSAgICBWOFRSWUNBVENIKGludCwgb3B0MiwgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChpbnQs
IG9wdDIsIHRvSW50MzIoYXJnc1syXSkpOwogICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0dXJuIHY4
VW5kZWZpbmVkKCk7CiB9CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudAogICAgICAgICBpbXAtPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZygpOwogICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdS
RVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJ
TkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHN0ciwgYXJnc1swXSk7CiAgICAgaW1wLT5t
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsK
IH0KQEAgLTEzNjUsNyArMTM2NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50CiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVk
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9S
X1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hf
Rk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIsIGFyZ3NbMF0pOwog
ICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoc3RyKTsKICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTEzNzMsNyArMTM3Myw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxs
YmFjayhjb25zdCB2CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzTnVsbFN0cmluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8
Piwgc3RyLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNOdWxsU3Ry
aW5nKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291
cmNlPD4sIHN0ciwgYXJndW1lbnRPck51bGwoYXJncywgMCkpOwogICAgIGltcC0+bWV0aG9kV2l0
aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKHN0cik7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CkBAIC0xMzk1LDcgKzEzOTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2soY29ucwogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIG5vbkNh
bGxiYWNrLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKGludCwgbm9uQ2FsbGJhY2ssIHRvSW50MzIo
YXJnc1swXSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEgfHwgIWFyZ3NbMV0tPklzRnVu
Y3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKDAsIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNr
OjpjcmVhdGUoYXJnc1sxXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTE0NTMs
OCArMTQ1Myw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhv
ZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdz
LkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9i
ajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5H
UkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0goVGVzdE9i
aiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xh
dGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSkpIDogMCk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0
cmluZ1Jlc291cmNlPD4sIHN0ckFyZywgYXJnc1sxXSk7CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0
aG9kKG9iakFyZywgc3RyQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE0
NjQsMTIgKzE0NjQsMTIgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVk
TWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhU
ZXN0T2JqOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSChUZXN0T2Jq
Kiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0
ZSgpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmdzWzBdKSkgOiAwKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7CiAgICAgICAgIGlt
cC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOwogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKICAgICB9Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZ
Q0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMV0pKTsKICAgICBpbXAtPm92ZXJsb2Fk
ZWRNZXRob2Qob2JqQXJnLCBsb25nQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0K
QEAgLTE0NzksNyArMTQ3OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3Zlcmxv
YWRlZE1ldGhvZDNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09V
UkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklO
R1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyQXJnLCBhcmdzWzBdKTsKICAgICBpbXAt
Pm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0K
QEAgLTE0ODksNyArMTQ4OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3Zlcmxv
YWRlZE1ldGhvZDRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9J
bnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7CisgICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoYXJnc1swXSkpOwogICAg
IGltcC0+b3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KQEAgLTE1MTEsNyArMTUxMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
b3ZlcmxvYWRlZE1ldGhvZDZDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFJlZlB0cjxET01T
dHJpbmdMaXN0PiwgbGlzdEFyZywgdG9ET01TdHJpbmdMaXN0KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7Cisg
ICAgVjhUUllDQVRDSChSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIGxpc3RBcmcsIHRvRE9NU3RyaW5n
TGlzdChhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkpOwogICAgIGltcC0+b3ZlcmxvYWRlZE1l
dGhvZChsaXN0QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE1MjEsNyAr
MTUyMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDdD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdl
dElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJpbmc+LCBhcnJheUFyZywgdG9O
YXRpdmVBcnJheTxTdHJpbmc+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJpbmc+LCBhcnJheUFy
ZywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAgICBpbXAtPm92ZXJsb2FkZWRN
ZXRob2QoYXJyYXlBcmcpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTUzMSw3
ICsxNTMxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9k
OENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2Jq
OjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgVjhUUllDQVRDSChUZXN0T2JqKiwgb2Jq
QXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/
IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBd
KSkgOiAwKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnKTsKICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKIH0KQEAgLTE1NDEsNyArMTU0MSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENI
KFZlY3RvcjxTdHJpbmc+LCBhcnJheUFyZywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRS
WUNBVENIKFZlY3RvcjxTdHJpbmc+LCBhcnJheUFyZywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KGFy
Z3NbMF0pKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwogICAgIHJldHVy
biB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTU1MSw3ICsxNTUxLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMTBDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmcKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FU
Q0goVmVjdG9yPHVuc2lnbmVkPiwgYXJyYXlBcmcsIHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAg
ICBWOFRSWUNBVENIKFZlY3Rvcjx1bnNpZ25lZD4sIGFycmF5QXJnLCB0b05hdGl2ZUFycmF5PHVu
c2lnbmVkPihhcmdzWzBdKSk7CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKGFycmF5QXJnKTsK
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE1NjEsNyArMTU2MSw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJnCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAg
ICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3Ry
QXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8
Piwgc3RyQXJnLCBhcmdzWzBdKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsK
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2MDYsNyArMTYwNiw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoT3B0aW9uYWxDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgewogICAgICAg
ICByZXR1cm4gdjhJbnRlZ2VyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9Ci0gICAgVjhUUllDQVRDSChpbnQsIGFyZywgdG9JbnQz
MihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7
CisgICAgVjhUUllDQVRDSChpbnQsIGFyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgcmV0dXJu
IHY4SW50ZWdlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiB9CiAKQEAgLTE2MjEsNyArMTYyMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJnCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgVjhUUllD
QVRDSChpbnQsIGFyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChpbnQsIGFyZywgdG9JbnQzMihh
cmdzWzBdKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoYXJnKTsKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2MzQsNyArMTYzNCw3IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJnCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgVjhU
UllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPD4sIHR5cGUsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAg
IFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCB0eXBl
LCBhcmdzWzBdKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMSh0eXBlKTsKICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE2NzgsNyArMTY3OCw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhvZDFDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBWOFRS
WUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcs
IHRvSW50MzIoYXJnc1swXSkpOwogICAgIGltcC0+ZW5hYmxlZEF0UnVudGltZU1ldGhvZDEobG9u
Z0FyZyk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xNjg4LDcgKzE2ODgsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVNZXRob2QyQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAg
ICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRl
KCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0go
aW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKICAgICBpbXAtPmVuYWJsZWRBdFJ1bnRp
bWVNZXRob2QyKGxvbmdBcmcpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMTY5
OCw3ICsxNjk4LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkUGVyQ29u
dGV4dE1ldGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBpZiAoYXJncy5MZW5n
dGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAg
ICBWOFRSWUNBVENIKGludCwgbG9uZ0FyZywgdG9JbnQzMihhcmdzWzBdKSk7CiAgICAgaW1wLT5l
bmFibGVkUGVyQ29udGV4dE1ldGhvZDEobG9uZ0FyZyk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CkBAIC0xNzA4LDcgKzE3MDgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudAogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChpbnQsIGxvbmdB
cmcsIHRvSW50MzIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5k
ZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBsb25nQXJnLCB0b0ludDMyKGFyZ3NbMF0p
KTsKICAgICBpbXAtPmVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMihsb25nQXJnKTsKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTE3MjAsNyArMTcyMCw3IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB7Ci0gICAgVjhUUllDQVRD
SChWZWN0b3I8U3RyaW5nPiwgdmFsdWVzLCB0b05hdGl2ZUFycmF5PFN0cmluZz4oTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZ
Q0FUQ0goVmVjdG9yPFN0cmluZz4sIHZhbHVlcywgdG9OYXRpdmVBcnJheTxTdHJpbmc+KGFyZ3Nb
MF0pKTsKICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBpbXAtPnN0cmluZ0FycmF5RnVuY3Rp
b24odmFsdWVzLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWls
OwpAQCAtMTczNyw3ICsxNzM3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb21T
dHJpbmdMaXN0RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJgogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgewotICAgIFY4VFJZQ0FUQ0goUmVmUHRyPERPTVN0cmluZ0xp
c3Q+LCB2YWx1ZXMsIHRvRE9NU3RyaW5nTGlzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkpOworICAgIFY4VFJZ
Q0FUQ0goUmVmUHRyPERPTVN0cmluZ0xpc3Q+LCB2YWx1ZXMsIHRvRE9NU3RyaW5nTGlzdChhcmdz
WzBdLCBhcmdzLkdldElzb2xhdGUoKSkpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiByZXN1
bHQgPSBpbXAtPmRvbVN0cmluZ0xpc3RGdW5jdGlvbih2YWx1ZXMsIGVjKTsKICAgICBpZiAoVU5M
SUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xNzY4LDcgKzE3NjgsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZ
Q0FUQ0goYSosIHZhbHVlLCBWOGE6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4YTo6
dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENI
KGEqLCB2YWx1ZSwgVjhhOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkg
PyBWOGE6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDog
MCk7CiAgICAgaW1wLT5jb252ZXJ0MSh2YWx1ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CiB9CkBAIC0xNzc4LDcgKzE3NzgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnZlcnQyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goYiosIHZhbHVlLCBWOGI6Okhhc0lu
c3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Yjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGIqLCB2YWx1ZSwgVjhiOjpIYXNJbnN0YW5j
ZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOGI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAgICAgaW1wLT5jb252ZXJ0Mih2YWx1
ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xNzg4LDcgKzE3ODgsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ0Q2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVy
biB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4
VFJZQ0FUQ0goZCosIHZhbHVlLCBWOGQ6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4
ZDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNB
VENIKGQqLCB2YWx1ZSwgVjhkOjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUo
KSkgPyBWOGQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkp
IDogMCk7CiAgICAgaW1wLT5jb252ZXJ0NCh2YWx1ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnZlcnQ1Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goZSosIHZhbHVlLCBWOGU6Okhh
c0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVm
aW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4ZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpKSkgOiAwKTsKKyAgICBWOFRSWUNBVENIKGUqLCB2YWx1ZSwgVjhlOjpIYXNJbnN0
YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOGU6OnRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7CiAgICAgaW1wLT5jb252ZXJ0NSh2
YWx1ZSk7CiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC0xODI5LDkgKzE4MjksOSBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmljdEZ1bmN0aW9uQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHsK
LSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwg
c3RyLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KTsKLSAgICBWOFRSWUNBVENIKGZsb2F0LCBhLCBzdGF0aWNfY2FzdDxmbG9hdD4oTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS0+TnVtYmVyVmFsdWUo
KSkpOwotICAgIFY4VFJZQ0FUQ0goaW50LCBiLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9W
OFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyLCBhcmdzWzBdKTsKKyAgICBW
OFRSWUNBVENIKGZsb2F0LCBhLCBzdGF0aWNfY2FzdDxmbG9hdD4oYXJnc1sxXS0+TnVtYmVyVmFs
dWUoKSkpOworICAgIFY4VFJZQ0FUQ0goaW50LCBiLCB0b0ludDMyKGFyZ3NbMl0pKTsKICAgICBS
ZWZQdHI8Ym9vbD4gcmVzdWx0ID0gaW1wLT5zdHJpY3RGdW5jdGlvbihzdHIsIGEsIGIsIGVjKTsK
ICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xODQ2LDcgKzE4
NDYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhcmlhZGljU3RyaW5nTWV0aG9k
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYQogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJ
c29sYXRlKCkpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jl
c291cmNlPD4sIGhlYWQsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJp
bmdSZXNvdXJjZTw+LCBoZWFkLCBhcmdzWzBdKTsKICAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJp
bmc+LCB0YWlsLCB0b05hdGl2ZUFyZ3VtZW50czxTdHJpbmc+KGFyZ3MsIDEpKTsKICAgICBpbXAt
PnZhcmlhZGljU3RyaW5nTWV0aG9kKGhlYWQsIHRhaWwpOwogICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwpAQCAtMTg1Nyw3ICsxODU3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YXJpYWRpY0RvdWJsZU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGEKICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0goZG91YmxlLCBoZWFk
LCBzdGF0aWNfY2FzdDxkb3VibGU+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCktPk51bWJlclZhbHVlKCkpKTsKKyAgICBWOFRSWUNBVENIKGRvdWJs
ZSwgaGVhZCwgc3RhdGljX2Nhc3Q8ZG91YmxlPihhcmdzWzBdLT5OdW1iZXJWYWx1ZSgpKSk7CiAg
ICAgVjhUUllDQVRDSChWZWN0b3I8ZG91YmxlPiwgdGFpbCwgdG9OYXRpdmVBcmd1bWVudHM8ZG91
YmxlPihhcmdzLCAxKSk7CiAgICAgaW1wLT52YXJpYWRpY0RvdWJsZU1ldGhvZChoZWFkLCB0YWls
KTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAgLTE4NjgsNyArMTg2OCw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJnCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAg
ICBWOFRSWUNBVENIKE5vZGUqLCBoZWFkLCBWOE5vZGU6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsK
KyAgICBWOFRSWUNBVENIKE5vZGUqLCBoZWFkLCBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0s
IGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gdGFp
bDsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3MuTGVuZ3RoKCk7ICsraSkgewogICAgICAg
ICBpZiAoIVY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1tpXSwgYXJncy5HZXRJc29sYXRlKCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IDg4NjUz
ZDkxNGI3NzhkNTAwMjhkNTMzYjNmNTU3NmFjN2YxOGU4ZWIuLjZjYmM4MzJkMDE3MjBhMGJjYWQy
ZWY3MzM2ZGY5Nzk3NzExNDk4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZv
aWQgVjhfVVNFKFQpIHsgfQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiB7CiAgICAgCi0gICAgVjhUUllDQVRDSChBcnJheUJ1ZmZlciosIGFycmF5QnVmZmVyLCBW
OEFycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpLCBhcmdzLkdldElzb2xhdGUoKSkgPyBWOEFycmF5QnVmZmVy
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4VFJZQ0FU
Q0goQXJyYXlCdWZmZXIqLCBhcnJheUJ1ZmZlciwgVjhBcnJheUJ1ZmZlcjo6SGFzSW5zdGFuY2Uo
YXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhBcnJheUJ1ZmZlcjo6dG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKIAogICAgIFJlZlB0cjxU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1wbCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGFyZ3MuSG9sZGVyKCk7CkBAIC04Myw3ICs4Myw3IEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3RvcjFDYWxsYmFjayhj
b25zdCB2CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6Y29uc3RydWN0b3IyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAg
ICAKLSAgICBWOFRSWUNBVENIKEFycmF5QnVmZmVyVmlldyosIGFycmF5QnVmZmVyVmlldywgVjhB
cnJheUJ1ZmZlclZpZXc6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4QXJyYXlCdWZm
ZXJWaWV3Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4
VFJZQ0FUQ0goQXJyYXlCdWZmZXJWaWV3KiwgYXJyYXlCdWZmZXJWaWV3LCBWOEFycmF5QnVmZmVy
Vmlldzo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhBcnJheUJ1
ZmZlclZpZXc6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkp
IDogMCk7CiAKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IGltcGwgPSBU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKGFycmF5QnVmZmVyVmlldyk7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKQEAgLTk1LDcg
Kzk1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM6OmNvbnN0cnVjdG9yMkNhbGxiYWNrKGNvbnN0IHYKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3RvcjNDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIAotICAgIFY4VFJZQ0FUQ0goQmxvYiosIGJsb2Is
IFY4QmxvYjo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhCbG9iOjp0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIFY4VFJZQ0FUQ0goQmxvYiosIGJs
b2IsIFY4QmxvYjo6SGFzSW5zdGFuY2UoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpID8gVjhC
bG9iOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDAp
OwogCiAgICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBpbXBsID0gVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShibG9iKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3Rv
cjNDYWxsYmFjayhjb25zdCB2CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3I0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICAKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3Ry
aW5nUmVzb3VyY2U8Piwgc3RyaW5nLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNF
KFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyaW5nLCBhcmdzWzBdKTsKIAogICAgIFJlZlB0cjxUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1wbCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpjcmVhdGUoc3RyaW5nKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBh
cmdzLkhvbGRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCAzODY5MWYzYjI5ZmZkYzFiZmFiZWFjZjMwMTBmOTMy
ZGEyODEzNmJlLi4wMzdhMGY1OTYxNWQ0OGY1ZGMzNjhlYjE5NDIyNjQ5ZDdkYTIyNjhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcApAQCAtMjMwLDcgKzIzMCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2soCiAgICAgICAg
IHJldHVybiBhcmdzLkhvbGRlcigpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKICAgICAg
ICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkp
OwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+
LCBoZWxsbywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291
cmNlPD4sIGhlbGxvLCBhcmdzWzBdKTsKICAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0
QXJyYXlUcmFuc2Zlckxpc3Q7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5
VHJhbnNmZXJMaXN0OwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RUeXBlZGVm
cy5jcHAKaW5kZXggOWI2YzE2N2Q3ZWFiZDE2ZGVlYmQ1YmExNzViZGRiOGI3ZTM2MTczZC4uNDQ0
ZGRlZGU0MjllNjBiNTIwOTE0MWM5M2M3MGFmZWE4ZTZkMzk4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMu
Y3BwCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmdW5j
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICB9CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPiAwICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzBdKSAmJiAhVjhsb25nW106
Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSkKICAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKDAsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBWOFRSWUNBVENIKFZl
Y3RvcjxpbnQ+LCB4LCB0b05hdGl2ZUFycmF5PGludD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goVmVjdG9yPGlu
dD4sIHgsIHRvTmF0aXZlQXJyYXk8aW50PihhcmdzWzBdKSk7CiAgICAgaW1wLT5mdW5jKHgpOwog
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMjQzLDE5ICsyNDMsMTkgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRTaGFkb3dDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRo
cm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RU
eXBlZGVmcyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwot
ICAgIFY4VFJZQ0FUQ0goZmxvYXQsIHdpZHRoLCBzdGF0aWNfY2FzdDxmbG9hdD4oTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS0+TnVtYmVyVmFsdWUo
KSkpOwotICAgIFY4VFJZQ0FUQ0goZmxvYXQsIGhlaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCktPk51bWJl
clZhbHVlKCkpKTsKLSAgICBWOFRSWUNBVENIKGZsb2F0LCBibHVyLCBzdGF0aWNfY2FzdDxmbG9h
dD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKS0+
TnVtYmVyVmFsdWUoKSkpOworICAgIFY4VFJZQ0FUQ0goZmxvYXQsIHdpZHRoLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYXJnc1swXS0+TnVtYmVyVmFsdWUoKSkpOworICAgIFY4VFJZQ0FUQ0goZmxvYXQs
IGhlaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3NbMV0tPk51bWJlclZhbHVlKCkpKTsKKyAg
ICBWOFRSWUNBVENIKGZsb2F0LCBibHVyLCBzdGF0aWNfY2FzdDxmbG9hdD4oYXJnc1syXS0+TnVt
YmVyVmFsdWUoKSkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDMpIHsKICAgICAgICAgaW1w
LT5zZXRTaGFkb3cod2lkdGgsIGhlaWdodCwgYmx1cik7CiAgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwogICAgIH0KLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3Ry
aW5nUmVzb3VyY2U8PiwgY29sb3IsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDMsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0Uo
VjhTdHJpbmdSZXNvdXJjZTw+LCBjb2xvciwgYXJnc1szXSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gNCkgewogICAgICAgICBpbXAtPnNldFNoYWRvdyh3aWR0aCwgaGVpZ2h0LCBibHVyLCBj
b2xvcik7CiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIH0KLSAgICBWOFRSWUNB
VENIKGZsb2F0LCBhbHBoYSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDQsIERlZmF1bHRJc1VuZGVmaW5lZCktPk51bWJlclZhbHVlKCkpKTsKKyAgICBW
OFRSWUNBVENIKGZsb2F0LCBhbHBoYSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3NbNF0tPk51bWJl
clZhbHVlKCkpKTsKICAgICBpbXAtPnNldFNoYWRvdyh3aWR0aCwgaGVpZ2h0LCBibHVyLCBjb2xv
ciwgYWxwaGEpOwogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQpAQCAtMjY1LDcgKzI2NSw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICAgICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiA+LCBzZXF1ZW5jZUFyZywgKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLCBWOFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4oTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgYXJncy5HZXRJc29sYXRlKCkpKSk7
CisgICAgVjhUUllDQVRDSChWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiwg
c2VxdWVuY2VBcmcsICh0b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
VjhTZXJpYWxpemVkU2NyaXB0VmFsdWU+KGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSkpOwog
ICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPihpbXAtPm1ldGhv
ZFdpdGhTZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZykpKTsKIH0KIApAQCAtMjc0LDcgKzI3NCw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnVsbGFibGVBcnJheUFyZ0NhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUo
KSk7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5nPiwgYXJyYXlBcmcsIHRv
TmF0aXZlQXJyYXk8U3RyaW5nPihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5nPiwgYXJyYXlB
cmcsIHRvTmF0aXZlQXJyYXk8U3RyaW5nPihhcmdzWzBdKSk7CiAgICAgaW1wLT5udWxsYWJsZUFy
cmF5QXJnKGFycmF5QXJnKTsKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTMxMyw3
ICszMTMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0FycmF5RnVuY3Rp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcgogICAgIFRlc3RUeXBlZGVmcyogaW1w
ID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIHsKLSAgICBWOFRSWUNBVENIKFZlY3RvcjxTdHJpbmc+LCB2YWx1
ZXMsIHRvTmF0aXZlQXJyYXk8U3RyaW5nPihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5nPiwg
dmFsdWVzLCB0b05hdGl2ZUFycmF5PFN0cmluZz4oYXJnc1swXSkpOwogICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3VsdCA9IGltcC0+c3RyaW5nQXJyYXlGdW5jdGlvbih2YWx1ZXMsIGVjKTsKICAgICBp
ZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0zMzAsNyArMzMwLDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBcnJheUZ1bmN0aW9uMkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGEKICAgICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5
cGVkZWZzOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICB7Ci0gICAgVjhUUllDQVRDSChWZWN0b3I8U3RyaW5nPiwgdmFsdWVzLCB0b05hdGl2
ZUFycmF5PFN0cmluZz4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKSkpOworICAgIFY4VFJZQ0FUQ0goVmVjdG9yPFN0cmluZz4sIHZhbHVlcywgdG9O
YXRpdmVBcnJheTxTdHJpbmc+KGFyZ3NbMF0pKTsKICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQg
PSBpbXAtPnN0cmluZ0FycmF5RnVuY3Rpb24yKHZhbHVlcywgZWMpOwogICAgIGlmIChVTkxJS0VM
WShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTM5Miw3ICszOTIsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhUZXN0VHlwZWRlZnM6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYQogICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09V
UkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgaGVsbG8sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5H
UkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBoZWxsbywgYXJnc1swXSk7CiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMSB8fCAhYXJnc1sxXS0+SXNGdW5jdGlvbigpKQogICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoMCwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSwg
Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKaW5kZXggYTY5ZTkwOWU2ZmIyMjAyY2IwOWIwYTJjMTI0NDUyZmE1OWJjNDc3Ny4u
NzI5Mzc3MTU5YzE1ZTU4MDg2NDQzYjY5MWEzZTEyZTQ5Y2IxMjNkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAgLTczLDYgKzczLDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAvLyBBIGhlbHBlciBmb3IgdGhyb3dpbmcgSmF2YVNjcmlwdCBUeXBlRXJyb3Ig
Zm9yIG5vdCBlbm91Z2ggYXJndW1lbnRzLgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0aHJv
d05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHY4OjpJc29sYXRlKik7CiAKKyAgICBpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3VtZW50T3JOdWxsKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MsIGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCA+PSBhcmdzLkxlbmd0
aCgpID8gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKSA6IGFyZ3NbaW5kZXhdOworICAgIH0KKwogICAg
IC8vIEEgZmFzdCBhY2Nlc3NvciBmb3Igdjg6Ok51bGwoaXNvbGF0ZSkuIGlzb2xhdGUgbXVzdCBu
b3QgYmUgMC4KICAgICAvLyBJZiBpc29sYXRlIGNhbiBiZSAwLCB1c2UgdjhOdWxsV2l0aENoZWNr
KCkuCiAgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OE51bGwodjg6Oklzb2xhdGUq
IGlzb2xhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmdNYWNyb3MuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5o
CmluZGV4IDM1MmViZWZjNjEzODEzZWU0N2FmZWI2ZGY2ZjAwOGY2MTAyMWQ2NGEuLjZmZWI1M2Ux
ZDY3YjA0NTJiYjY3MzkwNWNjZDc2ZGI0NzMxYTBjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZ01hY3Jvcy5oCkBAIC0zMywxMSArMzMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7Ci0gICAgRGVmYXVs
dElzVW5kZWZpbmVkLAotICAgIERlZmF1bHRJc051bGxTdHJpbmcKLX07Ci0KICNkZWZpbmUgVjhU
UllDQVRDSCh0eXBlLCB2YXIsIHZhbHVlKSBcCiAgICAgdHlwZSB2YXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC01Nyw5ICs1Miw2IEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAg
aWYgKCF2YXIucHJlcGFyZSgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIHJldHVybjsKIAotI2RlZmluZSBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCBpbmRleCwgcG9saWN5KSBcCi0gICAgKCgocG9saWN5KSA9PSBEZWZhdWx0SXNO
dWxsU3RyaW5nICYmIChpbmRleCkgPj0gKGFyZ3MpLkxlbmd0aCgpKSA/ICh2ODo6TG9jYWw8djg6
OlZhbHVlPigpKSA6ICgoYXJncylbKGluZGV4KV0pKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBWOEJpbmRpbmdNYWNyb3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCBhZmM0OWZmZTVk
MWQ3MjRiN2M3OTgxMzU4NWNjOWFmNTAwODZhMzNhLi5mN2Y4ZjE3Mzg4OTNlZDJhNTkyMGFiYmM5
ZWNlN2YyMjZhYjllOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhIaXN0b3J5OjpwdXNoU3RhdGVDYWxsYmFja0N1c3RvbShjb25zdCB2ODo6
QXJndW1lbnRzJiBhcgogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgVjhU
UllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNlPFdpdGhVbmRlZmlu
ZWRPck51bGxDaGVjaz4sIHRpdGxlLCBhcmdzWzFdKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNU
UklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrPiwg
dXJsLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNOdWxsU3RyaW5n
KSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0cmluZ1Jlc291cmNl
PFdpdGhVbmRlZmluZWRPck51bGxDaGVjaz4sIHVybCwgYXJndW1lbnRPck51bGwoYXJncywgMikp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4
SGlzdG9yeTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CkBAIC04Miw3ICs4Miw3IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnJlcGxhY2VTdGF0ZUNhbGxiYWNrQ3VzdG9tKGNv
bnN0IHY4OjpBcmd1bWVudHMmCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAg
ICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8V2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrPiwgdGl0bGUsIGFyZ3NbMV0pOwotICAgIFY4VFJZQ0FUQ0hfRk9S
X1Y4U1RSSU5HUkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2s+LCB1cmwsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc051bGxT
dHJpbmcpKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVz
b3VyY2U8V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrPiwgdXJsLCBhcmd1bWVudE9yTnVsbChhcmdz
LCAyKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBIaXN0b3J5KiBoaXN0b3J5
ID0gVjhIaXN0b3J5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>