<?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>200463</bug_id>
          
          <creation_ts>2019-08-05 18:32:18 -0700</creation_ts>
          <short_desc>[WHLSL] Reduce the number of variables that make it into the global struct by skipping stdlib functions and internal uses of MakePointerExpression/MakeArrayReference</short_desc>
          <delta_ts>2019-08-06 10:38:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>199932</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1558672</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 18:32:18 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558683</commentid>
    <comment_count>1</comment_count>
      <attachid>375593</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 19:04:15 -0700</bug_when>
    <thetext>Created attachment 375593
WIP

It&apos;s good to go, I just need to make it into landing shape. It&apos;s 20-30ms faster on compute_boids</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558721</commentid>
    <comment_count>2</comment_count>
      <attachid>375602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 22:36:18 -0700</bug_when>
    <thetext>Created attachment 375602
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558724</commentid>
    <comment_count>3</comment_count>
      <attachid>375602</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-05 23:19:58 -0700</bug_when>
    <thetext>Comment on attachment 375602
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:128
&gt; +    return AST::NativeFunctionDeclaration(AST::FunctionDeclaration(location, AST::AttributeBlock(), WTF::nullopt, WTFMove(returnType), String(&quot;operator&amp;[]&quot;, String::ConstructFromLiteral), WTFMove(parameters), nullptr, isOperator, ParsingMode::StandardLibrary));

Wouldn&apos;t all native functions be marked as StandardLibrary?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:62
&gt; +auto Parser::parse(Program&amp; program, StringView stringView, ParsingMode mode) -&gt; Expected&lt;void, Error&gt;

is &quot;ParsingMode&quot; really the best name for this? It doesn&apos;t have much to do with parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558725</commentid>
    <comment_count>4</comment_count>
      <attachid>375602</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-05 23:20:36 -0700</bug_when>
    <thetext>Comment on attachment 375602
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:62
&gt;&gt; +auto Parser::parse(Program&amp; program, StringView stringView, ParsingMode mode) -&gt; Expected&lt;void, Error&gt;
&gt; 
&gt; is &quot;ParsingMode&quot; really the best name for this? It doesn&apos;t have much to do with parsing.

Oh, I misunderstood this. Disregard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558810</commentid>
    <comment_count>5</comment_count>
      <attachid>375602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 10:27:33 -0700</bug_when>
    <thetext>Comment on attachment 375602
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:128
&gt;&gt; +    return AST::NativeFunctionDeclaration(AST::FunctionDeclaration(location, AST::AttributeBlock(), WTF::nullopt, WTFMove(returnType), String(&quot;operator&amp;[]&quot;, String::ConstructFromLiteral), WTFMove(parameters), nullptr, isOperator, ParsingMode::StandardLibrary));
&gt; 
&gt; Wouldn&apos;t all native functions be marked as StandardLibrary?

Yeah they are. But right now, our constructor for NativeFunctionDeclaration takes a FunctionDeclaration as an rvalue. It&apos;s kinda weird. We should do a refactoring where we just give it the real constructor parameters directly. When we do that, we can omit ParsingMode and it can directly pass StandardLibrary to the parent constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558818</commentid>
    <comment_count>6</comment_count>
      <attachid>375602</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-06 10:37:15 -0700</bug_when>
    <thetext>Comment on attachment 375602
patch

Clearing flags on attachment: 375602

Committed r248303: &lt;https://trac.webkit.org/changeset/248303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558819</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-06 10:37:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558824</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-06 10:38:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/53992512&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375593</attachid>
            <date>2019-08-05 19:04:15 -0700</date>
            <delta_ts>2019-08-05 22:36:18 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>33462</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcg
