<?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>110765</bug_id>
          
          <creation_ts>2013-02-25 09:55:55 -0800</creation_ts>
          <short_desc>[V8] Generate a wrapper method for constructor callbacks</short_desc>
          <delta_ts>2013-02-25 13:30:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>110667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

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

// For non-custom constructors
void constructorCallback(...) {
  return constructor(...);
}

// For custom constructors
void constructorCallback(...) {
  return constructorCustom(...);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841088</commentid>
    <comment_count>1</comment_count>
      <attachid>190088</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 10:29:28 -0800</bug_when>
    <thetext>Created attachment 190088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841094</commentid>
    <comment_count>2</comment_count>
      <attachid>190088</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 10:33:45 -0800</bug_when>
    <thetext>Comment on attachment 190088
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2014
&gt; +    if (HasCustomConstructor($interface)) {
&gt; +        push(@implContent, &quot;    return V8${interfaceName}::constructorCustom(args);\n&quot;);
&gt; +    } else {
&gt; +        push(@implContent, &quot;    return ${interfaceName}V8Internal::constructor(args);\n&quot;);
&gt; +    }

This is the essential part of this patch. Other diffs are just for making this part work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841168</commentid>
    <comment_count>3</comment_count>
      <attachid>190088</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-25 11:54:41 -0800</bug_when>
    <thetext>Comment on attachment 190088
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841248</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-25 13:30:00 -0800</bug_when>
    <thetext>Committed r143965: &lt;http://trac.webkit.org/changeset/143965&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190088</attachid>
            <date>2013-02-25 10:29:28 -0800</date>
            <delta_ts>2013-02-25 13:30:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110765-20130225102543.patch</filename>
            <type>text/plain</type>
            <size>41429</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRjNWEzMDBlMDUxNTU0
MWVjNjc4OGRjODNmZTAwMjE4MmVlOGVjMS4uZTVlZmFlNjRiZDgwNjNhOTQzMzc1ZTZhY2U1ODE1
YmZmYmEwN2QyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEzLTAyLTI1ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIEdlbmVyYXRl
IGEgd3JhcHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdG9yIGNhbGxiYWNrcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNzY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmUgb2Ygc3RlcHMg
dG8gaW5zZXJ0IFRSQUNFX0VWRU5UX1NUQVRFKCkgbWFjcm9zCisgICAgICAgIGludG8gRE9NIGJp
bmRpbmdzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYW4gaW5kaXJlY3Rpb24KKyAgICAgICAgZnVu
Y3Rpb24gZm9yIGNvbnN0cnVjdG9yKCksIGxpa2UgdGhpczoKKworICAgICAgICAvLyBGb3Igbm9u
LWN1c3RvbSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgdm9pZCBjb25zdHJ1Y3RvckNhbGxiYWNrKC4u
LikgeworICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvciguLi4pOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRm9yIGN1c3RvbSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgdm9pZCBjb25zdHJ1Y3Rv
ckNhbGxiYWNrKC4uLikgeworICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvckN1c3RvbSguLi4p
OworICAgICAgICB9CisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVPdmVybG9hZGVkQ29uc3RydWN0
b3JDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0ZVNpbmdsZUNvbnN0cnVjdG9yQ2FsbGJhY2sp
OgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVy
YXRlQ29uc3RydWN0b3IpOgorICAgICAgICAoR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKEdlbmVyYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEdlbmVyYXRl
TmFtZWRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVhZGVyKToK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dDY0QXJyYXlWOEludGVybmFsOjpjb25zdHJ1Y3Rvcik6CisgICAgICAgIChGbG9hdDY0QXJyYXlW
OEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5Ojpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rv
clY4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0b3JDYWxsYmFjayk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6Y29uc3RydWN0b3IpOgor
ICAgICAgICAoVGVzdEludGVyZmFjZVY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0SW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE5vZGVWOEludGVybmFsOjpjb25zdHJ1Y3Rvcik6CisgICAgICAgIChUZXN0Tm9k
ZVY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Tm9kZTo6Y29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29uc3RydWN0b3IpOgor
ICAgICAgICAoVGVzdE9ialY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2Jq
Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Y4SW50ZXJuYWw6OmNvbnN0cnVjdG9yMSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Y4SW50ZXJuYWw6OmNvbnN0
cnVjdG9yMik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Y4
SW50ZXJuYWw6OmNvbnN0cnVjdG9yMyk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Y4SW50ZXJuYWw6OmNvbnN0cnVjdG9yNCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Y4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5h
bDo6Y29uc3RydWN0b3IpOgorICAgICAgICAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVY4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6Y29uc3RydWN0b3IpOgorICAgICAgICAoVGVzdFR5cGVk
ZWZzVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RUeXBlZGVmczo6Y29uc3Ry
dWN0b3JDYWxsYmFjayk6CisKIDIwMTMtMDItMjUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW3NvdXBdICJUb28gbWFueSByZWRpcmVjdHMiIGVy
cm9yIGxvYWRpbmcgY2hhdCBpbiBwbHVzLmdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggM2I1Y2JmMGVhMzFm
Mjk1MDRjNmFjNDYxMzQ4NGI1ZmZkNTY4MmMzOS4uMjQ3N2NlMzQ1NWQ5MTQ2YjIxOWMxZTU1NWU2
ZTM5Mjc4MjBhYjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTQxOSw5ICs0MTksNyBAQCBFTkQKIEVORAogICAgIH0K
ICAgICBpZiAoSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29uc3RydWN0b3JDdXN0b20oY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwotRU5ECisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b25zdHJ1Y3RvckN1c3RvbShjb25zdCB2ODo6QXJndW1lbnRzJik7XG4iKTsKICAgICB9CiAKICAg
ICBteSBAZW5hYmxlZFBlckNvbnRleHRBdHRyaWJ1dGVzOwpAQCAtMTg4NCwyOCArMTg4MiwyNiBA
QCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkQ29uc3RydWN0b3JDYWxsYmFjawogICAgIG15ICRpbnRl
cmZhY2UgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7
CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4JHtpbnRlcmZhY2VOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQorICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3IoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKIEVORAotICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVh
ZGVyKCkpOwotCiAgICAgbXkgJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zID0gMjU1OwogICAgIGZv
cmVhY2ggbXkgJGNvbnN0cnVjdG9yIChAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc30pIHsKLSAg
ICAgICAgbXkgJG5hbWUgPSAiY29uc3RydWN0b3IiIC4gJGNvbnN0cnVjdG9yLT57b3ZlcmxvYWRl
ZEluZGV4fSAuICJDYWxsYmFjayI7CisgICAgICAgIG15ICRuYW1lID0gImNvbnN0cnVjdG9yIiAu
ICRjb25zdHJ1Y3Rvci0+e292ZXJsb2FkZWRJbmRleH07CiAgICAgICAgIG15ICgkbnVtTWFuZGF0
b3J5UGFyYW1zLCAkcGFyYW1ldGVyc0NoZWNrKSA9IEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJz
Q2hlY2soJGNvbnN0cnVjdG9yKTsKICAgICAgICAgJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zID0g
JG51bU1hbmRhdG9yeVBhcmFtcyBpZiAoJG51bU1hbmRhdG9yeVBhcmFtcyA8ICRsZWFzdE51bU1h
bmRhdG9yeVBhcmFtcyk7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgkcGFy
YW1ldGVyc0NoZWNrKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gJG5hbWUoYXJncyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBpZiAoJHBhcmFtZXRlcnNDaGVjaylcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgICAgICByZXR1cm4gJGludGVyZmFjZU5hbWVWOEludGVybmFsOjokbmFtZShh
cmdzKTtcbiIpOwogICAgIH0KICAgICBpZiAoJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zID49IDEp
IHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAk
bGVhc3ROdW1NYW5kYXRvcnlQYXJhbXMpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNv
bGF0ZSgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgIH0KLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoMCwgYXJncy5HZXRJc29sYXRlKCkpOwogRU5ECi0gICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJ9XG5cbiIpOwogfQogCiBzdWIgR2VuZXJhdGVTaW5nbGVDb25zdHJ1Y3RvckNhbGxiYWNrCkBA
IC0xOTMxLDM1ICsxOTI3LDMxIEBAIHN1YiBHZW5lcmF0ZVNpbmdsZUNvbnN0cnVjdG9yQ2FsbGJh
Y2sKICAgICAgICAgfQogICAgIH0KIAotICAgIG15ICRtYXliZU9ic2VydmVGZWF0dXJlID0gR2Vu
ZXJhdGVGZWF0dXJlT2JzZXJ2YXRpb24oJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJWOE1lYXN1cmVBcyJ9KTsKLQogICAgIG15IEBiZWZvcmVBcmd1bWVudExpc3Q7
CiAgICAgbXkgQGFmdGVyQXJndW1lbnRMaXN0OwotICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ludGVyZmFjZU5hbWV9Ojpjb25zdHJ1Y3Rv
ciR7b3ZlcmxvYWRlZEluZGV4U3RyaW5nfUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvciR7b3ZlcmxvYWRlZEluZGV4U3RyaW5nfShjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgICR7bWF5YmVPYnNlcnZlRmVhdHVyZX0KIEVORAog
CiAgICAgaWYgKCRmdW5jdGlvbi0+e292ZXJsb2FkZWRJbmRleH0gPT0gMCkgewotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVDb25zdHJ1Y3RvckhlYWRlcigpKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjaygkZnVuY3Rpb24s
ICRpbnRlcmZhY2UpKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKCRmdW5jdGlvbiwgJGludGVyZmFjZSkpOwogICAgIH0KIAogICAg
IGlmICgkcmFpc2VzRXhjZXB0aW9ucykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXhj
ZXB0aW9uQ29kZS5oIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKICAgICB9CiAKICAg
ICAjIEZJWE1FOiBDdXJyZW50bHkgW0NvbnN0cnVjdG9yKC4uLildIGRvZXMgbm90IHlldCBzdXBw
b3J0IFtPcHRpb25hbF0gYXJndW1lbnRzLgogICAgICMgSXQganVzdCBzdXBwb3J0cyBbT3B0aW9u
YWw9RGVmYXVsdElzVW5kZWZpbmVkXSBvciBbT3B0aW9uYWw9RGVmYXVsdElzTnVsbFN0cmluZ10u
CiAgICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgsICVyZXBsYWNlbWVu
dHMpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW50ZXJmYWNlTmFtZSk7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CisgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgJHBhcmFtZXRlckNoZWNrU3RyaW5nKTsKIAogICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSAmJiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSBlcSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCIpIHsKICAgICAgICAgcHVzaChAYmVmb3JlQXJndW1lbnRMaXN0LCAiY29udGV4dCIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogRU5ECkBAIC0xOTgyLDUxICsxOTc0LDQ4
IEBAIEVORAogICAgIH0KIAogICAgIG15ICRhcmd1bWVudFN0cmluZyA9IGpvaW4oIiwgIiwgQGJl
Zm9yZUFyZ3VtZW50TGlzdCwgQGFyZ3VtZW50TGlzdCwgQGFmdGVyQXJndW1lbnRMaXN0KTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
UmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+IGltcGwgPSAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUo
JHthcmd1bWVudFN0cmluZ30pO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTtcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICJcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgUmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+IGltcGwgPSAke2ludGVyZmFjZU5hbWV9Ojpj
cmVhdGUoJHthcmd1bWVudFN0cmluZ30pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpO1xu
Iik7CiAKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVj
dG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKGVjKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBnb3RvIGZh
aWw7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoZWMpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgZ290byBmYWlsO1xu
Iik7CiAgICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAKLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9i
amVjdFdpdGhXcmFwcGVyKGltcGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJ
c29sYXRlKCksIFdyYXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOworICAgIFY4RE9NV3Jh
cHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZWOCR7aW50
ZXJmYWNlTmFtZX06OmluZm8sIHdyYXBwZXIsIGFyZ3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVyQ29u
ZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKICAgICByZXR1cm4gd3JhcHBlcjsKIEVORAogCiAgICAg
aWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICBm
YWlsOlxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzZXRET01F
eGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIGZhaWw6XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7
XG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlxuIik7CiB9CiAKLXN1YiBHZW5lcmF0ZUN1
c3RvbUNvbnN0cnVjdG9yQ2FsbGJhY2sKK3N1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2sK
IHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9
ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJG1heWJlT2JzZXJ2ZUZlYXR1cmUgPSBHZW5lcmF0
ZUZlYXR1cmVPYnNlcnZhdGlvbigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhN
ZWFzdXJlQXMifSk7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOCR7aW50ZXJmYWNlTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICAke21heWJlT2JzZXJ2ZUZlYXR1cmV9Ci1FTkQK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgInY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOCR7aW50ZXJm
YWNlTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncylc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsIEdlbmVyYXRlRmVhdHVyZU9ic2VydmF0aW9uKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJWOE1lYXN1cmVBcyJ9KSk7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRl
Q29uc3RydWN0b3JIZWFkZXIoKSk7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLQot
ICAgIHJldHVybiBWOCR7aW50ZXJmYWNlTmFtZX06OmNvbnN0cnVjdG9yQ3VzdG9tKGFyZ3MpOwot
fQotCi1FTkQKKyAgICBpZiAoSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIFY4JHtpbnRlcmZhY2VOYW1lfTo6
Y29uc3RydWN0b3JDdXN0b20oYXJncyk7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWw6OmNv
bnN0cnVjdG9yKGFyZ3MpO1xuIik7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKIH0KIAotc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjaworc3ViIEdlbmVyYXRl
Q29uc3RydWN0b3IKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVy
ZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwpAQCAtMjA0MSwxOSArMjAzMCwxNyBAQCBzdWIg
R2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxiYWNrCiAgICAgfQogfQogCi1zdWIgR2VuZXJhdGVFdmVu
dENvbnN0cnVjdG9yQ2FsbGJhY2sKK3N1YiBHZW5lcmF0ZUV2ZW50Q29uc3RydWN0b3IKIHsKICAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJm
YWNlLT5uYW1lOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRpY3Rpb25hcnkuaCIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2lu
dGVyZmFjZU5hbWV9Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb25zdHJ1Y3Rvcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
RU5ECi0gICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlQ29uc3RydWN0b3JIZWFkZXIoKSk7
Ci0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsIDw8RU5EKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVy
biB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIApAQCAt
MjA2OCwxMCArMjA1NSwxMiBAQCBFTkQKICAgICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1lfT4gZXZl
bnQgPSAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUodHlwZSwgZXZlbnRJbml0KTsKIAogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgVjhET01X
cmFwcGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihldmVudC5yZWxlYXNlKCksICZpbmZv
LCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVu
ZGVudCk7CisgICAgVjhET01XcmFwcGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihldmVu
dC5yZWxlYXNlKCksICZWOCR7aW50ZXJmYWNlTmFtZX06OmluZm8sIHdyYXBwZXIsIGFyZ3MuR2V0
SXNvbGF0ZSgpLCBXcmFwcGVyQ29uZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKICAgICByZXR1cm4g
d3JhcHBlcjsKIH0KK0VORAogCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIGJvb2wg
ZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0JiBldmVudEluaXQs
IGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMpCiB7CiBFTkQKQEAgLTIwOTksNyArMjA4OCw3IEBA
IEVORAogRU5ECiB9CiAKLXN1YiBHZW5lcmF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvckNhbGxiYWNr
CitzdWIgR2VuZXJhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IKIHsKICAgICBteSAkaW50ZXJmYWNl
ID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwpAQCAt
MjEwNywxNiArMjA5NiwxNiBAQCBzdWIgR2VuZXJhdGVUeXBlZEFycmF5Q29uc3RydWN0b3JDYWxs
YmFjawogICAgIG15ICR0eXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5
cGVkQXJyYXkifTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjhBcnJheUJ1ZmZlclZpZXdDdXN0
b20uaCIpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOCR7aW50ZXJmYWNlTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Citz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8JGludGVyZmFjZU5h
bWUsIFY4JHtpbnRlcmZhY2VOYW1lfSwgJHR5cGU+KGFyZ3MsICZpbmZvLCAkdmlld1R5cGUpOwor
ICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PCRpbnRlcmZhY2VOYW1lLCBWOCR7aW50ZXJm
YWNlTmFtZX0sICR0eXBlPihhcmdzLCAmVjgke2ludGVyZmFjZU5hbWV9OjppbmZvLCAkdmlld1R5
cGUpOwogfQogCiBFTkQKIH0KIAotc3ViIEdlbmVyYXRlTmFtZWRDb25zdHJ1Y3RvckNhbGxiYWNr
CitzdWIgR2VuZXJhdGVOYW1lZENvbnN0cnVjdG9yCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hp
ZnQ7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtMjIxNCw3ICsyMjAzLDcgQEAgRU5E
CiBFTkQKIAogICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgZmFpbDpcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBm
YWlsOlxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzZXRET01F
eGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgIH0KIApAQCAtMjI1MSw2
ICsyMjQwLDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWFkZXIKIAogICAgIGlmIChDb25z
dHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09i
amVjdCkKICAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisKIEVORAogICAgIHJldHVybiAk
Y29udGVudDsKIH0KQEAgLTI5MTcsMjAgKzI5MDcsMjMgQEAgRU5ECiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb21waWxlVGltZUNoZWNrRm9yRW51
bXNJZk5lZWRlZCgkaW50ZXJmYWNlKSk7CiAgICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIn0gLy8gbmFtZXNwYWNlICR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsXG5cbiIpOwot
Ci0gICAgaWYgKEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIEdl
bmVyYXRlQ3VzdG9tQ29uc3RydWN0b3JDYWxsYmFjaygkaW50ZXJmYWNlKTsKLSAgICB9IGVsc2lm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7
Ci0gICAgICAgIEdlbmVyYXRlTmFtZWRDb25zdHJ1Y3RvckNhbGxiYWNrKEB7JGludGVyZmFjZS0+
Y29uc3RydWN0b3JzfVswXSwgJGludGVyZmFjZSk7Ci0gICAgfSBlbHNpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0pIHsKKyAgICBpZiAoIUhhc0N1c3Rv
bUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICBHZW5l
cmF0ZU5hbWVkQ29uc3RydWN0b3IoQHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9WzBdLCAkaW50
ZXJmYWNlKTsKKyAgICAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IoJGlu
dGVyZmFjZSk7CisgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9y
VGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAgICAgIEdlbmVyYXRlRXZl
bnRDb25zdHJ1Y3RvcigkaW50ZXJmYWNlKTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0
b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7Cisg
ICAgICAgICAgICBHZW5lcmF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcigkaW50ZXJmYWNlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpKSB7CiAg
ICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjaygkaW50ZXJmYWNlKTsKLSAgICB9IGVs
c2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJF
dmVudCIpKSB7Ci0gICAgICAgIEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3RvckNhbGxiYWNrKCRpbnRl
cmZhY2UpOwotICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxh
dGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgewotICAgICAgICBHZW5lcmF0ZVR5cGVkQXJy
YXlDb25zdHJ1Y3RvckNhbGxiYWNrKCRpbnRlcmZhY2UpOwogICAgIH0KIAorICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJ9IC8vIG5hbWVzcGFjZSAke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5h
bFxuXG4iKTsKKwogICAgIG15ICRhY2Nlc3NfY2hlY2sgPSAiIjsKICAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHkifSAmJiAhKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciKSkgewogICAgICAgICAkYWNjZXNzX2NoZWNrID0gImluc3RhbmNl
LT5TZXRBY2Nlc3NDaGVja0NhbGxiYWNrcygke3Y4SW50ZXJmYWNlTmFtZX06Om5hbWVkU2VjdXJp
dHlDaGVjaywgJHt2OEludGVyZmFjZU5hbWV9OjppbmRleGVkU2VjdXJpdHlDaGVjaywgdjg6OkV4
dGVybmFsOjpOZXcoJiR7djhJbnRlcmZhY2VOYW1lfTo6aW5mbykpOyI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5
LmNwcAppbmRleCBhYTYxZjAyNjJiMWEzN2Y3NTUzOGVkYmFkYmU3MGJkMjc1YjdmMzAzLi5iNjEy
MjJiZjc5NzMwMDljZWRiMzU2OWUzZmYzMTQ0YmEyMGIzNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5j
cHAKQEAgLTk0LDYgKzk0LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2V0TWV0
aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlI
ZWxwZXI8RmxvYXQ2NEFycmF5LCBWOEZsb2F0NjRBcnJheT4oYXJncyk7CiB9CiAKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3IoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxGbG9hdDY0QXJyYXksIFY4Rmxv
YXQ2NEFycmF5LCBkb3VibGU+KGFyZ3MsICZWOEZsb2F0NjRBcnJheTo6aW5mbywgdjg6OmtFeHRl
cm5hbERvdWJsZUFycmF5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgRmxvYXQ2NEFycmF5VjhJbnRl
cm5hbAogCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoRmxvYXQ2NEFycmF5KiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCkBAIC0xMTEsNyArMTE2LDEzIEBAIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246
OkJhdGNoZWRDYWxsYmFjayBWOEZsb2F0NjRBcnJheUNhbGxiYWNrc1tdID0gewogCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhGbG9hdDY0QXJyYXk6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxG
bG9hdDY0QXJyYXksIFY4RmxvYXQ2NEFycmF5LCBkb3VibGU+KGFyZ3MsICZpbmZvLCB2ODo6a0V4
dGVybmFsRG91YmxlQXJyYXkpOworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5v
dCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElzb2xhdGUoKSk7CisKKyAgICBp
ZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhp
c3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisgICAgcmV0dXJu
IEZsb2F0NjRBcnJheVY4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKGFyZ3MpOwogfQogCiBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4RmxvYXQ2NEFy
cmF5VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmlu
ZGV4IGJmZTYxMmVjYTlkMThhYWYwNWVkOTFjNzExNjllNjA4M2EzZjcwN2YuLmI4YWUwZjYyYjhj
MDg4NTk1YjRkZmIyODliODI4OTVjMjI4NWE0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAKQEAgLTkyLDIyICs5Miw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gYXR0cjJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsCiAg
ICAgcmV0dXJuIFRlc3RFdmVudENvbnN0cnVjdG9yVjhJbnRlcm5hbDo6YXR0cjJBdHRyR2V0dGVy
KG5hbWUsIGluZm8pOwogfQogCi19IC8vIG5hbWVzcGFjZSBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4
SW50ZXJuYWwKLQotc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJp
YnV0ZSBWOFRlc3RFdmVudENvbnN0cnVjdG9yQXR0cnNbXSA9IHsKLSAgICAvLyBBdHRyaWJ1dGUg
J2F0dHIxJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJh
dHRyMSIsIFRlc3RFdmVudENvbnN0cnVjdG9yVjhJbnRlcm5hbDo6YXR0cjFBdHRyR2V0dGVyQ2Fs
bGJhY2ssIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnYXR0cjInIChUeXBl
OiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3Ry
dWN0b3InKQotICAgIHsiYXR0cjIiLCBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4SW50ZXJuYWw6OmF0
dHIyQXR0ckdldHRlckNhbGxiYWNrLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4
OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLX07Ci0KLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgaWYgKCFhcmdz
LklzQ29uc3RydWN0Q2FsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBv
YmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKLQotICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBD
b25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKLSAgICAgICAgcmV0dXJuIGFyZ3Mu
SG9sZGVyKCk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAKQEAgLTEyMiw5
ICsxMDgsMTcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBSZWZQdHI8VGVzdEV2ZW50
Q29uc3RydWN0b3I+IGV2ZW50ID0gVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZSh0eXBlLCBl
dmVudEluaXQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5I
b2xkZXIoKTsKLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGV2
ZW50LnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIsIGFyZ3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVy
Q29uZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9i
amVjdFdpdGhXcmFwcGVyKGV2ZW50LnJlbGVhc2UoKSwgJlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
OmluZm8sIHdyYXBwZXIsIGFyZ3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVyQ29uZmlndXJhdGlvbjo6
RGVwZW5kZW50KTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KK30gLy8gbmFtZXNwYWNlIFRlc3RF
dmVudENvbnN0cnVjdG9yVjhJbnRlcm5hbAorCitzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0
aW9uOjpCYXRjaGVkQXR0cmlidXRlIFY4VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyc1tdID0gewor
ICAgIC8vIEF0dHJpYnV0ZSAnYXR0cjEnIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKKyAgICB7ImF0dHIxIiwgVGVzdEV2ZW50Q29uc3RydWN0b3JWOEludGVybmFsOjph
dHRyMUF0dHJHZXR0ZXJDYWxsYmFjaywgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmli
dXRlICdhdHRyMicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICdJbml0aWFs
aXplZEJ5RXZlbnRDb25zdHJ1Y3RvcicpCisgICAgeyJhdHRyMiIsIFRlc3RFdmVudENvbnN0cnVj
dG9yVjhJbnRlcm5hbDo6YXR0cjJBdHRyR2V0dGVyQ2FsbGJhY2ssIDAsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAorfTsKIAogYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0
cnVjdG9ySW5pdCYgZXZlbnRJbml0LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zKQogewpAQCAt
MTMyLDYgKzEyNiwxNyBAQCBib29sIGZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2
ZW50Q29uc3RydWN0b3JJbml0JiBldmVudEluaXQsIGNvbnN0IERpYwogICAgIHJldHVybiB0cnVl
OwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICgh
YXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJE
T00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBh
cmdzLkdldElzb2xhdGUoKSk7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkg
PT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOworCisgICAgcmV0dXJuIFRlc3RFdmVudENvbnN0cnVjdG9yVjhJbnRlcm5h
bDo6Y29uc3RydWN0b3IoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0RXZlbnRDb25zdHJ1Y3RvclRlbXBsYXRlKHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmNwcAppbmRleCA2ZWM4NmU5YmJiM2RjNGJjMGNhOGQyMzdkZmZkYmIyYTAwNWFhNTg3Li5mMWZl
NGFkNTExNTI5NGMyYTRmNjQwMDlhNThjMTU2ZTZiZGMxNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmNwcApAQCAtMjc2LDYgKzI3NiwyOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1
cHBsZW1lbnRhbE1ldGhvZDRNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogCiAjZW5k
aWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3IoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJv
d05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0UoVjhT
dHJpbmdSZXNvdXJjZTw+LCBzdHIxLCBhcmdzWzBdKTsKKyAgICBWOFRSWUNBVENIX0ZPUl9WOFNU
UklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyMiwgYXJnc1sxXSk7CisKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworCisgICAgUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwgPSBUZXN0SW50ZXJmYWNlOjpj
cmVhdGUoY29udGV4dCwgc3RyMSwgc3RyMiwgZWMpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgaWYgKGVjKQorICAgICAgICBnb3RvIGZh
aWw7CisKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwu
cmVsZWFzZSgpLCAmVjhUZXN0SW50ZXJmYWNlOjppbmZvLCB3cmFwcGVyLCBhcmdzLkdldElzb2xh
dGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7CisgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgZmFpbDoKKyAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElz
b2xhdGUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RJbnRlcmZhY2VWOEludGVybmFsCiAK
IHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0
SW50ZXJmYWNlQXR0cnNbXSA9IHsKQEAgLTMzMywzMCArMzU1LDEzIEBAIENPTVBJTEVfQVNTRVJU
KDIgPT0gVGVzdFN1cHBsZW1lbnRhbDo6Q09OU1RfSU1QTCwgVGVzdEludGVyZmFjZUVudW1DT05T
VF9JTVBMSXNXCiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RJbnRlcmZhY2U6OmNvbnN0
cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAKICAgICBp
ZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24u
IiwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVu
dCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQogICAgICAgICByZXR1
cm4gYXJncy5Ib2xkZXIoKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCi0gICAgICAgIHJl
dHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLQot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVT
T1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHIxLCBhcmdzWzBdKTsKLSAgICBWOFRSWUNBVENI
X0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8Piwgc3RyMiwgYXJnc1sxXSk7
CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotCi0gICAgUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwgPSBUZXN0SW50
ZXJmYWNlOjpjcmVhdGUoY29udGV4dCwgc3RyMSwgc3RyMiwgZWMpOwotICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgaWYgKGVjKQotICAgICAg
ICBnb3RvIGZhaWw7Ci0KLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFw
cGVyKGltcGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCksIFdy
YXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOwotICAgIHJldHVybiB3cmFwcGVyOwotICBm
YWlsOgotICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
KyAgICByZXR1cm4gVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKGFyZ3MpOwog
fQogCiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3Vy
ZVY4VGVzdEludGVyZmFjZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcAppbmRleCAwMjg0ODUyOWEyYTgxMzgwODM1OTkxYjBkYjcyYWQ4ZDlkY2JhOTM0
Li42MTdlYTVlYTAxNTc4ZmMzZGZiNmRjZWEwNzVhN2Q0NzljNzg1YTEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC04Miw2ICs4Miw3IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yQ2FsbGJhY2so
Y29uc3Qgdjg6CiAKICAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3Ry
dWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRl
cigpOworCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY3VycmVudERvY3VtZW50KEJpbmRpbmdT
dGF0ZTo6aW5zdGFuY2UoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFk
ZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlIFRlc3ROYW1lZENvbnN0cnVj
dG9yIGluc3RhbmNlCkBAIC0xMDMsNyArMTA0LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODoK
IAogICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxl
YXNlKCksICZWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluZm8sIHdyYXBwZXIs
IGFyZ3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVyQ29uZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgZmFpbDoKKyAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01F
eGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCmluZGV4IDRl
ZTI4ODljODg1OGIxMTI2NWNkYWI0OWFjZGY4YzEzOGRiY2Y4YjYuLjJhYjYxNGQ3ODMwYWViN2Y3
MjM3OTEyYTQyYzdlYzI0ZGI2Zjk3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKQEAgLTcwLDIyICs3MCwyNyBA
QCBuYW1lc3BhY2UgVGVzdE5vZGVWOEludGVybmFsIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHZvaWQgVjhfVVNFKFQpIHsgfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0
cnVjdG9yKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisKKyAgICBSZWZQdHI8VGVzdE5v
ZGU+IGltcGwgPSBUZXN0Tm9kZTo6Y3JlYXRlKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRl
T2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZWOFRlc3ROb2RlOjppbmZvLCB3cmFw
cGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7
CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3ROb2RlVjhJbnRl
cm5hbAogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0Tm9kZTo6Y29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIAogICAgIGlmICghYXJncy5J
c0NvbnN0cnVjdENhbGwoKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2Jq
ZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiAKICAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29u
c3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdzLkhv
bGRlcigpOwogCi0gICAgUmVmUHRyPFRlc3ROb2RlPiBpbXBsID0gVGVzdE5vZGU6OmNyZWF0ZSgp
OwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Ci0K
LSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwucmVsZWFz
ZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCksIFdyYXBwZXJDb25maWd1cmF0
aW9uOjpEZXBlbmRlbnQpOwotICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBUZXN0Tm9k
ZVY4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKGFyZ3MpOwogfQogCiBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE5vZGVUZW1wbGF0ZSh2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCmluZGV4IDY2ZGNkY2EwNzgzZGI2NTM3NTMyYWRmYmQyMGIzMGZhOWE2MDJm
ZTguLmQ0ZGVmZjkzZjU5ZDZmOTcwMmZkMGE1ZGY2NjYxM2MxNzJhNWM3ODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
CkBAIC0yMTkwLDYgKzIxOTAsMjEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YXJp
YWRpY05vZGVNZXRob2RNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25z
dHJ1Y3Rvcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJn
cy5HZXRJc29sYXRlKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDAgfHwgIWFyZ3NbMF0t
PklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKDAsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJhY2sgPSBWOFRl
c3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7
CisKKyAgICBSZWZQdHI8VGVzdE9iaj4gaW1wbCA9IFRlc3RPYmo6OmNyZWF0ZSh0ZXN0Q2FsbGJh
Y2spOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwucmVs
ZWFzZSgpLCAmVjhUZXN0T2JqOjppbmZvLCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3Jh
cHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFRlc3RPYmpWOEludGVybmFsCiAKIHN0YXRpYyBjb25zdCBWOERPTUNv
bmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0T2JqQXR0cnNbXSA9IHsKQEAgLTI0
MTIsMjMgKzI0MjcsMTMgQEAgQ09NUElMRV9BU1NFUlQoMTUgPT0gVGVzdE9iajo6Q09OU1RfSU1Q
TCwgVGVzdE9iakVudW1DT05TVF9JTVBMSXNXcm9uZ1VzZURvTm90Q2gKIAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4VGVzdE9iajo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogewotICAgIAogICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKICAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5v
dCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBp
ZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhp
c3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwotICAgIGlmIChhcmdz
Lkxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoYXJncy5HZXRJc29sYXRlKCkpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDAgfHwgIWFy
Z3NbMF0tPklzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKDAsIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJhY2sg
PSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7CiAKLSAgICBSZWZQdHI8VGVzdE9iaj4gaW1wbCA9IFRlc3RPYmo6OmNyZWF0ZSh0ZXN0
Q2FsbGJhY2spOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9s
ZGVyKCk7Ci0KLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGlt
cGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCksIFdyYXBwZXJD
b25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOwotICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVy
biBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uc3RydWN0b3IoYXJncyk7CiB9CiAKIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0T2JqVGVtcGxh
dGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
CmluZGV4IDcyNjgzZDliODJlYWFjMTBkZmJkYmQyY2ZhNWJkYmVmNjlkODViNGEuLjRlOGIwYTQy
MTI0ZjhjNzViYTFiYjRmMGFhM2MzOTE2N2Y1ZTdhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTc1LDc2ICs3NSw3OCBAQCBuYW1lc3BhY2Ug
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNWOEludGVybmFsIHsKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQogCi19IC8vIG5hbWVzcGFjZSBUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Y4SW50ZXJuYWwKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yMShj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIAogICAgIFY4VFJZQ0FUQ0goQXJyYXlC
dWZmZXIqLCBhcnJheUJ1ZmZlciwgVjhBcnJheUJ1ZmZlcjo6SGFzSW5zdGFuY2UoYXJnc1swXSwg
YXJncy5HZXRJc29sYXRlKCkpID8gVjhBcnJheUJ1ZmZlcjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKIAogICAgIFJlZlB0cjxUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycz4gaW1wbCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVh
dGUoYXJyYXlCdWZmZXIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFy
Z3MuSG9sZGVyKCk7CiAKLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFw
cGVyKGltcGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCksIFdy
YXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2Np
YXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZWOFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjppbmZvLCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZp
Z3VyYXRpb246OkRlcGVuZGVudCk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3RvcjJD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25zdHJ1Y3RvcjIoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAK
ICAgICBWOFRSWUNBVENIKEFycmF5QnVmZmVyVmlldyosIGFycmF5QnVmZmVyVmlldywgVjhBcnJh
eUJ1ZmZlclZpZXc6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSA/IFY4
QXJyYXlCdWZmZXJWaWV3Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMF0pKSA6IDApOwogCiAgICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBp
bXBsID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlclZpZXcp
OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CiAK
LSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwucmVsZWFz
ZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCksIFdyYXBwZXJDb25maWd1cmF0
aW9uOjpEZXBlbmRlbnQpOworICAgIFY4RE9NV3JhcHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdy
YXBwZXIoaW1wbC5yZWxlYXNlKCksICZWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjppbmZv
LCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVu
ZGVudCk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25zdHJ1Y3RvcjNDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1
Y3RvcjMoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAKICAgICBWOFRSWUNBVENI
KEJsb2IqLCBibG9iLCBWOEJsb2I6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0
ZSgpKSA/IFY4QmxvYjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzBdKSkgOiAwKTsKIAogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1w
bCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYmxvYik7CiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKIAotICAgIFY4RE9NV3Jh
cHBlcjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZpbmZvLCB3
cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVu
dCk7CisgICAgVjhET01XcmFwcGVyOjphc3NvY2lhdGVPYmplY3RXaXRoV3JhcHBlcihpbXBsLnJl
bGVhc2UoKSwgJlY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmluZm8sIHdyYXBwZXIsIGFy
Z3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVyQ29uZmlndXJhdGlvbjo6RGVwZW5kZW50KTsKICAgICBy
ZXR1cm4gd3JhcHBlcjsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yNENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yNChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIAogICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5H
UkVTT1VSQ0UoVjhTdHJpbmdSZXNvdXJjZTw+LCBzdHJpbmcsIGFyZ3NbMF0pOwogCiAgICAgUmVm
UHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBpbXBsID0gVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM6OmNyZWF0ZShzdHJpbmcpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGFyZ3MuSG9sZGVyKCk7CiAKLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVj
dFdpdGhXcmFwcGVyKGltcGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29s
YXRlKCksIFdyYXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOworICAgIFY4RE9NV3JhcHBl
cjo6YXNzb2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZWOFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjppbmZvLCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3Jh
cHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAK
LXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7
Ci0gICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1
bmN0aW9uLiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLQotICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6
OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKLSAgICAg
ICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiAgICAgaWYgKChhcmdzLkxlbmd0aCgpID09IDEgJiYg
KFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSkp
KQotICAgICAgICByZXR1cm4gY29uc3RydWN0b3IxQ2FsbGJhY2soYXJncyk7CisgICAgICAgIHJl
dHVybiBjb25zdHJ1Y3RvcjEoYXJncyk7CiAgICAgaWYgKChhcmdzLkxlbmd0aCgpID09IDEgJiYg
KFY4QXJyYXlCdWZmZXJWaWV3OjpIYXNJbnN0YW5jZShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUo
KSkpKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yMkNhbGxiYWNrKGFyZ3MpOworICAgICAg
ICByZXR1cm4gY29uc3RydWN0b3IyKGFyZ3MpOwogICAgIGlmICgoYXJncy5MZW5ndGgoKSA9PSAx
ICYmIChWOEJsb2I6Okhhc0luc3RhbmNlKGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSkpKQot
ICAgICAgICByZXR1cm4gY29uc3RydWN0b3IzQ2FsbGJhY2soYXJncyk7CisgICAgICAgIHJldHVy
biBjb25zdHJ1Y3RvcjMoYXJncyk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkKLSAgICAg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yNENhbGxiYWNrKGFyZ3MpOworICAgICAgICByZXR1cm4gY29u
c3RydWN0b3I0KGFyZ3MpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0
dXJuIHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcigwLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKK30gLy8g
bmFtZXNwYWNlIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzVjhJbnRlcm5hbAorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICghYXJncy5Jc0Nv
bnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJET00gb2JqZWN0
IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBhcmdzLkdldElz
b2xhdGUoKSk7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3Ry
dWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRl
cigpOworCisgICAgcmV0dXJuIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzVjhJbnRlcm5hbDo6
Y29uc3RydWN0b3IoYXJncyk7Cit9CisKIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1RlbXBsYXRl
KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKIHsKICAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCA4
YzA2OTI0MTk4ZmIzYTAxNmFmNWNiMmVlMDVlZDE4YjUxOTRjMjY4Li5kODVkZmUxYTFmZjg4NDMz
OWQyNDkwM2MzYjU3MWNjNzY2OWY4YTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjM0LDYgKzIzNCwyOSBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11bHRpVHJhbnNmZXJMaXN0TWV0aG9kKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3IoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiB0
aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBWOFRS
WUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgaGVsbG8sIGFy
Z3NbMF0pOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlz
dDsKKyAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Q7Cisg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CisgICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVy
YWJsZXMoYXJnc1syXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJB
cnJheVRyYW5zZmVyTGlzdCwgYXJncy5HZXRJc29sYXRlKCkpKQorICAgICAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShhcmdzWzFdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5
QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdywgYXJncy5HZXRJc29sYXRlKCkp
OworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwor
CisgICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwgPSBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIGRhdGEsIG1l
c3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisKKyAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9i
amVjdFdpdGhXcmFwcGVyKGltcGwucmVsZWFzZSgpLCAmVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjppbmZvLCB3cmFwcGVyLCBhcmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNv
bmZpZ3VyYXRpb246OkRlcGVuZGVudCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsCiAK
IHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnNbXSA9IHsKQEAgLTI1NiwzMSArMjc5
LDEzIEBAIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRDYWxsYmFjayBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlCiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAKICAgICBpZiAoIWFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigiRE9NIG9iamVjdCBj
b25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgYXJncy5HZXRJc29s
YXRlKCkpOwogCiAgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVj
dG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIo
KTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCi0gICAgICAgIHJldHVybiB0aHJvd05vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBWOFRSWUNBVENIX0ZP
Ul9WOFNUUklOR1JFU09VUkNFKFY4U3RyaW5nUmVzb3VyY2U8PiwgaGVsbG8sIGFyZ3NbMF0pOwot
ICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdDsKLSAgICBB
cnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Q7Ci0gICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPiAyKSB7Ci0gICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJn
c1syXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheVRyYW5z
ZmVyTGlzdCwgYXJncy5HZXRJc29sYXRlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgYXJncy5HZXRJc29sYXRl
KCkpOwotICAgIH0KLSAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShhcmdzWzFdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJy
YXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdywgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIGlm
IChkYXRhRGlkVGhyb3cpCi0gICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogCi0gICAgUmVm
UHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwgPSBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIGRhdGEsIG1lc3NhZ2VQb3J0
QXJyYXlUcmFuc2Zlckxpc3QpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGFyZ3MuSG9sZGVyKCk7Ci0KLSAgICBWOERPTVdyYXBwZXI6OmFzc29jaWF0ZU9iamVjdFdpdGhX
cmFwcGVyKGltcGwucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlciwgYXJncy5HZXRJc29sYXRlKCks
IFdyYXBwZXJDb25maWd1cmF0aW9uOjpEZXBlbmRlbnQpOwotICAgIHJldHVybiB3cmFwcGVyOwor
ICAgIHJldHVybiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6
Y29uc3RydWN0b3IoYXJncyk7CiB9CiAKIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RUeXBlZGVmcy5jcHAKaW5kZXggZDMxZmY5M2I2NjhmZjIz
Y2Y1NzNkNGJhNGViZWUxNWZkZGUwMTE4OS4uZTQ3MzE1Yzc3MWY4NDA0NmYyMjg3NmQ0ZmM4OWVj
ZTJkY2MxNGY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMuY3BwCkBAIC0zOTMsNiArMzkzLDIyIEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbk1ldGhvZChjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJn
cy5HZXRJc29sYXRlKCkpOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0
cnVjdG9yKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdz
LkdldElzb2xhdGUoKSk7CisgICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRShWOFN0
cmluZ1Jlc291cmNlPD4sIGhlbGxvLCBhcmdzWzBdKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAxIHx8ICFhcmdzWzFdLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcigwLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gdGVz
dENhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBnZXRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworCisgICAgUmVmUHRyPFRlc3RUeXBlZGVmcz4gaW1wbCA9IFRlc3RU
eXBlZGVmczo6Y3JlYXRlKGhlbGxvLCB0ZXN0Q2FsbGJhY2spOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisKKyAgICBWOERPTVdyYXBwZXI6OmFz
c29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKGltcGwucmVsZWFzZSgpLCAmVjhUZXN0VHlwZWRlZnM6
OmluZm8sIHdyYXBwZXIsIGFyZ3MuR2V0SXNvbGF0ZSgpLCBXcmFwcGVyQ29uZmlndXJhdGlvbjo6
RGVwZW5kZW50KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVz
dFR5cGVkZWZzVjhJbnRlcm5hbAogCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpC
YXRjaGVkQXR0cmlidXRlIFY4VGVzdFR5cGVkZWZzQXR0cnNbXSA9IHsKQEAgLTQyMywyNCArNDM5
LDEzIEBAIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRDYWxsYmFjayBW
OFRlc3RUeXBlZGVmc0NhbGxiYWNrc1tdID0gewogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhU
ZXN0VHlwZWRlZnM6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKLSAgICAKICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2Fs
bGVkIGFzIGEgZnVuY3Rpb24uIiwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgaWYgKENvbnN0
cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKLSAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDIpCi0gICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFKFY4U3Ry
aW5nUmVzb3VyY2U8PiwgaGVsbG8sIGFyZ3NbMF0pOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9
IDEgfHwgIWFyZ3NbMV0tPklzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKDAsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0
Q2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0sIGdldFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBSZWZQdHI8VGVzdFR5cGVkZWZzPiBpbXBsID0gVGVzdFR5
cGVkZWZzOjpjcmVhdGUoaGVsbG8sIHRlc3RDYWxsYmFjayk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKIAotICAgIFY4RE9NV3JhcHBlcjo6YXNz
b2NpYXRlT2JqZWN0V2l0aFdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZpbmZvLCB3cmFwcGVyLCBh
cmdzLkdldElzb2xhdGUoKSwgV3JhcHBlckNvbmZpZ3VyYXRpb246OkRlcGVuZGVudCk7Ci0gICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmNvbnN0
cnVjdG9yKGFyZ3MpOwogfQogCiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IENvbmZpZ3VyZVY4VGVzdFR5cGVkZWZzVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBpc29sYXRlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>