KzEyNSw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmUKICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgcGFyYW1ldGVycy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6
OlF1YWxpZmllcnMoKSwgJmZpcnN0QXJndW1lbnQsIFN0cmluZygpLCBudWxscHRyLCBudWxscHRy
KSk7CiAgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxs
cHRyLCBpc09wZXJhdG9yKSk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9y
JltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKIH0K
IAogc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJh
dG9yTGVuZ3RoKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpVbm5hbWVkVHlwZSYgZmlyc3RB
cmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKQEAgLTEzNCw3ICsxMzQsNyBA
QCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgYXV0byByZXR1
cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVp
bnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCAmZmlyc3RBcmd1bWVudCwgU3RyaW5nKCks
IG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0
b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1l
dGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmlu
Zygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFy
ZExpYnJhcnkpKTsKIH0KIAogc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBy
ZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBSZXNv
bHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwg
Y29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKQEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0aWMg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGFy
Z3VtZW50VHlwZS5jb3B5UmVmKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAg
cGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5cGUpLCBTdHJp
bmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJv
cGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1l
dGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmlu
Zygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJy
YXJ5KSk7CiB9CiAKIGVudW0gY2xhc3MgQWNjZXB0YWJpbGl0eSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEVycm9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oCShyZXZpc2lvbiAy
NDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEVycm9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEyIEBAIHByaXZhdGU6CiAgICAgQ29kZUxv
Y2F0aW9uIG1fbG9jYXRpb247CiB9OwogCitlbnVtIGNsYXNzIFBhcnNpbmdNb2RlIDogdWludDhf
dCB7CisgICAgU3RhbmRhcmRMaWJyYXJ5LAorICAgIFVzZXIKK307CisKKwogfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24g
MjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwogCiAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTY4MiBSZXR1
cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNj
cmlwdC4KLWF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0
cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+CithdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQYXJzaW5n
TW9kZSBtb2RlKSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4KIHsKICAgICBtX2xleGVyID0gTGV4
ZXIoc3RyaW5nVmlldyk7CiAgICAgbV9tb2RlID0gbW9kZTsKQEAgLTk0LDcgKzk0LDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cgogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6TmF0aXZlOiB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9tb2RlID09IE1vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9tb2RlID09IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwogICAg
ICAgICAgICAgYXV0byBmdXJ0aGVyVG9rZW4gPSBwZWVrRnVydGhlcigpOwogICAgICAgICAgICAg
aWYgKCFmdXJ0aGVyVG9rZW4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTk4Niw3
ICs5ODYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VDb21wdXRlRnVuY3Rpb25EZWNsYXJhCiAgICAg
YXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwogCiAgICAgYm9v
bCBpc09wZXJhdG9yID0gZmFsc2U7Ci0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIFdURk1vdmUoKmF0dHJpYnV0
ZUJsb2NrKSwgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSwgV1RGTW92ZSgqdHlwZSksIG5h
bWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIFdURk1v
dmUoKmF0dHJpYnV0ZUJsb2NrKSwgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSwgV1RGTW92
ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvciwgbV9tb2RlKTsKIH0K
IAogYXV0byBQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9uRGVjbGFyYXRpb24o
KSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpAQCAtMTAwNCw3
ICsxMDA0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aQogICAg
IGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsKIAogICAgIGJv
b2wgaXNPcGVyYXRvciA9IGZhbHNlOwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oeyBlbnRyeVBvaW50LT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQgfSwgeyB9LCBlbnRyeVBv
aW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRv
cik7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbih7IGVudHJ5UG9pbnQtPnN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCB7IH0sIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0
eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yLCBtX21vZGUpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+CkBAIC0xMDIzLDcgKzEwMjMsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhCiAKICAgICBhdXRvIGVuZE9m
ZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKLSAgICByZXR1cm4gQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQgfSwg
eyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4
ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyks
IGlzT3BlcmF0b3IpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmln
aW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvciwgbV9tb2RlKTsKIH0K
IAogYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTEwMzYsNyArMTAzNiw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXIKICAgICBhdXRvIGVu
ZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKICAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmln
aW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZN
b3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oeyBvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCB7IH0sIFdURjo6
bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUoKnBh
cmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IsIG1fbW9kZSk7CiB9CiAK
IGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpAQCAtMTkzNyw5ICsxOTM3LDkgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgoYm9vbCAqaQogICAgICAgICAgICAgcmV0dXJuIHsg
bWFrZVVuaXF1ZVJlZjxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92
ZShib29sQ2FzdCkpIH07CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6QW5k
OgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoKm5leHQpKSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4obG9jYXRpb24sIFdU
Rk1vdmUoKm5leHQpLCBmYWxzZSkgfTsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6QXQ6Ci0g
ICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoKm5leHQpKSB9OworICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGxv
Y2F0aW9uLCBXVEZNb3ZlKCpuZXh0KSwgZmFsc2UpIH07CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBBU1NFUlQocHJlZml4LT50eXBlID09IFRva2VuOjpUeXBlOjpTdGFyKTsKICAgICAg
ICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+
KGxvY2F0aW9uLCBXVEZNb3ZlKCpuZXh0KSkgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkocmV2aXNpb24gMjQ4MjgzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDEyICsxMDIsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFz
cyBQYXJzZXIgewogcHVibGljOgotICAgIGVudW0gY2xhc3MgTW9kZSB7Ci0gICAgICAgIFN0YW5k
YXJkTGlicmFyeSwKLSAgICAgICAgVXNlcgotICAgIH07Ci0KLSAgICBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIE1vZGUpOworICAgIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5nVmlldywgUGFyc2luZ01vZGUpOwogCiBw
cml2YXRlOgogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhpcwpAQCAtMjMyLDcg
KzIyNyw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4sIEVycm9yPiBwYXJzZVRlcm0oKTsKIAogICAgIExleGVyIG1fbGV4ZXI7Ci0gICAgTW9kZSBt
X21vZGU7CisgICAgUGFyc2luZ01vZGUgbV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV0hM
U0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luCiBzdGF0
aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHBy
IGJvb2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBi
b29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0
ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwotc3Rh
dGljIGNvbnN0ZXhwciBib29sIGR1bXBQaGFzZVRpbWVzID0gZmFsc2U7CitzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZHVtcFBoYXNlVGltZXMgPSB0cnVlOwogCiBzdGF0aWMgY29uc3RleHByIGJvb2wg
cGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5ID0gZmFsc2U7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBz
dGF0aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwgU3RyaW5nPiBwcmVwYXJlCiAKICAgICB7CiAgICAgICAg
IFBoYXNlVGltZXIgcGhhc2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgYXV0
byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2Vy
OjpNb2RlOjpVc2VyKTsKKyAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShw
cm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2luZ01vZGU6OlVzZXIpOwogICAgICAgICBpZiAoIXBh
cnNlUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6
ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5o
CShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNvbnN0ZXhwciBib29sIGR1bXBN
ZXRhbENvbXBpbGVUaW1lcyA9IGZhbHNlOworY29uc3RleHByIGJvb2wgZHVtcE1ldGFsQ29tcGls
ZVRpbWVzID0gdHJ1ZTsKIAogc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgewogICAgIFN0cmlu
ZyBtZXRhbFNvdXJjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRp
bWVzLmNwcAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsMTIgKzc3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikgb3ZlcnJpZGUKICAgICB7
Ci0gICAgICAgIGVzY2FwZVZhcmlhYmxlVXNlKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKSk7CisgICAgICAgIGlmICghbWFrZVBvaW50ZXJFeHByZXNzaW9uLmlzSW50ZXJuYWwoKSkK
KyAgICAgICAgICAgIGVzY2FwZVZhcmlhYmxlVXNlKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKCFtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmlzSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIGVzY2FwZVZhcmlhYmxlVXNlKG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiB0YWtlRXNjYXBlZFZhcmlhYmxlcygpIHsg
cmV0dXJuIFdURk1vdmUobV9lc2NhcGVkVmFyaWFibGVzKTsgfQpAQCAtMTMzLDYgKzEzNSw5IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ucGFyc2luZ01vZGUoKSA9PSBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGJvb2wgaXNFbnRyeVBvaW50ID0gISFmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKTsKICAgICAgICAgaWYgKGlzRW50cnlQb2ludCkg
ewogICAgICAgICAgICAgYXV0byBzdHJ1Y3RWYXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9j
YXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksCkBAIC0xNDYsNyArMTUxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgc3RydWN0VmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUoc3Ry
dWN0VmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgYXV0byBzdHJ1Y3REZWNsYXJh
dGlvblN0YXRlbWVudCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudD4oZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKHN0cnVj
dFZhcmlhYmxlRGVjbGFyYXRpb25zKSk7CiAKLSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4o
ZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKHN0cnVjdFZhcmlhYmxl
UmVmZXJlbmNlKSk7CisgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5p
dGlvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSksIHRy
dWUpOwogICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRl
clRvU3RydWN0VHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKQEAgLTE5MCw3ICsx
OTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIGl0J3MgaWxs
ZWdhbCB0byBjYWxsIGFuIGVudHJ5cG9pbnQuIFRoZXJlZm9yZSwgd2UgY2FuIG9ubHkKICAgICAg
ICAgLy8gY2FsbCBmdW5jdGlvbnMgd2hlcmUgd2UndmUgYWxyZWFkeSBhcHBlbmRlZCB0aGlzIHN0
cnVjdCBhcyBpdHMgZmluYWwgcGFyYW1ldGVyLgotICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9u
LmZ1bmN0aW9uKCkuaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisgICAgICAgIGlmICgh
Y2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKS5pc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAm
JiBjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpLnBhcnNpbmdNb2RlKCkgIT0gUGFyc2luZ01vZGU6
OlN0YW5kYXJkTGlicmFyeSkKICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygp
LmFwcGVuZChtYWtlU3RydWN0VmFyaWFibGVSZWZlcmVuY2UoKSk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJn
dW1lbnRSZXN1bHQ+CiAgICAgaWYgKGF1dG8gYWRkcmVzc1NwYWNlID0gZXhwcmVzc2lvbi0+dHlw
ZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKICAgICAgICAgaWYgKCFhbmRlckZ1
bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBt
YWtlQXJyYXlSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25zdHJ1Y3Rvcj4o
bG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIG1ha2VBcnJheVJl
ZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8RXhwcmVzc2lvbkNvbnN0cnVjdG9yPihsb2NhdGlvbiwg
V1RGTW92ZShleHByZXNzaW9uKSwgdHJ1ZSk7CiAgICAgICAgIG1ha2VBcnJheVJlZmVyZW5jZS0+
c2V0VHlwZShUeXBlQ29uc3RydWN0b3I6OmNyZWF0ZShsb2NhdGlvbiwgKmFkZHJlc3NTcGFjZSwg
V1RGTW92ZShiYXNlVHlwZSkpKTsKICAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB7eyBXVEZNb3Zl
KG1ha2VBcnJheVJlZmVyZW5jZSksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07
CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVz
dWx0PgogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUuY29weVJl
ZigpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKLSAgICAgICAgYXV0
byBleHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KGxvY2F0
aW9uLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBhdXRvIGV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UyKSwgdHJ1ZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9
IFR5cGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGxvY2F0aW9uLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkLCBXVEZNb3ZlKGJhc2VUeXBlKSk7CiAgICAgICAgIGV4cHJlc3Npb24tPnNldFR5cGUocmVz
dWx0VHlwZS5jb3B5UmVmKCkpOwogICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIE1vZGlmeVJl
c3VsdCBtb2RpZnkoQVNUOjpQcm9wZXJ0eQogCiAgICAgLy8gU3RlcCAxOgogICAgIHsKLSAgICAg
ICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBv
aW50ZXJFeHByZXNzaW9uPihpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBXVEZN
b3ZlKGxlZnRFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oaW5uZXJMZWZ0RXhw
cmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShsZWZ0RXhwcmVzc2lvbiksIHRydWUpOwog
ICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUoQVNUOjpQb2ludGVyVHlwZTo6
Y3JlYXRlKGlubmVyTGVmdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICppbm5lckxlZnRFeHBy
ZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKSk7CiAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCkBAIC01NTksNyArNTU5LDcg
QEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogICAgICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwogCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4obGVmdFZhbHVlTG9jYXRpb24sIHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24udGFrZUxlZnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWFrZVBv
aW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lv
bj4obGVmdFZhbHVlTG9jYXRpb24sIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZUxlZnRW
YWx1ZSgpLCB0cnVlKTsKICAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShwb2ludGVyVHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI0ODI4MykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5
VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIGluY2x1
ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gc3RhbmRhcmRMaWJyYXJ5KGRlY29tcHJlc3NBbmREZWNvZGVTdGFuZGFyZExp
YnJhcnkoKSk7CiAgICAgaWYgKHBhcnNlRnVsbFN0YW5kYXJkTGlicmFyeSkgewotICAgICAgICBh
dXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5n
ZXQoKSwgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpOworICAgICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5nZXQoKSwgUGFy
c2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAoZnVsbCkgc3RhbmRh
cmQgbGlicmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJy
YXJ5KSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9n
cmFtJiBwcm8KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFN1YnN0
cmluZ0xvY2F0aW9uPj4gc3RhbmRhcmRMaWJyYXJ5RnVuY3Rpb25NYXAoY29tcHV0ZVN0YW5kYXJk
TGlicmFyeUZ1bmN0aW9uTWFwKCkpOwogCiAgICAgYXV0byBzdHJpbmdWaWV3ID0gU3RyaW5nVmll
dyhzdGFuZGFyZExpYnJhcnkuZ2V0KCkpLnN1YnN0cmluZygwLCBmaXJzdEZ1bmN0aW9uT2Zmc2V0
SW5TdGFuZGFyZExpYnJhcnkoKSk7Ci0gICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJz
ZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSk7Cisg
ICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQ
YXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKICAgICBBU1NFUlRfVU5VU0VEKHBhcnNlUmVz
dWx0LCBwYXJzZVJlc3VsdCk7CiAKICAgICBOYW1lRmluZGVyIG5hbWVGaW5kZXI7CkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHBybwogICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yID09IHN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLmdldCgp
LmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXV0byBzdHJp
bmdWaWV3ID0gU3RyaW5nVmlldyhzdGFuZGFyZExpYnJhcnkuZ2V0KCkpLnN1YnN0cmluZyhpdGVy
YXRvci0+dmFsdWUuc3RhcnQsIGl0ZXJhdG9yLT52YWx1ZS5lbmQgLSBpdGVyYXRvci0+dmFsdWUu
c3RhcnQpOwotICAgICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9n
cmFtLCBzdHJpbmdWaWV3LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAg
ICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcs
IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwogICAgICAgICAgICAgaWYgKCFwYXJzZVJl
c3VsdCkgewogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAo
cGFydGlhbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHN0cmluZ1Zp
ZXcsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGguY3BwCShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6
ZUFycmF5T3BlCiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
ICZhcnJheVR5cGUuZ2V0KCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVs
bG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBwcm9ncmFtLmludHJpbnNp
Y3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5
cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0
ciwgaXNPcGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSkpOwogICAgICAgICBp
ZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQog
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3Qgc3ludGhlc2l6
ZSBvcGVyYXRvci5sZW5ndGggZm9yIGFycmF5IHR5cGUuIikpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0
b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDExICsxNjIsMTEgQEAgRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IHN5bnRoZXNpemVDb25zdHJ1YwogICAgICAgICAgICAgYXV0byB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0
aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgJnVubmFtZWRUeXBlLCBTdHJpbmcoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRl
cnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5
Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUsICJvcGVyYXRvciBjYXN0Il9z
dHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgdW5uYW1lZFR5cGUsICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkp
KTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVm
YXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLCAib3BlcmF0b3IgY2Fz
dCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIG51bGxwdHIsIGlzT3BlcmF0b3Ip
KTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1
Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBudWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9k
ZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChFcnJvcigiQ291bGQgbm90IHN5bnRoZXNpemUgZGVmYXVsdCBjb25zdHJ1Y3RvciIpKTsKICAg
ICB9CkBAIC0xODIsNyArMTgyLDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVD
b25zdHJ1YwogICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKLSAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNv
cHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
bG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0
Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdN
b2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShj
b3B5Q29uc3RydWN0b3IpKTsKIAogICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4obmFtZWRUeXBlKSkpIHsKQEAgLTE5
MCw3ICsxOTAsNyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUNvbnN0cnVjCiAg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzT3BhcXVlVHlwZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3Ig
Y2FzdCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIG51bGxwdHIsIGlzT3BlcmF0
b3IpKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25z
dHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24s
IG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMoKSwgbnVsbHB0ciwgaXNPcGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJkTGli
cmFyeSkpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0
cnVjdG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxk
IG5vdCBzeW50aGVzaXplIGRlZmF1bHQgY29uc3RydWN0b3IiKSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAkocmV2aXNp
b24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVyYXQKICAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsK
LSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2Nh
dGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksICJvcGVyYXRvcj09Il9zdHIs
IFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgcHJvZ3Jh
bS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksICJvcGVyYXRvcj09Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJh
cnkpKTsKICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEVycm9yKCJDYW5ub3QgY3JlYXRlIG9wZXJhdG9yPT0gZm9yIGVudW0gdHlwZS4iKSk7CiAgICAg
ICAgIH0KQEAgLTU2LDcgKzU2LDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVF
bnVtZXJhdAogICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMo
KSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24pLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCksICJvcGVyYXRvci52
YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yLCBQYXJz
aW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IGNyZWF0ZSBvcGVyYXRvci52YWx1
ZSBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQpAQCAtNjUsNyArNjUsNyBAQCBFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0CiAgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
bG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRy
KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikp
OwotICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBl
KCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlz
T3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBu
dWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAg
ICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fu
bm90IGNyZWF0ZSBjb3B5IGNvbnN0cnVjdG9yIGZvciBlbnVtIHR5cGUuIikpOwogICAgICAgICB9
CkBAIC03NCw3ICs3NCw3IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVy
YXQKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksICZl
bnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1v
dmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25E
ZWZpbml0aW9uKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVs
bHB0ciwgaXNPcGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSkpOwogICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5v
dCBjcmVhdGUgJ29wZXJhdG9yIGNhc3QnIGZvciBlbnVtIHR5cGUuIikpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAJKHJl
dmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVTdHJ1Y3R1cgogICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKICAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpj
cmVhdGUoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBzdHJ1
Y3R1cmVFbGVtZW50LnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBtYWtlU3RyaW5nKCJvcGVy
YXRvciYuIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBu
dWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBtYWtlU3RyaW5nKCJvcGVy
YXRvciYuIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBu
dWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CiAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFy
YXRpb24uaAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVk
ZSAiV0hMU0xFcnJvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcg
QEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKENv
ZGVMb2NhdGlvbiBsb2NhdGlvbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0
aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBSZWY8VW5uYW1lZFR5cGU+IHR5
cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgc3Rk
Ojp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFudGljLCBib29sIGlzT3BlcmF0b3IpCisgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIEF0dHJpYnV0ZUJsb2Nr
JiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlw
ZSwgUmVmPFVubmFtZWRUeXBlPiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xhcmF0
aW9ucyYmIHBhcmFtZXRlcnMsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywg
Ym9vbCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZSBwYXJzaW5nTW9kZSkKICAgICAgICAgOiBtX2Nv
ZGVMb2NhdGlvbihsb2NhdGlvbikKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUo
YXR0cmlidXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5
cGUpCkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShu
YW1lKSkKICAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAg
ICAgLCBtX3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQorICAgICAgICAsIG1fcGFyc2luZ01v
ZGUocGFyc2luZ01vZGUpCiAgICAgewogICAgIH0KIApAQCAtNzksNiArODEsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc09wZXJhdG9yOyB9CiAg
ICAgY29uc3QgQ29kZUxvY2F0aW9uJiBjb2RlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVMb2NhdGlvbjsgfQogCisgICAgUGFyc2luZ01vZGUgcGFyc2luZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNpbmdNb2RlOyB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29k
ZUxvY2F0aW9uOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CkBAIC04OCw2
ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBWYXJpYWJsZURlY2xh
cmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3Nl
bWFudGljOworICAgIFBhcnNpbmdNb2RlIG1fcGFyc2luZ01vZGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmgJKHJldmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsOSArNDAsMTAgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0
VmFsdWUpCisgICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9j
YXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnRWYWx1ZSwgYm9vbCBpc0ludGVybmFs
KQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCiAgICAgICAgICwgbV9sZWZ0VmFsdWUo
V1RGTW92ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1faXNJbnRlcm5hbChpc0ludGVybmFsKQog
ICAgIHsKICAgICB9CiAKQEAgLTU1LDggKzU2LDExIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Np
b24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJuIG1fbGVmdFZhbHVlOyB9CiAKKyAgICBib29sIGlzSW50
ZXJuYWwoKSBjb25zdCB7IHJldHVybiBtX2lzSW50ZXJuYWw7IH0KKwogcHJpdmF0ZToKICAgICBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0VmFsdWU7CisgICAgYm9vbCBtX2lzSW50ZXJuYWw7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOSArNDAsMTAgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBNYWtlUG9p
bnRlckV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgTWFrZVBvaW50ZXJFeHByZXNzaW9uKENvZGVMb2NhdGlv
biBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbGVmdFZhbHVlKQorICAgIE1ha2VQ
b2ludGVyRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiYmIGxlZnRWYWx1ZSwgYm9vbCBpc0ludGVybmFsKQogICAgICAgICA6IEV4cHJlc3Npb24o
bG9jYXRpb24pCiAgICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQorICAg
ICAgICAsIG1faXNJbnRlcm5hbChpc0ludGVybmFsKQogICAgIHsKICAgICB9CiAKQEAgLTU1LDgg
KzU2LDExIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0dXJu
IG1fbGVmdFZhbHVlOyB9CiAKKyAgICBib29sIGlzSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBt
X2lzSW50ZXJuYWw7IH0KKwogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9s
ZWZ0VmFsdWU7CisgICAgYm9vbCBtX2lzSW50ZXJuYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBB
U1QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375602</attachid>
            <date>2019-08-05 22:36:18 -0700</date>
            <delta_ts>2019-08-06 10:37:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>48820</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE5LTA4LTA1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gUmVkdWNlIHRoZSBu
dW1iZXIgb2YgdmFyaWFibGVzIHRoYXQgbWFrZSBpdCBpbnRvIHRoZSBnbG9iYWwgc3RydWN0IGJ5
IHNraXBwaW5nIHN0ZGxpYiBmdW5jdGlvbnMgYW5kIGludGVybmFsIHVzZXMgb2YgTWFrZVBvaW50
ZXJFeHByZXNzaW9uL01ha2VBcnJheVJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNDYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBpdCBzbyB0aGF0IHdlIHB1
dCBmZXdlciB2YXJpYWJsZXMgaW4gdGhlIGdsb2JhbCBzdHJ1Y3QuCisgICAgICAgIFRoaXMgZGVj
cmVhc2VzIGVuZC10by1lbmQgcnVubmluZyB0aW1lIGluIGNvbXB1dGVfYm9pZHMgYnkgMzAlICh3
aXRoIHAgPSAwLjAwMDEpLgorICAgICAgICAKKyAgICAgICAgV2UgYWNoaWV2ZSB0aGlzIGluIHR3
byB3YXlzOgorICAgICAgICAxLiBXZSB0cmFjayBpZiBlYWNoIGZ1bmN0aW9uIGlzIHVzZXIgY29k
ZSBvciAic3RhbmRhcmQgbGlicmFyeSIgY29kZS4gV2UgYWxzbworICAgICAgICBjb3VudCBuYXRp
dmUgZnVuY3Rpb25zIGFzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBXZSBrbm93IGEgcHJpb3JpIHRo
YXQgdGhlCisgICAgICAgIHN0YW5kYXJkIGxpYnJhcnkgbmV2ZXIgZXNjYXBlcyBhbnkgdmFyaWFi
bGVzLiBTbyB0aGUgcHJlc2VydmUgdmFyaWFibGUKKyAgICAgICAgbGlmZXRpbWVzIHBoYXNlIHNr
aXBzIGFuYWx5emluZyBhbGwgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgYW5kIGFsc28KKyAg
ICAgICAgc2tpcHMgcGFzc2luZyB0aGUgZ2xvYmFsIHN0cnVjdCB0byBhbnkgc3RhbmRhcmQgbGli
cmFyeSBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAyLiBXZSBpbnRlcm5hbGx5IGVtaXQg
TWFrZVBvaW50ZXJFeHByZXNzaW9uL01ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24gbm9kZXMg
aW4KKyAgICAgICAgdGhlIGNvbXBpbGVyIGluIHZhcmlvdXMgcGhhc2VzLiBXZSBzb21ldGltZXMg
ZW1pdCB0aGVzZSBub2RlcyBpbiBzdWNoIGEgd2F5CisgICAgICAgIHRoYXQgd2Uga25vdyB0aGF0
IHRoaXMgYWRkcmVzcy1vZiBleHByZXNzaW9uIGRvZXMgbm90IGNhdXNlIHRoZSB2YXJpYWJsZSB0
bworICAgICAgICBlc2NhcGUuIFdlIG5vdyBtYXJrIGVhY2ggYWRkcmVzcy1vZiBleHByZXNzaW9u
cyBhcyBlaXRoZXI6CisgICAgICAgIC0gQ29uc2VydmF0aXZlbHkgZXNjYXBpbmcuIFdlIGNvbnNl
cnZhdGl2ZWx5IGRvIHRoaXMgZm9yIGFsbCB1c2VyIGNvZGUuCisgICAgICAgIC0gTm90IGVzY2Fw
aW5nLiBUaGlzIG1lYW5zIHRoYXQgdGhpcyBhZGRyZXNzLW9mIG9wZXJhdGlvbiBkZWZpbml0ZWx5
IGRvZXMKKyAgICAgICAgbm90IGVzY2FwZSB0aGUgdmFyaWFibGUuIElmIGEgdmFyaWFibGUgbmV2
ZXIgaGFzIGFuIGVzY2FwaW5nIHVzZSwgd2Ugd2lsbAorICAgICAgICBvbWl0IHB1dHRpbmcgdGhp
cyB2YXJpYWJsZSBpbiB0aGUgc3RydWN0LgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQWRkcmVzc0VzY2FwZU1vZGUuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6RnVuY3Rpb25EZWNsYXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
OjpwYXJzaW5nTW9kZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uOjptaWdodEVzY2FwZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246Ok1ha2VQb2ludGVy
RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4
cHJlc3Npb246Om1pZ2h0RXNjYXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVX
aXRoT3BlcmF0b3JBbmRlckluZGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29s
dmVXaXRoT3BlcmF0b3JMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVX
aXRoUmVmZXJlbmNlQ29tcGFyYXRvcik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb21wdXRlRnVuY3Rpb25E
ZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVZlcnRl
eE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OndyYXBBbmRlckNhbGxBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
bW9kaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9wZXJ0eVJlc29sdmVyOjp2aXNp
dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlV
dGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluY2x1ZGVTdGFuZGFyZExp
YnJhcnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OnN5bnRoZXNpemVDb25zdHJ1Y3RvcnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyk6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA4
LTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIExv
Z2dlcjo6bG9nIHRocmVhZCBzYWZlIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZnJvbSBiYWNrZ3Jv
dW5kIHRocmVhZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gcmUKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgcGFy
YW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxv
Y2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgJmZpcnN0QXJndW1lbnQsIFN0cmluZygpLCBudWxs
cHRyLCBudWxscHRyKSk7CiAgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpLCBTdHJp
bmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJv
cGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6
QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJp
bmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
cGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExp
YnJhcnkpKTsKIH0KIAogc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNv
bHZlV2l0aE9wZXJhdG9yTGVuZ3RoKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpVbm5hbWVk
VHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKQEAgLTEz
NCw3ICsxMzQsNyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAg
ICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBp
bnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCAmZmlyc3RBcmd1bWVu
dCwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0
cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICByZXR1cm4gQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2Nh
dGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJu
VHlwZSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdN
b2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKIH0KIAogc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNv
bmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKQEAgLTE1Niw3ICsxNTYs
NyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFs
aWZpZXJzKCksIGFyZ3VtZW50VHlwZS5jb3B5UmVmKCksIFN0cmluZygpLCBudWxscHRyLCBudWxs
cHRyKSk7CiAgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVu
dFR5cGUpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9u
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBl
KSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICByZXR1cm4gQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2Nh
dGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJu
VHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6
U3RhbmRhcmRMaWJyYXJ5KSk7CiB9CiAKIGVudW0gY2xhc3MgQWNjZXB0YWJpbGl0eSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuY3BwCShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
bmFtZXNwYWNlIFdITFNMIHsKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUu
ZXJyb3IoKSk7CiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1NjgyIFJldHVybiBhIGJldHRlciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJl
cG9ydCBpdCB0byBKYXZhU2NyaXB0LgotYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dy
YW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0
cmluZ1ZpZXcsIFBhcnNpbmdNb2RlIG1vZGUpIC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPgogewog
ICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3KTsKICAgICBtX21vZGUgPSBtb2RlOwpAQCAt
OTQsNyArOTQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBl
OjpOYXRpdmU6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX21vZGUgPT0gTW9kZTo6U3RhbmRhcmRM
aWJyYXJ5KTsKKyAgICAgICAgICAgIEFTU0VSVChtX21vZGUgPT0gUGFyc2luZ01vZGU6OlN0YW5k
YXJkTGlicmFyeSk7CiAgICAgICAgICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9IHBlZWtGdXJ0aGVy
KCk7CiAgICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikKICAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwpAQCAtOTg2LDcgKzk4Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNvbXB1dGVGdW5j
dGlvbkRlY2xhcmEKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zm
c2V0KCk7CiAKICAgICBib29sIGlzT3BlcmF0b3IgPSBmYWxzZTsKLSAgICByZXR1cm4gQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQgfSwg
V1RGTW92ZSgqYXR0cmlidXRlQmxvY2spLCBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yKTsKKyAgICBy
ZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQgfSwgV1RGTW92ZSgqYXR0cmlidXRlQmxvY2spLCBBU1Q6OkVudHJ5UG9pbnRUeXBl
OjpDb21wdXRlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0
cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJh
dG9yLCBtX21vZGUpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VWZXJ0ZXhPckZyYWdtZW50RnVu
Y3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwg
RXJyb3I+CkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWZXJ0ZXhPckZy
YWdtZW50RnVuY3RpCiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9m
ZnNldCgpOwogCiAgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7Ci0gICAgcmV0dXJuIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbih7IGVudHJ5UG9pbnQtPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCB9LCB7IH0sIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmll
dyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2Vt
YW50aWMpLCBpc09wZXJhdG9yKTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KHsgZW50cnlQb2ludC0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIHsgfSwgZW50cnlQb2lu
dFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5n
KCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3Is
IG1fbW9kZSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTEw
MjMsNyArMTAyMyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmEK
IAogICAgIGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsKIAot
ICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmlnaW4tPnN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCB9LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUt
PnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdU
Rk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0
cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJh
dG9yLCBtX21vZGUpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVj
bGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpA
QCAtMTAzNiw3ICsxMDM2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRl
Y2xhcgogICAgIGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsK
IAogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7Ci0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJu
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0IH0sIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgIm9wZXJhdG9yIGNhc3Qi
X3N0ciwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRv
ciwgbV9tb2RlKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigp
IC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+CkBAIC0xOTM3LDkg
KzE5MzcsOSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeChib29sICppCiAgICAg
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+
KGxvY2F0aW9uLCBXVEZNb3ZlKGJvb2xDYXN0KSkgfTsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFRva2VuOjpUeXBlOjpBbmQ6Ci0gICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZSgqbmV4dCkpIH07Cisg
ICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uPihsb2NhdGlvbiwgV1RGTW92ZSgqbmV4dCksIEFTVDo6QWRkcmVzc0VzY2FwZU1vZGU6OkVz
Y2FwZXMpIH07CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkF0OgotICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGxv
Y2F0aW9uLCBXVEZNb3ZlKCpuZXh0KSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92
ZSgqbmV4dCksIEFTVDo6QWRkcmVzc0VzY2FwZU1vZGU6OkVzY2FwZXMpIH07CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlQocHJlZml4LT50eXBlID09IFRva2VuOjpUeXBlOjpT
dGFyKTsKICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKCpuZXh0KSkgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkocmV2aXNp
b24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNzEgKzI3LDExIEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRl
ICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldI
TFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xCbG9jay5oIgotI2luY2x1ZGUgIldI
TFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEJyZWFrLmgiCi0jaW5jbHVkZSAi
V0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0
YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKLSNpbmNsdWRlICJX
SExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3Au
aCIKLSNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEVmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRl
ICJXSExTTEFTVC5oIgogI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKLSNpbmNsdWRlICJXSExTTEV4
cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCi0jaW5jbHVkZSAiV0hM
U0xGbG9hdExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKLSNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRlICJX
SExTTElmU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgot
I2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExvZ2lj
YWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKLSNpbmNs
dWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNp
bmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFBhcnNpbmdNb2RlLmgiCiAjaW5jbHVk
ZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgotI2luY2x1ZGUgIldITFNMUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgot
I2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMUmV0dXJu
LmgiCi0jaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50
aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgotI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50
LmgiCi0jaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
VHlwZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgotI2luY2x1
ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAi
V0hMU0xXaGlsZUxvb3AuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTEwMiwxMiAr
NDIsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQYXJzZXIgewogcHVibGljOgotICAg
IGVudW0gY2xhc3MgTW9kZSB7Ci0gICAgICAgIFN0YW5kYXJkTGlicmFyeSwKLSAgICAgICAgVXNl
cgotICAgIH07Ci0KLSAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcGFyc2UoUHJvZ3JhbSYsIFN0
cmluZ1ZpZXcsIE1vZGUpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBwYXJzZShQcm9ncmFt
JiwgU3RyaW5nVmlldywgUGFyc2luZ01vZGUpOwogCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhpcwpAQCAtMjMyLDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAg
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVRlcm0oKTsK
IAogICAgIExleGVyIG1fbGV4ZXI7Ci0gICAgTW9kZSBtX21vZGU7CisgICAgUGFyc2luZ01vZGUg
bV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2luZ01vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNpbmdNb2RlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzaW5nTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworZW51bSBjbGFzcyBQYXJzaW5nTW9kZSA6IHVpbnQ4
X3QgeworICAgIFN0YW5kYXJkTGlicmFyeSwKKyAgICBVc2VyCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTcsNyArMTU3LDcgQEAgc3RhdGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZQog
CiAgICAgewogICAgICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIoInBhcnNlIiwgcGhhc2VUaW1l
cyk7Ci0gICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hs
c2xTb3VyY2UsIFBhcnNlcjo6TW9kZTo6VXNlcik7CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQg
PSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3VyY2UsIFBhcnNpbmdNb2RlOjpVc2VyKTsK
ICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFp
bHVyZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJv
Z3JhbTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBwYXJzZVJlc3VsdC5lcnJv
cigpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
ZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJ
KHJldmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDEyICs3NywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJF
eHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwor
ICAgICAgICBpZiAobWFrZVBvaW50ZXJFeHByZXNzaW9uLm1pZ2h0RXNjYXBlKCkpCisgICAgICAg
ICAgICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkp
OwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgZXNjYXBlVmFyaWFibGVVc2UobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKSk7CisgICAgICAgIGlmIChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm1pZ2h0RXNj
YXBlKCkpCisgICAgICAgICAgICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKICAgICB9CiAKICAgICBIYXNoTWFwPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiosIFN0cmluZz4gdGFrZUVzY2FwZWRWYXJpYWJsZXMoKSB7IHJldHVybiBX
VEZNb3ZlKG1fZXNjYXBlZFZhcmlhYmxlcyk7IH0KQEAgLTEzMyw2ICsxMzUsOSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXRpb24pIG92ZXJyaWRlCiAgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBh
cnNpbmdNb2RlKCkgPT0gUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSkKKyAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICBib29sIGlzRW50cnlQb2ludCA9ICEhZnVuY3Rpb25EZWZpbml0
aW9uLmVudHJ5UG9pbnRUeXBlKCk7CiAgICAgICAgIGlmIChpc0VudHJ5UG9pbnQpIHsKICAgICAg
ICAgICAgIGF1dG8gc3RydWN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCks
IEFTVDo6UXVhbGlmaWVycygpLApAQCAtMTQ2LDcgKzE1MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHN0cnVjdFZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdFZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIGF1dG8gc3RydWN0RGVjbGFyYXRpb25TdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+
KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJs
ZURlY2xhcmF0aW9ucykpOwogCi0gICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lv
biA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9u
RGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5j
ZSkpOworICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihmdW5jdGlvbkRlZmluaXRpb24uY29k
ZUxvY2F0aW9uKCksIFdURk1vdmUoc3RydWN0VmFyaWFibGVSZWZlcmVuY2UpLCBBU1Q6OkFkZHJl
c3NFc2NhcGVNb2RlOjpEb2VzTm90RXNjYXBlKTsKICAgICAgICAgICAgIG1ha2VQb2ludGVyRXhw
cmVzc2lvbi0+c2V0VHlwZShtX3BvaW50ZXJUb1N0cnVjdFR5cGUuY29weVJlZigpKTsKICAgICAg
ICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOwogCkBAIC0xOTAsNyArMTk1LDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFRo
aXMgd29ya3MgYmVjYXVzZSBpdCdzIGlsbGVnYWwgdG8gY2FsbCBhbiBlbnRyeXBvaW50LiBUaGVy
ZWZvcmUsIHdlIGNhbiBvbmx5CiAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb25zIHdoZXJlIHdlJ3Zl
IGFscmVhZHkgYXBwZW5kZWQgdGhpcyBzdHJ1Y3QgYXMgaXRzIGZpbmFsIHBhcmFtZXRlci4KLSAg
ICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpLmlzTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpKQorICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkuaXNOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgJiYgY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKS5wYXJz
aW5nTW9kZSgpICE9IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpCiAgICAgICAgICAgICBj
YWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKS5hcHBlbmQobWFrZVN0cnVjdFZhcmlhYmxlUmVmZXJl
bmNlKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lv
biAyNDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
b3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMyArOTgsMTkgQEAgc3Ry
dWN0IEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBF
eHByZXNzaW9uQ29uc3RydWN0b3IsIHR5cGVuYW1lIFR5cGVDb25zdHJ1Y3Rvcj4KLXN0YXRpYyBP
cHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gd3JhcEFuZGVyQ2FsbEFyZ3VtZW50KFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uLCBSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4gYmFzZVR5cGUsIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9u
KQorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3cmFwQW5kZXJDYWxs
QXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiBiYXNlVHlwZSwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRlckZ1
bmN0aW9uLCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7
CisgICAgYXV0byBmdW5jdGlvbkVzY2FwZU1vZGUgPSBbXSAoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKSB7CisgICAgICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0
aW9uLmlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHx8IGZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyc2luZ01vZGUoKSA9PSBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KQorICAgICAgICAg
ICAgcmV0dXJuIEFTVDo6QWRkcmVzc0VzY2FwZU1vZGU6OkRvZXNOb3RFc2NhcGU7CisgICAgICAg
IHJldHVybiBBU1Q6OkFkZHJlc3NFc2NhcGVNb2RlOjpFc2NhcGVzOworICAgIH07CisKICAgICBh
dXRvIGxvY2F0aW9uID0gZXhwcmVzc2lvbi0+Y29kZUxvY2F0aW9uKCk7CiAgICAgaWYgKGF1dG8g
YWRkcmVzc1NwYWNlID0gZXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1Nw
YWNlKCkpIHsKICAgICAgICAgaWYgKCFhbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBtYWtlQXJyYXlSZWZlcmVuY2UgPSBtYWtlVW5p
cXVlUmVmPEV4cHJlc3Npb25Db25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lv
bikpOworICAgICAgICBhdXRvIG1ha2VBcnJheVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8RXhw
cmVzc2lvbkNvbnN0cnVjdG9yPihsb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9uKSwgZnVuY3Rp
b25Fc2NhcGVNb2RlKCphbmRlckZ1bmN0aW9uKSk7CiAgICAgICAgIG1ha2VBcnJheVJlZmVyZW5j
ZS0+c2V0VHlwZShUeXBlQ29uc3RydWN0b3I6OmNyZWF0ZShsb2NhdGlvbiwgKmFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShiYXNlVHlwZSkpKTsKICAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB7eyBXVEZN
b3ZlKG1ha2VBcnJheVJlZmVyZW5jZSksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIg
fX07CkBAIC0xMjQsNyArMTMwLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50
UmVzdWx0PgogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUuY29w
eVJlZigpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKLSAgICAgICAg
YXV0byBleHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KGxv
Y2F0aW9uLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBhdXRvIGV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSwgZnVuY3Rpb25Fc2NhcGVNb2RlKCp0aHJlYWRBbmRl
ckZ1bmN0aW9uKSk7CiAgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9IFR5cGVDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGxvY2F0aW9uLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBXVEZNb3ZlKGJhc2VU
eXBlKSk7CiAgICAgICAgIGV4cHJlc3Npb24tPnNldFR5cGUocmVzdWx0VHlwZS5jb3B5UmVmKCkp
OwogICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CkBAIC0xNDAsNyArMTQ2LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50
UmVzdWx0PgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxB
bmRlckNhbGxBcmd1bWVudFJlc3VsdD4gYW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRB
bmRlckZ1bmN0aW9uKQorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiBh
bmRlckNhbGxBcmd1bWVudChVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbiwg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRlckZ1bmN0aW9uLCBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFhbmRlckZ1bmN0aW9u
ICYmICF0aHJlYWRBbmRlckZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpA
QCAtMTcyLDcgKzE3OCw3IEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBzZXR0
ZXIKICAgICBpZiAocmVsZXZhbnRBbmRlcikgewogICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygm
dikgPSBuZXdWYWx1ZQogICAgICAgICBhdXRvIGxlZnRWYWx1ZSA9IGxlZnRWYWx1ZUZhY3Rvcnko
KTsKLSAgICAgICAgYXV0byBhcmd1bWVudCA9IGFuZGVyQ2FsbEFyZ3VtZW50KGxlZnRWYWx1ZSwg
dHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYXJndW1lbnQgPSBhbmRlckNhbGxBcmd1bWVudChs
ZWZ0VmFsdWUsIHJlbGV2YW50QW5kZXIsIHJlbGV2YW50QW5kZXIpOwogICAgICAgICBBU1NFUlQo
YXJndW1lbnQpOwogICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0aW9u
KTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50LT53aGljaEFuZGVyID09IFdoaWNoQW5kZXI6OkFu
ZGVyKTsKQEAgLTIzMyw3ICsyMzksNyBAQCBzdGF0aWMgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4gZ2V0dGVyCiAgICAgaWYgKHJlbGV2YW50QW5kZXIpIHsKICAgICAgICAgLy8gKm9wZXJhdG9y
Ji5mb28oJnYpCiAgICAgICAgIGF1dG8gbGVmdFZhbHVlID0gbGVmdFZhbHVlRmFjdG9yeSgpOwot
ICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYW5kZXJDYWxsQXJndW1lbnQobGVmdFZhbHVlLCB0cnVl
LCB0cnVlKTsKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGFuZGVyQ2FsbEFyZ3VtZW50KGxlZnRW
YWx1ZSwgcmVsZXZhbnRBbmRlciwgcmVsZXZhbnRBbmRlcik7CiAgICAgICAgIEFTU0VSVChhcmd1
bWVudCk7CiAgICAgICAgIEFTU0VSVCghYXJndW1lbnQtPnZhcmlhYmxlRGVjbGFyYXRpb24pOwog
ICAgICAgICBBU1NFUlQoYXJndW1lbnQtPndoaWNoQW5kZXIgPT0gV2hpY2hBbmRlcjo6QW5kZXIp
OwpAQCAtMzYyLDcgKzM2OCw3IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5KEFTVDo6UHJv
cGVydHkKIAogICAgIC8vIFN0ZXAgMToKICAgICB7Ci0gICAgICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oaW5u
ZXJMZWZ0RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShsZWZ0RXhwcmVzc2lvbikp
OworICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGlubmVyTGVmdEV4cHJlc3Npb24uY29kZUxvY2F0aW9u
KCksIFdURk1vdmUobGVmdEV4cHJlc3Npb24pLCBBU1Q6OkFkZHJlc3NFc2NhcGVNb2RlOjpEb2Vz
Tm90RXNjYXBlKTsKICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKEFTVDo6
UG9pbnRlclR5cGU6OmNyZWF0ZShpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAq
aW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwg
aW5uZXJMZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpOwogICAgICAgICBtYWtlUG9pbnRl
ckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIApAQCAt
NTU5LDcgKzU2NSw3IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8K
ICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsK
IAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGxlZnRWYWx1ZUxvY2F0aW9u
LCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VMZWZ0VmFsdWUoKSk7CisgICAgICAgICAg
ICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24+KGxlZnRWYWx1ZUxvY2F0aW9uLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnRha2VMZWZ0VmFsdWUoKSwgQVNUOjpBZGRyZXNzRXNjYXBlTW9kZTo6RG9lc05vdEVzY2Fw
ZSk7CiAgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclR5
cGUuY29weVJlZigpKTsKICAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFu
ZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNDgyODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRM
aWJyYXJ5KFByb2dyYW0mIHBybwogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IHN0YW5kYXJkTGlicmFyeShkZWNvbXByZXNzQW5kRGVjb2RlU3RhbmRhcmRMaWJyYXJ5KCkpOwog
ICAgIGlmIChwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkpIHsKLSAgICAgICAgYXV0byBwYXJzZVJl
c3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnkuZ2V0KCksIFBhcnNl
cjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKKyAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBh
cnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnkuZ2V0KCksIFBhcnNpbmdNb2RlOjpT
dGFuZGFyZExpYnJhcnkpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CiAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0YW5kYXJkIGxpYnJhcnk6
ICIsIExleGVyOjplcnJvclN0cmluZyhTdHJpbmdWaWV3KHN0YW5kYXJkTGlicmFyeSksIHBhcnNl
UmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvCiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBTdWJzdHJpbmdMb2NhdGlv
bj4+IHN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwKGNvbXB1dGVTdGFuZGFyZExpYnJhcnlGdW5j
dGlvbk1hcCgpKTsKIAogICAgIGF1dG8gc3RyaW5nVmlldyA9IFN0cmluZ1ZpZXcoc3RhbmRhcmRM
aWJyYXJ5LmdldCgpKS5zdWJzdHJpbmcoMCwgZmlyc3RGdW5jdGlvbk9mZnNldEluU3RhbmRhcmRM
aWJyYXJ5KCkpOwotICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwg
c3RyaW5nVmlldywgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2luZ01vZGU6
OlN0YW5kYXJkTGlicmFyeSk7CiAgICAgQVNTRVJUX1VOVVNFRChwYXJzZVJlc3VsdCwgcGFyc2VS
ZXN1bHQpOwogCiAgICAgTmFtZUZpbmRlciBuYW1lRmluZGVyOwpAQCAtMTEwLDcgKzExMCw3IEBA
IHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm8KICAgICAgICAgICAgIGlm
IChpdGVyYXRvciA9PSBzdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1hcC5nZXQoKS5lbmQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGF1dG8gc3RyaW5nVmlldyA9IFN0
cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5LmdldCgpKS5zdWJzdHJpbmcoaXRlcmF0b3ItPnZhbHVl
LnN0YXJ0LCBpdGVyYXRvci0+dmFsdWUuZW5kIC0gaXRlcmF0b3ItPnZhbHVlLnN0YXJ0KTsKLSAg
ICAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5n
VmlldywgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpOworICAgICAgICAgICAgYXV0byBw
YXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzaW5nTW9k
ZTo6U3RhbmRhcmRMaWJyYXJ5KTsKICAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKHBhcnRpYWwpIHN0
YW5kYXJkIGxpYnJhcnk6ICIsIExleGVyOjplcnJvclN0cmluZyhzdHJpbmdWaWV3LCBwYXJzZVJl
c3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAko
cmV2aXNpb24gMjQ4MjgzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVBcnJheU9wZQog
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCAmYXJyYXlUeXBl
LmdldCgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5
cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0
ciwgaXNPcGVyYXRvcikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAobG9jYXRpb24sIHByb2dyYW0uaW50cmluc2ljcygpLnVpbnRUeXBlKCkpLCAib3Bl
cmF0b3IubGVuZ3RoIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0
b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKICAgICAgICAgaWYgKCFwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IHN5bnRoZXNpemUgb3BlcmF0b3Iu
bGVuZ3RoIGZvciBhcnJheSB0eXBlLiIpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MiwxMSArMTYyLDExIEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBz
eW50aGVzaXplQ29uc3RydWMKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpR
dWFsaWZpZXJzKCksICZ1bm5hbWVkVHlwZSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwog
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0g
ICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9y
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVu
bmFtZWRUeXBlLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxs
cHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOwogICAgICAgICB9
CiAKLSAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1
Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgdW5uYW1lZFR5cGUsICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMoKSwgbnVsbHB0ciwgaXNPcGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJk
TGlicmFyeSkpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENv
bnN0cnVjdG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNv
dWxkIG5vdCBzeW50aGVzaXplIGRlZmF1bHQgY29uc3RydWN0b3IiKSk7CiAgICAgfQpAQCAtMTgy
LDcgKzE4Miw3IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplQ29uc3RydWMKICAg
ICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7Ci0gICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0
b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBuYW1l
ZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBu
dWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKGxvY2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRh
cmRMaWJyYXJ5KSk7CiAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVj
dG9yKSk7CiAKICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihzdGF0
aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG5hbWVkVHlwZSkpKSB7CkBAIC0xOTAsNyArMTkwLDcg
QEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVDb25zdHJ1YwogICAgICAgICAgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc09wYXF1ZVR5cGUoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChsb2NhdGlvbiwgbmFtZWRUeXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBuYW1lZFR5cGUu
Z2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCks
IG51bGxwdHIsIGlzT3BlcmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKICAg
ICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpKQog
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3VsZCBub3Qgc3ludGhl
c2l6ZSBkZWZhdWx0IGNvbnN0cnVjdG9yIikpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0ODI4MykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBF
eHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0CiAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7Ci0gICAgICAgICAg
ICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2so
KSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIHByb2dy
YW0uaW50cmluc2ljcygpLmJvb2xUeXBlKCkpLCAib3BlcmF0b3I9PSJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIHByb2dyYW0uaW50cmluc2lj
cygpLmJvb2xUeXBlKCkpLCAib3BlcmF0b3I9PSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBu
dWxscHRyLCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CiAgICAg
ICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fu
bm90IGNyZWF0ZSBvcGVyYXRvcj09IGZvciBlbnVtIHR5cGUuIikpOwogICAgICAgICB9CkBAIC01
Niw3ICs1Niw3IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVyYXQKICAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5n
KCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJh
dGlvbkRlZmluaXRpb24tPnR5cGUoKSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvciwgUGFyc2luZ01vZGU6OlN0
YW5kYXJkTGlicmFyeSkpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgb3BlcmF0b3IudmFsdWUgZm9yIGVudW0g
dHlwZS4iKSk7CiAgICAgICAgIH0KQEAgLTY1LDcgKzY1LDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJy
b3I+IHN5bnRoZXNpemVFbnVtZXJhdAogICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBB
U1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLCAib3BlcmF0
b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUo
KSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNP
cGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSkpOwogICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUg
Y29weSBjb25zdHJ1Y3RvciBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQpAQCAtNzQsNyAr
NzQsNyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0CiAgICAgICAg
ICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCAmZW51bWVyYXRpb25E
ZWZpbml0aW9uLT50eXBlKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiks
ICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3Bl
cmF0b3IsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKICAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgY3JlYXRlICdv
cGVyYXRvciBjYXN0JyBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCShyZXZpc2lvbiAyNDgy
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplU3RydWN0dXIKICAgICAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAg
ICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHN0cnVj
dHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVu
dC50eXBlKCkpOwotICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihzdHJ1
Y3R1cmVFbGVtZW50LmNvZGVMb2NhdGlvbigpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgbWFrZVN0cmluZygib3BlcmF0b3ImLiIsIHN0
cnVjdHVyZUVsZW1lbnQubmFtZSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNP
cGVyYXRvcikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihzdHJ1
Y3R1cmVFbGVtZW50LmNvZGVMb2NhdGlvbigpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgbWFrZVN0cmluZygib3BlcmF0b3ImLiIsIHN0
cnVjdHVyZUVsZW1lbnQubmFtZSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNP
cGVyYXRvciwgUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSkpOwogICAgICAgICAgICAgICAg
IHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOwogICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpBZGRyZXNzU3BhY2U6
OkNvbnN0YW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFkZHJlc3NFc2NhcGVNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc0VzY2FwZU1vZGUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xB
ZGRyZXNzRXNjYXBlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2VudW0g
Y2xhc3MgQWRkcmVzc0VzY2FwZU1vZGUgOiB1aW50OF90IHsKKyAgICBFc2NhcGVzLCAvLyBDb25z
ZXJ2YXRpdmVseSwgdGhpcyBhZGRyZXNzLW9mIG9wZXJhdGlvbiBtaWdodCBlc2NhcGUuCisgICAg
RG9lc05vdEVzY2FwZSAvLyBUaGlzIGFkZHJlc3Mtb2Ygb3BlcmF0aW9uIGRlZmluaXRlbHkgZG9l
cyBub3QgZXNjYXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30gLy8gbmFtZXNwYWNl
IFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
dW5jdGlvbkRlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAy
NDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
dW5jdGlvbkRlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRW50cnlQb2ludFR5
cGUuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hM
U0xQYXJzaW5nTW9kZS5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CkBAIC00NiwxMSArNDcsMTIgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBGdW5jdGlvbkRlY2xh
cmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGdW5j
dGlvbkRlY2xhcmF0aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQXR0cmlidXRlQmxvY2smJiBh
dHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBS
ZWY8VW5uYW1lZFR5cGU+IHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVjbGFyYXRpb25z
JiYgcGFyYW1ldGVycywgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFudGljLCBib29s
IGlzT3BlcmF0b3IpCisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihDb2RlTG9jYXRpb24gbG9jYXRp
b24sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRU
eXBlPiBlbnRyeVBvaW50VHlwZSwgUmVmPFVubmFtZWRUeXBlPiB0eXBlLCBTdHJpbmcmJiBuYW1l
LCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRlcnMsIHN0ZDo6dW5pcXVlX3B0cjxTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yLCBQYXJzaW5nTW9kZSBwYXJzaW5nTW9k
ZSkKICAgICAgICAgOiBtX2NvZGVMb2NhdGlvbihsb2NhdGlvbikKICAgICAgICAgLCBtX2F0dHJp
YnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2lu
dFR5cGUoZW50cnlQb2ludFR5cGUpCi0gICAgICAgICwgbV9pc09wZXJhdG9yKFdURk1vdmUoaXNP
cGVyYXRvcikpCisgICAgICAgICwgbV9pc09wZXJhdG9yKGlzT3BlcmF0b3IpCisgICAgICAgICwg
bV9wYXJzaW5nTW9kZShwYXJzaW5nTW9kZSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBl
KSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3BhcmFtZXRl
cnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKQEAgLTc5LDExICs4MSwxNCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc09wZXJhdG9yOyB9CiAgICAgY29u
c3QgQ29kZUxvY2F0aW9uJiBjb2RlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvZGVMb2Nh
dGlvbjsgfQogCisgICAgUGFyc2luZ01vZGUgcGFyc2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3BhcnNpbmdNb2RlOyB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0
aW9uOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CiAgICAgT3B0aW9uYWw8
RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7CiAgICAgYm9vbCBtX2lzT3BlcmF0b3I7
CisgICAgUGFyc2luZ01vZGUgbV9wYXJzaW5nTW9kZTsKICAgICBSZWY8VW5uYW1lZFR5cGU+IG1f
dHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1fcGFy
YW1ldGVyczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmgJKHJldmlzaW9uIDI0ODI4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2lu
Y2x1ZGUgIldITFNMQWRkcmVzc0VzY2FwZU1vZGUuaCIKICNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KQEAgLTQwLDkgKzQxLDEwIEBAIG5hbWVzcGFjZSBBU1QgewogY2xhc3MgTWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
KENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbGVmdFZhbHVl
KQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9u
LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUsIEFkZHJlc3NFc2NhcGVNb2RlIGFk
ZHJlc3NFc2NhcGVNb2RlKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCiAgICAgICAg
ICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1fYWRkcmVzc0Vz
Y2FwZU1vZGUoYWRkcmVzc0VzY2FwZU1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNTUsOCArNTcs
MTEgQEAgcHVibGljOgogCiAgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1cm4gbV9s
ZWZ0VmFsdWU7IH0KIAorICAgIGJvb2wgbWlnaHRFc2NhcGUoKSBjb25zdCB7IHJldHVybiBtX2Fk
ZHJlc3NFc2NhcGVNb2RlID09IEFkZHJlc3NFc2NhcGVNb2RlOjpFc2NhcGVzOyB9CisKIHByaXZh
dGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOworICAgIEFkZHJlc3NF
c2NhcGVNb2RlIG1fYWRkcmVzc0VzY2FwZU1vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAy
NDgyODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQWRkcmVzc0VzY2FwZU1vZGUu
aCIKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTQwLDkgKzQxLDEwIEBAIG5hbWVz
cGFjZSBBU1QgewogY2xhc3MgTWFrZVBvaW50ZXJFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Np
b24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1ha2VQb2lu
dGVyRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxlZnRWYWx1ZSkKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsZWZ0VmFsdWUsIEFkZHJlc3NFc2NhcGVN
b2RlIGFkZHJlc3NFc2NhcGVNb2RlKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCiAg
ICAgICAgICwgbV9sZWZ0VmFsdWUoV1RGTW92ZShsZWZ0VmFsdWUpKQorICAgICAgICAsIG1fYWRk
cmVzc0VzY2FwZU1vZGUoYWRkcmVzc0VzY2FwZU1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNTUs
OCArNTcsMTEgQEAgcHVibGljOgogCiAgICAgRXhwcmVzc2lvbiYgbGVmdFZhbHVlKCkgeyByZXR1
cm4gbV9sZWZ0VmFsdWU7IH0KIAorICAgIGJvb2wgbWlnaHRFc2NhcGUoKSBjb25zdCB7IHJldHVy
biBtX2FkZHJlc3NFc2NhcGVNb2RlID09IEFkZHJlc3NFc2NhcGVNb2RlOjpFc2NhcGVzOyB9CisK
IHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbGVmdFZhbHVlOworICAgIEFk
ZHJlc3NFc2NhcGVNb2RlIG1fYWRkcmVzc0VzY2FwZU1vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI0ODI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMyMCw2ICs4MzIw
LDggQEAKIAkJNTIyRTFBMTkyMjk3RDZENDAwRTVEMzZBIC8qIFdITFNMUHJlc2VydmVWYXJpYWJs
ZUxpZmV0aW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGlt
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjExQ0IyRkRGNjAwNzU5
NzREIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMjFDQjJGREY2MDA3NTk3NEQgLyog
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyOTE0QzJBMjJGOTNFNEUwMDU3ODE1MCAvKiBXSExTTFBhcnNpbmdNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyc2luZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTI5MTRDMkMyMkY5M0U1RDAwNTc4MTUwIC8qIFdITFNMQWRkcmVzc0VzY2Fw
ZU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBZGRyZXNzRXNjYXBlTW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZv
cm1WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3MDU3LDYgKzE3MDU5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8qIFdITFNMQWRkcmVzc1NwYWNlLmggKi8s
CisJCQkJNTI5MTRDMkMyMkY5M0U1RDAwNTc4MTUwIC8qIFdITFNMQWRkcmVzc0VzY2FwZU1vZGUu
aCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5j
ZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5
cGUuaCAqLywKIAkJCQlDMjFCRjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50
RXhwcmVzc2lvbi5oICovLApAQCAtMjU1MjYsNiArMjU1MjksNyBAQAogCQkJCUMyMzRBOThDMjFF
ODg4M0UwMDNDOTg0RCAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAogCQkJCUMyMUJGNzM3MjFD
RDhBMDIwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEw
MzAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmggKi8sCisJCQkJNTI5MTRDMkEyMkY5M0U0RTAwNTc4
MTUwIC8qIFdITFNMUGFyc2luZ01vZGUuaCAqLywKIAkJCQlDMjRBNTdBRjIxRkFENTNGMDA0QzZE
RDEgLyogV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCAqLywKIAkJCQlDMjRBNTdCQTIxRkVBRkVB
MDA0QzZERDEgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKIAkJCQlDMjRBNTdCQjIxRkVBRkVBMDA0
QzZERDEgLyogV0hMU0xQcmVwYXJlLmggKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>