<?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>71138</bug_id>
          
          <creation_ts>2011-10-28 13:49:06 -0700</creation_ts>
          <short_desc>Towards 8-bit Strings: Move Lexer and Parser Objects out of JSGlobalData</short_desc>
          <delta_ts>2012-02-17 14:04:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>492650</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-28 13:49:06 -0700</bug_when>
    <thetext>Currently JSGlobalData has Lexer and Parser objects that are used for JavaScript parsing.  These &quot;singletons&quot; are reset and reused for each parse task. As part of the overall 8-bit string changes, the Lexer (and therefore Parser) will be templatized on the character storage size and therefore need to be restructured.  Since parsing if a localized task (primarily in JavaScriptCore/runtime/Executable.cpp) it makes sense to create, use and destroy parser objects as needed.

&lt;rdar://problem/10225268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492668</commentid>
    <comment_count>1</comment_count>
      <attachid>112908</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-28 14:10:29 -0700</bug_when>
    <thetext>Created attachment 112908
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492687</commentid>
    <comment_count>2</comment_count>
      <attachid>112908</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-28 14:41:42 -0700</bug_when>
    <thetext>Comment on attachment 112908
Proposed patch

Attachment 112908 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10237347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492711</commentid>
    <comment_count>3</comment_count>
      <attachid>112908</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-28 15:10:49 -0700</bug_when>
    <thetext>Comment on attachment 112908
Proposed patch

Attachment 112908 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10236399</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492715</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-28 15:20:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 112908 [details])
&gt; Attachment 112908 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/10236399

Yeah, I forgot to remove JSParser.{cpp,h} from all build files.  This looks like the source of the qt, gtk, win and likely efl build issues.

I&apos;ll provide an updated patch with speculative changes for these platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492721</commentid>
    <comment_count>5</comment_count>
      <attachid>112908</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-28 15:28:05 -0700</bug_when>
    <thetext>Comment on attachment 112908
Proposed patch

Attachment 112908 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10236406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492754</commentid>
    <comment_count>6</comment_count>
      <attachid>112935</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-28 16:05:21 -0700</bug_when>
    <thetext>Created attachment 112935
Updated patch with speculative build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492812</commentid>
    <comment_count>7</comment_count>
      <attachid>112935</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-28 17:13:07 -0700</bug_when>
    <thetext>Comment on attachment 112935
Updated patch with speculative build fixes

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

The thing I don’t like here is that some day we might want the source code location information to be more precise than just a line number. If we do, the we have to go back again and change all these call sites to pass something other than a line number. Is there some way we can avoid being so explicit about the line number? Any reason not to use something in global data instead of passing the arguments? Or could we at least pass a struct that has a line number in it instead of just passing the int?

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:146
&gt; +    ExpressionNode* makeAssignNode(int, ExpressionNode* left, Operator, ExpressionNode* right, bool leftHasAssignments, bool rightHasAssignments, int start, int divot, int end);
&gt; +    ExpressionNode* makePrefixNode(int, ExpressionNode*, Operator, int start, int divot, int end);
&gt; +    ExpressionNode* makePostfixNode(int, ExpressionNode*, Operator, int start, int divot, int end);
&gt; +    ExpressionNode* makeTypeOfNode(int, ExpressionNode*);
&gt; +    ExpressionNode* makeDeleteNode(int , ExpressionNode*, int start, int divot, int end);
&gt; +    ExpressionNode* makeNegateNode(int, ExpressionNode*);
&gt; +    ExpressionNode* makeBitwiseNotNode(int, ExpressionNode*);
&gt; +    ExpressionNode* makeMultNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeDivNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeModNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeAddNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeSubNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeBitXOrNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeBitAndNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeBitOrNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeLeftShiftNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeRightShiftNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; +    ExpressionNode* makeURightShiftNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);

These should all say lineNumber. It’s not at all obvious that the integer is a line number. Also, there is an extra space on the makeDeleteNode line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492823</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-28 17:28:33 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 112935 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112935&amp;action=review
&gt; 
&gt; The thing I don’t like here is that some day we might want the source code location information to be more precise than just a line number. If we do, the we have to go back again and change all these call sites to pass something other than a line number. Is there some way we can avoid being so explicit about the line number? Any reason not to use something in global data instead of passing the arguments? Or could we at least pass a struct that has a line number in it instead of just passing the int?

I agree that it may make sense to have greater context, e.g. line number and position or column number, but I don&apos;t want to complicate the code for a possible future enhancement. I also think it would be safer not to use JSGlobalData as the source of that context.  This patch moves the source of the line number, the Lexer object, out of the JSGlobalData. Those two reasons suggest to me that we replace the lineNumber parameter with a context object at some future date.

&gt; &gt; Source/JavaScriptCore/parser/ASTBuilder.h:146
&gt; &gt; +    ExpressionNode* makeAssignNode(int, ExpressionNode* left, Operator, ExpressionNode* right, bool leftHasAssignments, bool rightHasAssignments, int start, int divot, int end);
&gt; &gt; +    ExpressionNode* makePrefixNode(int, ExpressionNode*, Operator, int start, int divot, int end);
&gt; &gt; +    ExpressionNode* makePostfixNode(int, ExpressionNode*, Operator, int start, int divot, int end);
&gt; &gt; +    ExpressionNode* makeTypeOfNode(int, ExpressionNode*);
&gt; &gt; +    ExpressionNode* makeDeleteNode(int , ExpressionNode*, int start, int divot, int end);
...
&gt; &gt; +    ExpressionNode* makeURightShiftNode(int, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
&gt; 
&gt; These should all say lineNumber. It’s not at all obvious that the integer is a line number. Also, there is an extra space on the makeDeleteNode line.

I added &quot;lineNumber&quot; to those methods as well as eliminated the extraneous space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493523</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-31 15:13:15 -0700</bug_when>
    <thetext>Committed r98887: &lt;http://trac.webkit.org/changeset/98887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559524</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-02-17 14:04:44 -0800</bug_when>
    <thetext>The patch missed the definition of VectorTraits&lt;JSParser::Scope&gt;, which caused problem. See Bug 78932.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112908</attachid>
            <date>2011-10-28 14:10:29 -0700</date>
            <delta_ts>2011-10-28 16:05:21 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>71138.patch</filename>
            <type>text/plain</type>
            <size>451824</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTg3NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDY5IEBA
CisyMDExLTEwLTI4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOC1iaXQgU3RyaW5nczogTW92ZSBMZXhlciBhbmQgUGFyc2VyIE9iamVjdHMg
b3V0IG9mIEpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzExMzgKKworICAgICAgICBSZXN0cnVjdHVyZSBhbmQgbW92ZW1lbnQgb2Yg
TGV4ZXIgYW5kIFBhcnNlciBjb2RlLgorICAgICAgICBNb3ZlZCBMZXhlciBhbmQgUGFyc2VyIG9i
amVjdHMgb3V0IG9mIEpTR2xvYmFsRGF0YS4KKyAgICAgICAgQWRkZWQgYSBuZXcgUGFyc2VyVG9r
ZW5zIGNsYXNzIGFuZCBpbnN0YW5jZSB0byBKU0dsb2JhbERhdGEgdGhhdAorICAgICAgICBoYXZl
IEphdmFTY3JpcHQgdG9rZW4gcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAgICAgICAgUmVwbGFjZWQg
SlNHbG9iYWxEYXRhIGFyZ3VtZW50cyB0byBOb2RlIGNsYXNzZXMgd2l0aCBsaW5lTnVtYmVyLAor
ICAgICAgICBhcyB0aGF0IHdhcyB0aGUgb25seSB1c2Ugb2YgdGhlIEpTR2xvYmFsRGF0YS4KKyAg
ICAgICAgQ29tYmluZWQgSlNQYXJzZXIgYW5kIFBhcnNlciBjbGFzc2VzIGludG8gb25lIGNsYXNz
LAorICAgICAgICBlbGltaW5hdGluZyBKU1BhcnNlci5oIGFuZCAuY3BwLgorICAgICAgICBWYXJp
b3VzIHN1cHBvcnRpbmcgI2luY2x1ZGUgY2hhbmdlcy4KKworICAgICAgICBUaGVzZSBtb3N0bHkg
bWVjaGFuaWNhbCBjaGFuZ2VzIGFyZSBkb25lIGluIHByZXBhcmF0aW9uIHRvCisgICAgICAgIG1h
a2luZyB0aGUgTGV4ZXIgYW5kIFBhcnNlciB0ZW1wbGF0ZSBjbGFzc2VzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlOb2RlOjp0b0FyZ3VtZW50TGlzdCk6CisgICAg
ICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RC
dWlsZGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU291cmNlRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Vm9pZCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnRoaXNFeHByKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVB
cnJheSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJlckV4cHIpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
TnVsbCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29uZGl0aW9u
YWxFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uRXhwcik6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OkFT
VEJ1aWxkZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVBcmd1bWVudHNMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUHJv
cGVydHlMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRWxlbWVudExpc3Qp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ2xhdXNlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQ2xhdXNlTGlzdCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlQmxvY2tTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHBy
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlSWZTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGb3JMb29wKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlRW1wdHlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVWYXJTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmVha1N0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU3dpdGNoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVEb1doaWxlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVX
aXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVGhyb3dTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEZWJ1Z2dlcik6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUNvbnN0U3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6YXBwZW5kQ29uc3REZWNsKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y29tYmluZUNvbW1hTm9kZXMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRC
aW5hcnlPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVBc3NpZ25t
ZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VG
dW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5v
ZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvSlNQYXJzZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBhcnNlci9KU1BhcnNlci5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OktleXdvcmRzOjpLZXl3b3Jkcyk6Cisg
ICAgICAgIChKU0M6OkxleGVyOjpMZXhlcik6CisgICAgICAgIChKU0M6OkxleGVyOjp+TGV4ZXIp
OgorICAgICAgICAoSlNDOjpMZXhlcjo6c2V0Q29kZSk6CisgICAgICAgIChKU0M6OkxleGVyOjpw
YXJzZUlkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5oOgorICAgICAgICAoSlND
OjpLZXl3b3Jkczo6aXNLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6S2V5d29yZHM6OmdldEtleXdv
cmQpOgorICAgICAgICAoSlNDOjpLZXl3b3Jkczo6fktleXdvcmRzKToKKyAgICAgICAgKEpTQzo6
TGV4ZXI6OnNldElzUmVwYXJzaW5nKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmlzUmVwYXJzaW5n
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpMZXhl
cjo6c2V0TGFzdExpbmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpMZXhlcjo6bGFzdExpbmVOdW1i
ZXIpOgorICAgICAgICAoSlNDOjpMZXhlcjo6cHJldlRlcm1pbmF0b3IpOgorICAgICAgICAoSlND
OjpMZXhlcjo6c2F3RXJyb3IpOgorICAgICAgICAoSlNDOjpMZXhlcjo6Z2V0RXJyb3JNZXNzYWdl
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmN1cnJlbnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpM
ZXhlcjo6c2V0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldExpbmVOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpMZXhlcjo6c291cmNlUHJvdmlkZXIpOgorICAgICAgICAoSlNDOjpMZXhl
cjo6aXNXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmlzTGluZVRlcm1pbmF0b3Ip
OgorICAgICAgICAoSlNDOjpMZXhlcjo6Y29udmVydEhleCk6CisgICAgICAgIChKU0M6OkxleGVy
Ojpjb252ZXJ0VW5pY29kZSk6CisgICAgICAgIChKU0M6OkxleGVyOjptYWtlSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OkxleGVyOjpsZXhFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKiBw
YXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYUZyZWVh
YmxlOjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYURlbGV0YWJsZTo6
b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJz
ZXJBcmVuYVJlZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpOb2RlOjpOb2RlKToKKyAgICAgICAg
KEpTQzo6RXhwcmVzc2lvbk5vZGU6OkV4cHJlc3Npb25Ob2RlKToKKyAgICAgICAgKEpTQzo6U3Rh
dGVtZW50Tm9kZTo6U3RhdGVtZW50Tm9kZSk6CisgICAgICAgIChKU0M6Ok51bGxOb2RlOjpOdWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OkJvb2xlYW5Ob2RlOjpCb29sZWFuTm9kZSk6CisgICAgICAg
IChKU0M6Ok51bWJlck5vZGU6Ok51bWJlck5vZGUpOgorICAgICAgICAoSlNDOjpTdHJpbmdOb2Rl
OjpTdHJpbmdOb2RlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6UmVnRXhwTm9kZSk6Cisg
ICAgICAgIChKU0M6OlRoaXNOb2RlOjpUaGlzTm9kZSk6CisgICAgICAgIChKU0M6OlJlc29sdmVO
b2RlOjpSZXNvbHZlTm9kZSk6CisgICAgICAgIChKU0M6OkVsZW1lbnROb2RlOjpFbGVtZW50Tm9k
ZSk6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6QXJyYXlOb2RlKToKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3RO
b2RlOjpQcm9wZXJ0eUxpc3ROb2RlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0TGl0ZXJhbE5vZGU6
Ok9iamVjdExpdGVyYWxOb2RlKToKKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6
QnJhY2tldEFjY2Vzc29yTm9kZSk6CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6RG90
QWNjZXNzb3JOb2RlKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRMaXN0Tm9kZTo6QXJndW1lbnRM
aXN0Tm9kZSk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50c05vZGU6OkFyZ3VtZW50c05vZGUpOgor
ICAgICAgICAoSlNDOjpOZXdFeHByTm9kZTo6TmV3RXhwck5vZGUpOgorICAgICAgICAoSlNDOjpF
dmFsRnVuY3Rpb25DYWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2Fs
bERvdE5vZGUpOgorICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1
bmN0aW9uQ2FsbERvdE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlByZVBvc3RSZXNv
bHZlTm9kZTo6UHJlUG9zdFJlc29sdmVOb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeFJlc29s
dmVOb2RlOjpQb3N0Zml4UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpQb3N0Zml4QnJhY2tl
dE5vZGU6OlBvc3RmaXhCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhEb3ROb2Rl
OjpQb3N0Zml4RG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhFcnJvck5vZGU6OlBvc3Rm
aXhFcnJvck5vZGUpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6RGVsZXRlUmVz
b2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpEZWxldGVCcmFja2V0Tm9kZTo6RGVsZXRlQnJhY2tl
dE5vZGUpOgorICAgICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjpEZWxldGVEb3ROb2RlKToKKyAg
ICAgICAgKEpTQzo6RGVsZXRlVmFsdWVOb2RlOjpEZWxldGVWYWx1ZU5vZGUpOgorICAgICAgICAo
SlNDOjpWb2lkTm9kZTo6Vm9pZE5vZGUpOgorICAgICAgICAoSlNDOjpUeXBlT2ZSZXNvbHZlTm9k
ZTo6VHlwZU9mUmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpUeXBlT2ZWYWx1ZU5vZGU6OlR5
cGVPZlZhbHVlTm9kZSk6CisgICAgICAgIChKU0M6OlByZWZpeFJlc29sdmVOb2RlOjpQcmVmaXhS
ZXNvbHZlTm9kZSk6CisgICAgICAgIChKU0M6OlByZWZpeEJyYWNrZXROb2RlOjpQcmVmaXhCcmFj
a2V0Tm9kZSk6CisgICAgICAgIChKU0M6OlByZWZpeERvdE5vZGU6OlByZWZpeERvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpQcmVmaXhFcnJvck5vZGU6OlByZWZpeEVycm9yTm9kZSk6CisgICAgICAg
IChKU0M6OlVuYXJ5T3BOb2RlOjpVbmFyeU9wTm9kZSk6CisgICAgICAgIChKU0M6OlVuYXJ5UGx1
c05vZGU6OlVuYXJ5UGx1c05vZGUpOgorICAgICAgICAoSlNDOjpOZWdhdGVOb2RlOjpOZWdhdGVO
b2RlKToKKyAgICAgICAgKEpTQzo6Qml0d2lzZU5vdE5vZGU6OkJpdHdpc2VOb3ROb2RlKToKKyAg
ICAgICAgKEpTQzo6TG9naWNhbE5vdE5vZGU6OkxvZ2ljYWxOb3ROb2RlKToKKyAgICAgICAgKEpT
Qzo6QmluYXJ5T3BOb2RlOjpCaW5hcnlPcE5vZGUpOgorICAgICAgICAoSlNDOjpNdWx0Tm9kZTo6
TXVsdE5vZGUpOgorICAgICAgICAoSlNDOjpEaXZOb2RlOjpEaXZOb2RlKToKKyAgICAgICAgKEpT
Qzo6TW9kTm9kZTo6TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFkZE5vZGU6OkFkZE5vZGUpOgor
ICAgICAgICAoSlNDOjpTdWJOb2RlOjpTdWJOb2RlKToKKyAgICAgICAgKEpTQzo6TGVmdFNoaWZ0
Tm9kZTo6TGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OlJpZ2h0U2hpZnROb2RlOjpSaWdo
dFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OlVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OlVuc2ln
bmVkUmlnaHRTaGlmdE5vZGUpOgorICAgICAgICAoSlNDOjpMZXNzTm9kZTo6TGVzc05vZGUpOgor
ICAgICAgICAoSlNDOjpHcmVhdGVyTm9kZTo6R3JlYXRlck5vZGUpOgorICAgICAgICAoSlNDOjpM
ZXNzRXFOb2RlOjpMZXNzRXFOb2RlKToKKyAgICAgICAgKEpTQzo6R3JlYXRlckVxTm9kZTo6R3Jl
YXRlckVxTm9kZSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUJpbmFyeU9wTm9kZTo6VGhyb3dh
YmxlQmluYXJ5T3BOb2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6Okluc3RhbmNl
T2ZOb2RlKToKKyAgICAgICAgKEpTQzo6SW5Ob2RlOjpJbk5vZGUpOgorICAgICAgICAoSlNDOjpF
cXVhbE5vZGU6OkVxdWFsTm9kZSk6CisgICAgICAgIChKU0M6Ok5vdEVxdWFsTm9kZTo6Tm90RXF1
YWxOb2RlKToKKyAgICAgICAgKEpTQzo6U3RyaWN0RXF1YWxOb2RlOjpTdHJpY3RFcXVhbE5vZGUp
OgorICAgICAgICAoSlNDOjpOb3RTdHJpY3RFcXVhbE5vZGU6Ok5vdFN0cmljdEVxdWFsTm9kZSk6
CisgICAgICAgIChKU0M6OkJpdEFuZE5vZGU6OkJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpC
aXRPck5vZGU6OkJpdE9yTm9kZSk6CisgICAgICAgIChKU0M6OkJpdFhPck5vZGU6OkJpdFhPck5v
ZGUpOgorICAgICAgICAoSlNDOjpMb2dpY2FsT3BOb2RlOjpMb2dpY2FsT3BOb2RlKToKKyAgICAg
ICAgKEpTQzo6Q29uZGl0aW9uYWxOb2RlOjpDb25kaXRpb25hbE5vZGUpOgorICAgICAgICAoSlND
OjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZSk6CisgICAgICAg
IChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjpBc3NpZ25SZXNvbHZlTm9kZSk6CisgICAgICAgIChK
U0M6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6UmVhZE1vZGlmeUJyYWNrZXROb2RlKToKKyAgICAg
ICAgKEpTQzo6QXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJyYWNrZXROb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlJlYWRN
b2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkVy
cm9yTm9kZTo6QXNzaWduRXJyb3JOb2RlKToKKyAgICAgICAgKEpTQzo6Q29tbWFOb2RlOjpDb21t
YU5vZGUpOgorICAgICAgICAoSlNDOjpDb25zdFN0YXRlbWVudE5vZGU6OkNvbnN0U3RhdGVtZW50
Tm9kZSk6CisgICAgICAgIChKU0M6OlNvdXJjZUVsZW1lbnRzOjpTb3VyY2VFbGVtZW50cyk6Cisg
ICAgICAgIChKU0M6OkVtcHR5U3RhdGVtZW50Tm9kZTo6RW1wdHlTdGF0ZW1lbnROb2RlKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJTdGF0ZW1lbnROb2RlOjpEZWJ1Z2dlclN0YXRlbWVudE5vZGUp
OgorICAgICAgICAoSlNDOjpFeHByU3RhdGVtZW50Tm9kZTo6RXhwclN0YXRlbWVudE5vZGUpOgor
ICAgICAgICAoSlNDOjpWYXJTdGF0ZW1lbnROb2RlOjpWYXJTdGF0ZW1lbnROb2RlKToKKyAgICAg
ICAgKEpTQzo6SWZOb2RlOjpJZk5vZGUpOgorICAgICAgICAoSlNDOjpJZkVsc2VOb2RlOjpJZkVs
c2VOb2RlKToKKyAgICAgICAgKEpTQzo6RG9XaGlsZU5vZGU6OkRvV2hpbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6V2hpbGVOb2RlOjpXaGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2RlOjpG
b3JOb2RlKToKKyAgICAgICAgKEpTQzo6Q29udGludWVOb2RlOjpDb250aW51ZU5vZGUpOgorICAg
ICAgICAoSlNDOjpCcmVha05vZGU6OkJyZWFrTm9kZSk6CisgICAgICAgIChKU0M6OlJldHVybk5v
ZGU6OlJldHVybk5vZGUpOgorICAgICAgICAoSlNDOjpXaXRoTm9kZTo6V2l0aE5vZGUpOgorICAg
ICAgICAoSlNDOjpMYWJlbE5vZGU6OkxhYmVsTm9kZSk6CisgICAgICAgIChKU0M6OlRocm93Tm9k
ZTo6VGhyb3dOb2RlKToKKyAgICAgICAgKEpTQzo6VHJ5Tm9kZTo6VHJ5Tm9kZSk6CisgICAgICAg
IChKU0M6OlBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5vZGUpOgorICAgICAgICAoSlNDOjpGdW5j
RXhwck5vZGU6OkZ1bmNFeHByTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmNEZWNsTm9kZTo6RnVu
Y0RlY2xOb2RlKToKKyAgICAgICAgKEpTQzo6Q2FzZUNsYXVzZU5vZGU6OkNhc2VDbGF1c2VOb2Rl
KToKKyAgICAgICAgKEpTQzo6Q2xhdXNlTGlzdE5vZGU6OkNsYXVzZUxpc3ROb2RlKToKKyAgICAg
ICAgKEpTQzo6Q2FzZUJsb2NrTm9kZTo6Q2FzZUJsb2NrTm9kZSk6CisgICAgICAgIChKU0M6OlN3
aXRjaE5vZGU6OlN3aXRjaE5vZGUpOgorICAgICAgICAoSlNDOjpDb25zdERlY2xOb2RlOjpDb25z
dERlY2xOb2RlKToKKyAgICAgICAgKEpTQzo6QmxvY2tOb2RlOjpCbG9ja05vZGUpOgorICAgICAg
ICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVJbmZv
Lmg6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhdGVtZW50
Tm9kZTo6c2V0TG9jKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpTY29wZU5vZGUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9n
cmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OkV2YWxOb2RlKToKKyAg
ICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9k
eU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2Rl
OjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpOb2Rl
OjpsaW5lTm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OlBhcnNlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6flBhcnNlcik6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6YWxsb3dB
dXRvbWF0aWNTZW1pY29sb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlU291cmNlRWxl
bWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlVmFyRGVjbGFyYXRpb24pOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlQ29uc3REZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6cGFyc2VEb1doaWxlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpw
YXJzZVdoaWxlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVZhckRlY2xh
cmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9u
TGlzdCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OnBhcnNlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNl
UmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVRocm93U3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpwYXJzZVN3aXRjaENsYXVzZXMpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlU3dp
dGNoRGVmYXVsdENsYXVzZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VUcnlTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlQmxvY2tTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnBhcnNlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUZvcm1h
bFBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRnVuY3Rpb25Cb2R5KToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6TGFiZWxJ
bmZvOjpMYWJlbEluZm8pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbk9y
TGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRXhwcmVzc2lvblN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJz
ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OmlzVW5hcnlPcCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6aXNCaW5hcnlPcGVyYXRvcik6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU9iamVjdExpdGVyYWwpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChK
U0M6OlBhcnNlcjo6cGFyc2VBcnJheUxpdGVyYWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBh
cnNlUHJpbWFyeUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlVW5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OmlzRXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpF
dmFsTm9kZSk6CisgICAgICAgIChKU0M6OkRlcHRoTWFuYWdlcjo6RGVwdGhNYW5hZ2VyKToKKyAg
ICAgICAgKEpTQzo6RGVwdGhNYW5hZ2VyOjp+RGVwdGhNYW5hZ2VyKToKKyAgICAgICAgKEpTQzo6
U2NvcGVMYWJlbEluZm86OlNjb3BlTGFiZWxJbmZvKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNj
b3BlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnN0YXJ0U3dpdGNoKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmVuZFN3aXRjaCk6CisgICAgICAgIChKU0M6OlNjb3BlOjpzdGFydExvb3ApOgorICAg
ICAgICAoSlNDOjpTY29wZTo6ZW5kTG9vcCk6CisgICAgICAgIChKU0M6OlNjb3BlOjppbkxvb3Ap
OgorICAgICAgICAoSlNDOjpTY29wZTo6YnJlYWtJc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OmNvbnRpbnVlSXNWYWxpZCk6CisgICAgICAgIChKU0M6OlNjb3BlOjpwdXNoTGFiZWwpOgor
ICAgICAgICAoSlNDOjpTY29wZTo6cG9wTGFiZWwpOgorICAgICAgICAoSlNDOjpTY29wZTo6Z2V0
TGFiZWwpOgorICAgICAgICAoSlNDOjpTY29wZTo6c2V0SXNGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OlNjb3BlOjppc0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmlzRnVuY3Rpb25C
b3VuZGFyeSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlVmFyaWFibGUpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnByZXZl
bnROZXdEZWNscyk6CisgICAgICAgIChKU0M6OlNjb3BlOjphbGxvd3NOZXdEZWNscyk6CisgICAg
ICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlUGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6U2NvcGU6
OnVzZVZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldE5lZWRzRnVsbEFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6Z2V0VW5jYXB0dXJlZFdyaXR0ZW5WYXJpYWJsZXMpOgorICAgICAgICAo
SlNDOjpTY29wZTo6Z2V0Q2FwdHVyZWRWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpTY29wZTo6
c2V0U3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpzdHJpY3RNb2RlKToKKyAgICAg
ICAgKEpTQzo6U2NvcGU6OmlzVmFsaWRTdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6
OnNoYWRvd3NBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29weUNhcHR1cmVkVmFy
aWFibGVzVG9WZWN0b3IpOgorICAgICAgICAoSlNDOjpTY29wZTo6c2F2ZUZ1bmN0aW9uSW5mbyk6
CisgICAgICAgIChKU0M6OlNjb3BlOjpyZXN0b3JlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpT
Qzo6U2NvcGVSZWY6OlNjb3BlUmVmKToKKyAgICAgICAgKEpTQzo6U2NvcGVSZWY6Om9wZXJhdG9y
LT4pOgorICAgICAgICAoSlNDOjpTY29wZVJlZjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpTY29w
ZVJlZjo6aGFzQ29udGFpbmluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6U2NvcGVSZWY6OmNvbnRh
aW5pbmdTY29wZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6QWxsb3dJbk92ZXJyaWRlOjpBbGxv
d0luT3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OkFsbG93SW5PdmVycmlkZTo6fkFs
bG93SW5PdmVycmlkZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6QXV0b1BvcFNjb3BlUmVmOjpB
dXRvUG9wU2NvcGVSZWYpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OkF1dG9Qb3BTY29wZVJlZjo6
fkF1dG9Qb3BTY29wZVJlZik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6QXV0b1BvcFNjb3BlUmVm
OjpzZXRQb3BwZWQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmN1cnJlbnRTY29wZSk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BT
Y29wZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BTY29wZSk6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6ZGVjbGFyZVZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpk
ZWNsYXJlV3JpdGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmZpbmRDYWNoZWRGdW5jdGlvbklu
Zm8pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmlzRnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6bmV4dCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6bmV4dEV4cGVjdElk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHRUb2tlbklzQ29sb24pOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OmNvbnN1bWUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmdldFRv
a2VuKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjptYXRjaCk6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6dG9rZW5TdGFydCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5MaW5lKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjp0b2tlbkVuZCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6Z2V0VG9r
ZW5OYW1lKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp1cGRhdGVFcnJvck1lc3NhZ2VTcGVjaWFs
Q2FzZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dXBkYXRlRXJyb3JNZXNzYWdlKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjp1cGRhdGVFcnJvcldpdGhOYW1lQW5kTWVzc2FnZSk6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6c3RhcnRMb29wKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjplbmRMb29w
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpzdGFydFN3aXRjaCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6ZW5kU3dpdGNoKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpzZXRTdHJpY3RNb2RlKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpzdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
Ojppc1ZhbGlkU3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFyZVBhcmFt
ZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6YnJlYWtJc1ZhbGlkKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpjb250aW51ZUlzVmFsaWQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hM
YWJlbCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cG9wTGFiZWwpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OmdldExhYmVsKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjphdXRvU2VtaUNvbG9uKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpsYXN0VG9rZW5FbmQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OkRlcHRoTWFuYWdlcjo6RGVw
dGhNYW5hZ2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpEZXB0aE1hbmFnZXI6On5EZXB0aE1h
bmFnZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6cGFy
c2UpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJUb2tlbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTVG9rZW5JbmZvOjpKU1Rva2VuSW5mbyk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNv
ZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lvbik6CisgICAgICAg
ICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmg6CisgICAgICAgICogcGFyc2VyL1N5
bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6U3ludGF4Q2hlY2tl
cik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToK
KyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQ29tbWFFeHByKToKKyAgICAgICAg
KEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50
YXhDaGVja2VyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VUeXBl
T2ZOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZURlbGV0ZU5vZGUpOgor
ICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlTmVnYXRlTm9kZSk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6Om1ha2VCaXR3aXNlTm90Tm9kZSk6CisgICAgICAgIChKU0M6OlN5
bnRheENoZWNrZXI6OmNyZWF0ZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpjcmVhdGVVbmFyeVBsdXMpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVh
dGVWb2lkKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6dGhpc0V4cHIpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6Y3JlYXRlT2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRl
TnVtYmVyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVN0cmluZyk6
CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJvb2xlYW4pOgorICAgICAgICAo
SlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hl
Y2tlcjo6Y3JlYXRlQnJhY2tldEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZURvdEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVJl
Z0V4cCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZU5ld0V4cHIpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVDb25kaXRpb25hbEV4cHIpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVBc3NpZ25SZXNvbHZlKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25FeHByKToKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hl
Y2tlcjo6Y3JlYXRlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlQXJndW1lbnRzTGlzdCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUHJvcGVydHlMaXN0
KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVCbG9ja1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVJZlN0YXRlbWVudCk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckxvb3ApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVh
dGVFbXB0eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVZh
clN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVJldHVyblN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVdpdGhTdGF0ZW1lbnQpOgorICAgICAgICAoSlND
OjpTeW50YXhDaGVja2VyOjpjcmVhdGVEb1doaWxlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50
YXhDaGVja2VyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjphcHBlbmRD
b25zdERlY2wpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVHZXR0ZXJPclNl
dHRlclByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y29tYmluZUNvbW1h
Tm9kZXMpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpvcGVyYXRvclN0YWNrUG9wKToK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFi
bGU6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNv
ZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2Jh
bENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERh
dGE6On5KU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6Cisg
ICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJh
bFBhcnNlcjo6dHJ5SlNPTlBQYXJzZSk6CisKIDIwMTEtMTAtMjggIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZS12aXJ0dWFsaXplIGlzR2xvYmFs
T2JqZWN0LCBpc1ZhcmlhYmxlT2JqZWN0LCBpc0FjdGl2YXRpb25PYmplY3QsIGFuZCBpc0Vycm9y
SW5zdGFuY2UgaW4gSlNPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDcg
QEAKIAkJNjUxMTIyRkUxNDA0NkE0QzAwMkIxMDFEIC8qIGxpYmVkaXQuZHlsaWIgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDVEOEFEMDBFMEQwRUJF
MDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLzsgfTsKIAkJNjUxMTIzMDcxNDA0NkIwQTAwMkIx
MDFEIC8qIHRlc3RSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3BwICov
OyB9OwogCQk2NTFEQ0EwNDEzNkE2RkVGMDBGNzQxOTQgLyogUGFzc1RyYWl0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxRENBMDIxMzZBNkZBQjAw
Rjc0MTk0IC8qIFBhc3NUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTMwM0Q2
MzE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggKi87IH07CiAJCTY1NUVCMjlCMTBD
RTI1ODEwMDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1RUIyOUExMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVz
Q29kZWdlbi5jcHAgKi87IH07CiAJCTY1REZDOTMzMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVE
RkM5MkQwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgKi87IH07CiAJCTY1RTFBM0RG
MTIyQjg5NDUwMEIyNjA5NyAvKiBOb25Db3B5aW5nU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMUEyRjQxMjJCODgwRDAwQjI2MDk3IC8qIE5v
bkNvcHlpbmdTb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTQ1Myw4ICs0NTQsNiBAQAogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyog
SklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87
IH07CiAJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4MUUzNTgxNDE5NzBD
NzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07Ci0JCUE3ODRBMjYy
MTFEMTY2MjIwMDU3NzZBQyAvKiBKU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NTExQjk4QjhEMDA2NUExNEYgLyogSlNQYXJz
ZXIuY3BwICovOyB9OwotCQlBNzg0QTI2MzExRDE2NjIyMDA1Nzc2QUMgLyogSlNQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc2MTFC
OThCOEQwMDY1QTE0RiAvKiBKU1BhcnNlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1
Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIu
aCAqLzsgfTsKIAkJQTc5MUVGMjgwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzkxRUYyNjBGMTFF
MDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzkxRUYyOTBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRl
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc5MUVGMjcwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmNwcCAqLzsgfTsKQEAgLTEw
MDUsNiArMTAwNCw3IEBACiAJCTY1MUY2NDEyMDM5RDVCNUYwMDc4Mzk1QyAvKiBkdG9hLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGR0
b2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTY1MUY2
NDEzMDM5RDVCNUYwMDc4Mzk1QyAvKiBkdG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR0b2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB9OwogCQk2NTIyNDZBNDBDOEQ3QTBFMDA3QkRBRjcgLyogSGFzaEl0ZXJh
dG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoSXRlcmF0b3JzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1MzAzRDYzMTQ0N0I5RTEwMEQzRjkwNCAv
KiBQYXJzZXJUb2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
VG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDAwQzBGMEE2OUJBRjIw
MDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHJvcGVydHlOYW1lQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTQwMEMxMDBBNjlCQUYyMDA1MDk4ODcgLyogUHJvcGVydHlOYW1lQXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5TmFtZUFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAv
KiBUQ1BhZ2VNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVENQYWdlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKQEAgLTEyNjAsOCArMTI2MCw2IEBACiAJCUE3QTFGN0FBMEYyNTJCM0MwMEUxODRFMiAv
KiBCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBMUY3QUIwRjI1MkIz
QzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5
OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E3RUU3
NTExQjk4QjhEMDA2NUExNEYgLyogSlNQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBN0E3RUU3NjExQjk4QjhEMDA2NUExNEYgLyogSlNQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4REI2MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjAxNyw5ICsyMDE1LDggQEAKIAkJN0UzOUQ4MzcwRUMzQTM4ODAwM0FGMTFB
IC8qIHBhcnNlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNjUzMDNENjMxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oICovLAogCQkJCUE3
QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8sCi0JCQkJQTdBN0VFNzUx
MUI5OEI4RDAwNjVBMTRGIC8qIEpTUGFyc2VyLmNwcCAqLywKLQkJCQlBN0E3RUU3NjExQjk4QjhE
MDA2NUExNEYgLyogSlNQYXJzZXIuaCAqLywKIAkJCQk5M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMg
LyogS2V5d29yZHMudGFibGUgKi8sCiAJCQkJRjY5MkE4NjUwMjU1NTk3RDAxRkY2MEY3IC8qIExl
eGVyLmNwcCAqLywKIAkJCQlGNjkyQTg2NjAyNTU1OTdEMDFGRjYwRjcgLyogTGV4ZXIuaCAqLywK
QEAgLTI2NDQsNyArMjY0MSw2IEBACiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2OTU3IC8qIEpT
T2JqZWN0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdGOTkzNUYwRkQ3MzI1MTAw
QTBCMkQwIC8qIEpTT05PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODdDREI5MTA3MTJB
RDQwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4NEEy
NjMxMUQxNjYyMjAwNTc3NkFDIC8qIEpTUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NTM0
QUFGQjBFNUI3QTk2MDBCOEE0NUIgLyogSlNQcm9maWxlclByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0ci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI4ODUsNiArMjg4MSw3IEBACiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc4MTQz
RkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0zMzAxLDcgKzMyOTgsNiBAQAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAv
KiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdD
RkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1
MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTc4NEEyNjIx
MUQxNjYyMjAwNTc3NkFDIC8qIEpTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZF
Njk1MEU1QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZEMTEwN0VDMjY3MDA1REJDOEQgLyogSlNT
dGF0aWNTY29wZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDk4NzMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTggKzIwMCwxOCBAQCBib29sIEFycmF5Tm9k
ZTo6aXNTaW1wbGVBcnJheSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFyZ3VtZW50
TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKSBjb25zdAorQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3VtZW50TGlzdChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyKSBjb25zdAogewogICAgIEFT
U0VSVCghbV9lbGlzaW9uICYmICFtX29wdGlvbmFsKTsKICAgICBFbGVtZW50Tm9kZSogcHRyID0g
bV9lbGVtZW50OwogICAgIGlmICghcHRyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBBcmd1bWVu
dExpc3ROb2RlKiBoZWFkID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGdsb2Jh
bERhdGEsIHB0ci0+dmFsdWUoKSk7CisgICAgQXJndW1lbnRMaXN0Tm9kZSogaGVhZCA9IG5ldyAo
Z2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShsaW5lTnVtYmVyLCBwdHItPnZhbHVlKCkpOwog
ICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRhaWwgPSBoZWFkOwogICAgIHB0ciA9IHB0ci0+bmV4dCgp
OwogICAgIGZvciAoOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCgpKSB7CiAgICAgICAgIEFTU0VSVCgh
cHRyLT5lbGlzaW9uKCkpOwotICAgICAgICB0YWlsID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVu
dExpc3ROb2RlKGdsb2JhbERhdGEsIHRhaWwsIHB0ci0+dmFsdWUoKSk7CisgICAgICAgIHRhaWwg
PSBuZXcgKGdsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobGluZU51bWJlciwgdGFpbCwgcHRy
LT52YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGhlYWQ7CiB9CkBAIC00NzEsNyArNDcxLDcg
QEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAg
ICAgIGlmIChtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dCkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQtPm1fZXhwci0+aXNTaW1wbGVBcnJh
eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FyZ3MtPm1fbGlzdE5vZGUtPm1f
bmV4dC0+bV9uZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0g
c3RhdGljX2Nhc3Q8QXJyYXlOb2RlKj4obV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQtPm1fZXhw
ciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRvci5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBzdGF0aWNfY2FzdDxBcnJheU5vZGUqPihtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fbmV4dC0+bV9leHByKS0+dG9Bcmd1bWVudExpc3QoZ2VuZXJhdG9y
Lmdsb2JhbERhdGEoKSwgMCk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3Qt
Pm1fZXhwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aAkocmV2aXNpb24gOTg3MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBBU1RCdWlsZGVy
IHsKICAgICAgICAgT3BlcmF0b3IgbV9vcDsKICAgICB9OwogcHVibGljOgotICAgIEFTVEJ1aWxk
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBMZXhlciogbGV4ZXIpCisgICAgQVNUQnVpbGRl
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUNvZGUqIHNvdXJjZUNvZGUpCiAgICAg
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9sZXhlcihsZXhlcikK
KyAgICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZSkKICAgICAgICAgLCBtX3Njb3BlKGds
b2JhbERhdGEpCiAgICAgICAgICwgbV9ldmFsQ291bnQoMCkKICAgICB7CkBAIC0xMTIsMTAgKzEx
MiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCAgRG9udEJ1aWxkS2V5d29yZHMg
PSAwOwogICAgIHN0YXRpYyBjb25zdCBpbnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCi0gICAg
RXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlOb2RlKGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJl
c3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmlu
YXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKEV4
cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlOb2RlKGludCBs
aW5lTnVtYmVyLCBpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9w
SW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOworICAgIEV4
cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVz
c2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGludCBzdGFydCwgaW50IGRpdm90
LCBpbnQgZW5kKTsKIAotICAgIEpTQzo6U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1l
bnRzKCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEpTQzo6U291cmNlRWxlbWVudHMobV9n
bG9iYWxEYXRhKTsgfQorICAgIEpTQzo6U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1l
bnRzKCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsg
fQogCiAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZh
ckRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnM7IH0KICAg
ICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBmdW5j
RGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlvbnM7IH0KQEAg
LTEyNCwxODIgKzEyNCwxODIgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmRUb0NvbW1hKENv
bW1hTm9kZSogY29tbWFOb2RlLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyBjb21tYU5vZGUtPmFw
cGVuZChleHByKTsgfQogCi0gICAgQ29tbWFOb2RlKiBjcmVhdGVDb21tYUV4cHIoRXhwcmVzc2lv
bk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIENvbW1hTm9kZShtX2dsb2JhbERhdGEsIGxocywgcmhzKTsgfQorICAgIENvbW1hTm9kZSog
Y3JlYXRlQ29tbWFFeHByKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHBy
ZXNzaW9uTm9kZSogcmhzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29tbWFOb2RlKGxp
bmVOdW1iZXIsIGxocywgcmhzKTsgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25O
b2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0
LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBpbnQg
c3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQcmVm
aXhOb2RlKEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGludCBzdGFydCwgaW50IGRpdm90LCBp
bnQgZW5kKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKEV4cHJlc3Npb25O
b2RlKiwgT3BlcmF0b3IsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKTsKLSAgICBFeHBy
ZXNzaW9uTm9kZSogbWFrZVR5cGVPZk5vZGUoRXhwcmVzc2lvbk5vZGUqKTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2RlKEV4cHJl
c3Npb25Ob2RlKik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXR3aXNlTm90Tm9kZShFeHBy
ZXNzaW9uTm9kZSopOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTXVsdE5vZGUoRXhwcmVzc2lv
bk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZURpdk5vZGUoRXhwcmVzc2lvbk5vZGUqIGxl
ZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZU1vZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZUFkZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNzaW9uTm9kZSog
bWFrZVN1Yk5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdFhP
ck5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdEFuZE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdE9yTm9kZShFeHByZXNz
aW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTGVmdFNoaWZ0Tm9kZShFeHByZXNzaW9u
Tm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUmlnaHRTaGlmdE5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
KTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZVVSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9k
ZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
OwotCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUxvZ2ljYWxOb3QoRXhwcmVzc2lvbk5vZGUq
IGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsTm90Tm9kZShtX2dsb2Jh
bERhdGEsIGV4cHIpOyB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVVuYXJ5UGx1cyhFeHBy
ZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05v
ZGUobV9nbG9iYWxEYXRhLCBleHByKTsgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVWb2lk
KEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJp
Z2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBp
bnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQ
cmVmaXhOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQg
ZGl2b3QsIGludCBlbmQpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUG9zdGZpeE5vZGUoaW50
LCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVu
ZCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2RlKGludCwgRXhwcmVzc2lvbk5v
ZGUqKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoaW50ICwgRXhwcmVzc2lv
bk5vZGUqLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CisgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VOZWdhdGVOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICBFeHByZXNzaW9u
Tm9kZSogbWFrZUJpdHdpc2VOb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICBFeHBy
ZXNzaW9uTm9kZSogbWFrZU11bHROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNz
aW9uTm9kZSogbWFrZURpdk5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lv
bk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIEV4cHJlc3Npb25O
b2RlKiBtYWtlTW9kTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9k
ZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUq
IG1ha2VBZGROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiBy
aWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFr
ZVN1Yk5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0
WE9yTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXRB
bmROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdE9y
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VMZWZ0U2hp
ZnROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZVJpZ2h0
U2hpZnROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZVVS
aWdodFNoaWZ0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSog
cmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisKKyAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlTG9naWNhbE5vdChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsTm90Tm9kZShsaW5lTnVtYmVyLCBleHBy
KTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVW5hcnlQ
bHVzTm9kZShsaW5lTnVtYmVyLCBleHByKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVW
b2lkKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcikKICAgICB7CiAgICAgICAg
IGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFZvaWRO
b2RlKG1fZ2xvYmFsRGF0YSwgZXhwcik7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgVm9pZE5vZGUobGluZU51bWJlciwgZXhwcik7CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2Rl
KiB0aGlzRXhwcigpCisgICAgRXhwcmVzc2lvbk5vZGUqIHRoaXNFeHByKGludCBsaW5lTnVtYmVy
KQogICAgIHsKICAgICAgICAgdXNlc1RoaXMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBUaGlzTm9kZShtX2dsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIFRoaXNOb2RlKGxpbmVOdW1iZXIpOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlUmVzb2x2ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KQorICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKG1fZ2xvYmFsRGF0
YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKICAgICAgICAgICAgIHVzZXNB
cmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZXNvbHZlTm9k
ZShtX2dsb2JhbERhdGEsICppZGVudCwgc3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIFJlc29sdmVOb2RlKGxpbmVOdW1iZXIsICppZGVudCwgc3RhcnQpOwogICAgIH0K
LSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbCgpIHsgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShtX2dsb2JhbERhdGEpOyB9Ci0gICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoUHJvcGVydHlMaXN0Tm9kZSogcHJvcGVy
dGllcykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE9iamVjdExpdGVyYWxOb2RlKG1fZ2xv
YmFsRGF0YSwgcHJvcGVydGllcyk7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0
TGl0ZXJhbChpbnQgbGluZU51bWJlcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE9iamVj
dExpdGVyYWxOb2RlKGxpbmVOdW1iZXIpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9i
amVjdExpdGVyYWwoaW50IGxpbmVOdW1iZXIsIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMp
IHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShsaW5lTnVtYmVy
LCBwcm9wZXJ0aWVzKTsgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGludCBl
bGlzaW9ucykKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoaW50IGxpbmVOdW1iZXIs
IGludCBlbGlzaW9ucykKICAgICB7CiAgICAgICAgIGlmIChlbGlzaW9ucykKICAgICAgICAgICAg
IGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFycmF5
Tm9kZShtX2dsb2JhbERhdGEsIGVsaXNpb25zKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBBcnJheU5vZGUobGluZU51bWJlciwgZWxpc2lvbnMpOwogICAgIH0KIAotICAgIEV4
cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobV9nbG9iYWxEYXRhLCBlbGVtcyk7IH0KLSAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoaW50IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxl
bXMpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGludCBsaW5lTnVtYmVyLCBFbGVt
ZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobGlu
ZU51bWJlciwgZWxlbXMpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGludCBs
aW5lTnVtYmVyLCBpbnQgZWxpc2lvbnMsIEVsZW1lbnROb2RlKiBlbGVtcykKICAgICB7CiAgICAg
ICAgIGlmIChlbGlzaW9ucykKICAgICAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFycmF5Tm9kZShtX2dsb2JhbERhdGEsIGVsaXNpb25z
LCBlbGVtcyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxp
bmVOdW1iZXIsIGVsaXNpb25zLCBlbGVtcyk7CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVOdW1iZXJFeHByKGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1i
ZXJFeHByKGludCBsaW5lTnVtYmVyLCBkb3VibGUgZCkKICAgICB7CiAgICAgICAgIGluY0NvbnN0
YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUobV9n
bG9iYWxEYXRhLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJO
b2RlKGxpbmVOdW1iZXIsIGQpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVT
dHJpbmcoY29uc3QgSWRlbnRpZmllciogc3RyaW5nKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVTdHJpbmcoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXIqIHN0cmluZykKICAgICB7
CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFN0cmluZ05vZGUobV9nbG9iYWxEYXRhLCAqc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBTdHJpbmdOb2RlKGxpbmVOdW1iZXIsICpzdHJpbmcpOwogICAgIH0K
IAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCb29sZWFuKGJvb2wgYikKKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQm9vbGVhbihpbnQgbGluZU51bWJlciwgYm9vbCBiKQogICAgIHsKICAg
ICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
Qm9vbGVhbk5vZGUobV9nbG9iYWxEYXRhLCBiKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBCb29sZWFuTm9kZShsaW5lTnVtYmVyLCBiKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlTnVsbCgpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bGwoaW50
IGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdWxsTm9kZShtX2dsb2JhbERhdGEpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bGxOb2RlKGxpbmVOdW1iZXIpOwogICAgIH0KIAot
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlIYXNBc3NpZ25tZW50
cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZUJyYWNrZXRBY2Nlc3MoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlIYXNBc3NpZ25tZW50cywgaW50
IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiAgICAgewotICAgICAgICBCcmFja2V0QWNjZXNz
b3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEJyYWNrZXRBY2Nlc3Nvck5vZGUobV9n
bG9iYWxEYXRhLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25tZW50cyk7CisgICAg
ICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJhY2tl
dEFjY2Vzc29yTm9kZShsaW5lTnVtYmVyLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3Np
Z25tZW50cyk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZv
dCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZURvdEFjY2VzcyhFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciogcHJvcGVydHksIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVEb3RBY2Nlc3MoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGlu
dCBlbmQpCiAgICAgewotICAgICAgICBEb3RBY2Nlc3Nvck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgRG90QWNjZXNzb3JOb2RlKG1fZ2xvYmFsRGF0YSwgYmFzZSwgKnByb3BlcnR5KTsK
KyAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIERvdEFj
Y2Vzc29yTm9kZShsaW5lTnVtYmVyLCBiYXNlLCAqcHJvcGVydHkpOwogICAgICAgICBzZXRFeGNl
cHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZWdFeHAoY29uc3QgSWRl
bnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MsIGludCBzdGFydCkKKyAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVnRXhwKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVu
dGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgaW50IHN0YXJ0KQogICAg
IHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4udXN0cmluZygpKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBSZWdFeHBOb2RlKiBub2RlID0gbmV3IChtX2ds
b2JhbERhdGEpIFJlZ0V4cE5vZGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuLCBmbGFncyk7CisgICAg
ICAgIFJlZ0V4cE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVnRXhwTm9kZShsaW5l
TnVtYmVyLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgICAgIGludCBzaXplID0gcGF0dGVybi5sZW5n
dGgoKSArIDI7IC8vICsgMiBmb3IgdGhlIHR3byAvJ3MKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgc3RhcnQgKyBzaXplKTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIo
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50cywgaW50IHN0YXJ0
LCBpbnQgZGl2b3QsIGludCBlbmQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1
bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgTmV3
RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUobV9nbG9iYWxE
YXRhLCBleHByLCBhcmd1bWVudHMpOworICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBOZXdFeHByTm9kZShsaW5lTnVtYmVyLCBleHByLCBhcmd1bWVudHMpOwog
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVO
ZXdFeHByKEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQpCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBOZXdFeHByTm9kZSog
bm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBOZXdFeHByTm9kZShtX2dsb2JhbERhdGEsIGV4cHIp
OworICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBOZXdFeHBy
Tm9kZShsaW5lTnVtYmVyLCBleHByKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihFeHByZXNzaW9uTm9kZSogY29u
ZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQorICAgIEV4
cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25kaXRpb25hbEV4cHIoaW50IGxpbmVOdW1iZXIsIEV4cHJl
c3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2Rl
KiByaHMpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbmRpdGlv
bmFsTm9kZShtX2dsb2JhbERhdGEsIGNvbmRpdGlvbiwgbGhzLCByaHMpOworICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbmRpdGlvbmFsTm9kZShsaW5lTnVtYmVyLCBjb25kaXRp
b24sIGxocywgcmhzKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdu
UmVzb2x2ZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIHJocywgYm9v
bCByaHNIYXNBc3NpZ25tZW50LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKKyAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQXNzaWduUmVzb2x2ZShpbnQgbGluZU51bWJlciwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGJvb2wgcmhzSGFzQXNzaWdu
bWVudCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiAgICAgewotICAgICAgICBBc3Np
Z25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25SZXNvbHZlTm9k
ZShtX2dsb2JhbERhdGEsIGlkZW50LCByaHMsIHJoc0hhc0Fzc2lnbm1lbnQpOworICAgICAgICBB
c3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25SZXNvbHZl
Tm9kZShsaW5lTnVtYmVyLCBpZGVudCwgcmhzLCByaHNIYXNBc3NpZ25tZW50KTsKICAgICAgICAg
c2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRnVuY3Rpb25F
eHByKGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFt
ZXRlck5vZGUqIHBhcmFtZXRlcnMsIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9z
LCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQorICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVGdW5jdGlvbkV4cHIoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXIqIG5h
bWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlcnMsIGlu
dCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50
IGJvZHlFbmRMaW5lKQogICAgIHsKLSAgICAgICAgRnVuY0V4cHJOb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKG1fZ2xvYmFsRGF0YSwgKm5hbWUsIGJvZHksIG1f
bGV4ZXItPnNvdXJjZUNvZGUob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRM
aW5lKSwgcGFyYW1ldGVycyk7CisgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3ICht
X2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShsaW5lTnVtYmVyLCAqbmFtZSwgYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0
YXJ0TGluZSksIHBhcmFtZXRlcnMpOwogICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGlu
ZSwgYm9keUVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIEZ1
bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShib29sIGluU3RyaWN0Q29udGV4dCkK
KyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoaW50IGxpbmVOdW1iZXIs
IGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIHsKICAgICAgICAgdXNlc0Nsb3N1cmVzKCk7Ci0g
ICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBpblN0
cmljdENvbnRleHQpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1f
Z2xvYmFsRGF0YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KTsKICAgICB9CiAgICAgCi0g
ICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9w
ZXJ0eShQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgUGFy
YW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgb3BlbkJyYWNl
UG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGlu
ZSkKKyAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRl
clByb3BlcnR5KGludCBsaW5lTnVtYmVyLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgY29uc3Qg
SWRlbnRpZmllciogbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFy
dExpbmUsIGludCBib2R5RW5kTGluZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAg
ICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRhLCAqbmFt
ZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShtX2dsb2JhbERhdGEsIG1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGJvZHksIG1fbGV4ZXItPnNvdXJj
ZUNvZGUob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1z
KSwgdHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2Rl
KG1fZ2xvYmFsRGF0YSwgKm5hbWUsIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRXhwck5vZGUobGlu
ZU51bWJlciwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9k
eSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBv
cywgYm9keVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOwogICAgIH0KICAgICAKIAotICAgIEFy
Z3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBBcmd1bWVudHNOb2RlKG1fZ2xvYmFsRGF0YSk7IH0KLSAgICBBcmd1bWVudHNOb2RlKiBjcmVh
dGVBcmd1bWVudHMoQXJndW1lbnRMaXN0Tm9kZSogYXJncykgeyByZXR1cm4gbmV3IChtX2dsb2Jh
bERhdGEpIEFyZ3VtZW50c05vZGUobV9nbG9iYWxEYXRhLCBhcmdzKTsgfQotICAgIEFyZ3VtZW50
TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoRXhwcmVzc2lvbk5vZGUqIGFyZykgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobV9nbG9iYWxEYXRhLCBhcmcp
OyB9Ci0gICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChBcmd1bWVudExp
c3ROb2RlKiBhcmdzLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgQXJndW1lbnRMaXN0Tm9kZShtX2dsb2JhbERhdGEsIGFyZ3MsIGFyZyk7IH0KKyAgICBB
cmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgQXJndW1lbnRzTm9kZSgpOyB9CisgICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRz
KEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1
bWVudHNOb2RlKGFyZ3MpOyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRz
TGlzdChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGFyZykgeyByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobGluZU51bWJlciwgYXJnKTsgfQorICAgIEFy
Z3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoaW50IGxpbmVOdW1iZXIsIEFyZ3Vt
ZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxpbmVOdW1iZXIsIGFyZ3MsIGFyZyk7IH0KIAog
ICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KGNvbnN0IElk
ZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9k
ZTo6VHlwZSB0eXBlKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1f
Z2xvYmFsRGF0YSwgKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlwZSk7IH0KICAgICB0ZW1wbGF0ZSA8
Ym9vbD4gUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEqLCBkb3VibGUg
cHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5
cGUpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRh
LCBwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9Ci0gICAgUHJvcGVydHlMaXN0Tm9kZSogY3Jl
YXRlUHJvcGVydHlMaXN0KFByb3BlcnR5Tm9kZSogcHJvcGVydHkpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBQcm9wZXJ0eUxpc3ROb2RlKG1fZ2xvYmFsRGF0YSwgcHJvcGVydHkpOyB9Ci0g
ICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KFByb3BlcnR5Tm9kZSogcHJv
cGVydHksIFByb3BlcnR5TGlzdE5vZGUqIHRhaWwpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBQcm9wZXJ0eUxpc3ROb2RlKG1fZ2xvYmFsRGF0YSwgcHJvcGVydHksIHRhaWwpOyB9CisgICAg
UHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGludCBsaW5lTnVtYmVyLCBQcm9w
ZXJ0eU5vZGUqIHByb3BlcnR5KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlM
aXN0Tm9kZShsaW5lTnVtYmVyLCBwcm9wZXJ0eSk7IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKiBj
cmVhdGVQcm9wZXJ0eUxpc3QoaW50IGxpbmVOdW1iZXIsIFByb3BlcnR5Tm9kZSogcHJvcGVydHks
IFByb3BlcnR5TGlzdE5vZGUqIHRhaWwpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9w
ZXJ0eUxpc3ROb2RlKGxpbmVOdW1iZXIsIHByb3BlcnR5LCB0YWlsKTsgfQogCi0gICAgRWxlbWVu
dE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4
cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShtX2dsb2JhbERhdGEs
IGVsaXNpb25zLCBleHByKTsgfQotICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChF
bGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShtX2dsb2JhbERhdGEsIGVsZW1z
LCBlbGlzaW9ucywgZXhwcik7IH0KKyAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3Qo
aW50IGVsaXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX2dsb2Jh
bERhdGEpIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQorICAgIEVsZW1lbnROb2RlKiBj
cmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVz
c2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShl
bGVtcywgZWxpc2lvbnMsIGV4cHIpOyB9CiAKLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3Jt
YWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShtX2dsb2JhbERhdGEsIGlkZW50KTsgfQotICAgIFBh
cmFtZXRlck5vZGUqIGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoUGFyYW1ldGVyTm9kZSogbGlz
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQ
YXJhbWV0ZXJOb2RlKG1fZ2xvYmFsRGF0YSwgbGlzdCwgaWRlbnQpOyB9CisgICAgUGFyYW1ldGVy
Tm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkg
eyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFBhcmFtZXRlck5vZGUoaWRlbnQpOyB9CisgICAg
UGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBs
aXN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IFBhcmFtZXRlck5vZGUobGlzdCwgaWRlbnQpOyB9CiAKLSAgICBDYXNlQ2xhdXNlTm9kZSogY3Jl
YXRlQ2xhdXNlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBzdGF0
ZW1lbnRzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2FzZUNsYXVzZU5vZGUobV9nbG9i
YWxEYXRhLCBleHByLCBzdGF0ZW1lbnRzKTsgfQotICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVD
bGF1c2VMaXN0KENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBDbGF1c2VMaXN0Tm9kZShtX2dsb2JhbERhdGEsIGNsYXVzZSk7IH0KLSAgICBDbGF1c2VM
aXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDbGF1c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVz
ZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENsYXVzZUxpc3ROb2Rl
KG1fZ2xvYmFsRGF0YSwgdGFpbCwgY2xhdXNlKTsgfQorICAgIENhc2VDbGF1c2VOb2RlKiBjcmVh
dGVDbGF1c2UoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEpTQzo6U291cmNlRWxlbWVudHMqIHN0YXRl
bWVudHMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDYXNlQ2xhdXNlTm9kZShleHByLCBz
dGF0ZW1lbnRzKTsgfQorICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENhc2VD
bGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDbGF1c2VMaXN0
Tm9kZShjbGF1c2UpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2xh
dXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBDbGF1c2VMaXN0Tm9kZSh0YWlsLCBjbGF1c2UpOyB9CiAKICAgICB2b2lk
IHNldFVzZXNBcmd1bWVudHMoRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkgeyBub2RlLT5zZXRVc2Vz
QXJndW1lbnRzKCk7IH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZ1bmNEZWNsU3RhdGVt
ZW50KGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFt
ZXRlck5vZGUqIHBhcmFtZXRlcnMsIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9z
LCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUq
IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJz
LCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUs
IGludCBib2R5RW5kTGluZSkKICAgICB7Ci0gICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBGdW5jRGVjbE5vZGUobV9nbG9iYWxEYXRhLCAqbmFtZSwgYm9keSwg
bV9sZXhlci0+c291cmNlQ29kZShvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFy
dExpbmUpLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3ICht
X2dsb2JhbERhdGEpIEZ1bmNEZWNsTm9kZShsaW5lTnVtYmVyLCAqbmFtZSwgYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0
YXJ0TGluZSksIHBhcmFtZXRlcnMpOwogICAgICAgICBpZiAoKm5hbWUgPT0gbV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7
CiAgICAgICAgIG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5i
b2R5KCkpOwpAQCAtMzA3LDE4MSArMzA3LDE4MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBk
ZWNsOwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJsb2NrU3RhdGVtZW50KEpT
Qzo6U291cmNlRWxlbWVudHMqIGVsZW1lbnRzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
KyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCbG9ja1N0YXRlbWVudChpbnQgbGluZU51bWJlciwg
SlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5l
KQogICAgIHsKLSAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5ldyAobV9nbG9iYWxEYXRhKSBC
bG9ja05vZGUobV9nbG9iYWxEYXRhLCBlbGVtZW50cyk7CisgICAgICAgIEJsb2NrTm9kZSogYmxv
Y2sgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQmxvY2tOb2RlKGxpbmVOdW1iZXIsIGVsZW1lbnRzKTsK
ICAgICAgICAgYmxvY2stPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1
cm4gYmxvY2s7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRXhwclN0YXRlbWVu
dChFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIFN0YXRlbWVu
dE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBFeHByU3RhdGVtZW50
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEV4cHJTdGF0ZW1lbnROb2RlKG1fZ2xv
YmFsRGF0YSwgZXhwcik7CisgICAgICAgIEV4cHJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRXhwclN0YXRlbWVudE5vZGUobGluZU51bWJlciwgZXhwcik7CiAgICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3RhdGVtZW50KEV4cHJlc3Npb25O
b2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIHRydWVCbG9jaywgaW50IHN0YXJ0LCBpbnQg
ZW5kKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3RhdGVtZW50KGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIGlu
dCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3ICht
X2dsb2JhbERhdGEpIElmTm9kZShtX2dsb2JhbERhdGEsIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrKTsK
KyAgICAgICAgSWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSWZOb2RlKGxpbmVO
dW1iZXIsIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlSWZTdGF0ZW1lbnQoRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVt
ZW50Tm9kZSogdHJ1ZUJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmYWxzZUJsb2NrLCBpbnQgc3RhcnQs
IGludCBlbmQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlSWZTdGF0ZW1lbnQoaW50IGxpbmVO
dW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIHRydWVCbG9j
aywgU3RhdGVtZW50Tm9kZSogZmFsc2VCbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsK
LSAgICAgICAgSWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSWZFbHNlTm9kZSht
X2dsb2JhbERhdGEsIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKKyAgICAgICAg
SWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSWZFbHNlTm9kZShsaW5lTnVtYmVy
LCBjb25kaXRpb24sIHRydWVCbG9jaywgZmFsc2VCbG9jayk7CiAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKHN0YXJ0LCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUZvckxvb3AoRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyLCBF
eHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50
Tm9kZSogc3RhdGVtZW50cywgYm9vbCBiLCBpbnQgc3RhcnQsIGludCBlbmQpCisgICAgU3RhdGVt
ZW50Tm9kZSogY3JlYXRlRm9yTG9vcChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGlu
aXRpYWxpemVyLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBFeHByZXNzaW9uTm9kZSogaXRl
ciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgYm9vbCBiLCBpbnQgc3RhcnQsIGludCBlbmQp
CiAgICAgewotICAgICAgICBGb3JOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRm9y
Tm9kZShtX2dsb2JhbERhdGEsIGluaXRpYWxpemVyLCBjb25kaXRpb24sIGl0ZXIsIHN0YXRlbWVu
dHMsIGIpOworICAgICAgICBGb3JOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRm9y
Tm9kZShsaW5lTnVtYmVyLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRz
LCBiKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJl
c3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChpbnQg
bGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0
aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMs
IGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVu
ZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBGb3JJbk5vZGUq
IHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobV9nbG9iYWxEYXRhLCAqaWRl
bnQsIGluaXRpYWxpemVyLCBpdGVyLCBzdGF0ZW1lbnRzLCBpbml0U3RhcnQsIGluaXRTdGFydCAt
IHN0YXJ0LCBpbml0RW5kIC0gaW5pdFN0YXJ0KTsKKyAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgRm9ySW5Ob2RlKG1fZ2xvYmFsRGF0YSwgbGluZU51bWJlciwg
KmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0LCBpbml0U3Rh
cnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3Vs
dCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3AoRXhwcmVzc2lvbk5vZGUqIGxo
cywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBl
U3RhcnQsIGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9k
ZSogbGhzLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywg
aW50IGVTdGFydCwgaW50IGVEaXZvdCwgaW50IGVFbmQsIGludCBzdGFydCwgaW50IGVuZCkKICAg
ICB7Ci0gICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZvcklu
Tm9kZShtX2dsb2JhbERhdGEsIGxocywgaXRlciwgc3RhdGVtZW50cyk7CisgICAgICAgIEZvcklu
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZvckluTm9kZShtX2dsb2JhbERhdGEs
IGxpbmVOdW1iZXIsIGxocywgaXRlciwgc3RhdGVtZW50cyk7CiAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKHN0YXJ0LCBlbmQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVT
dGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFbXB0eVN0YXRlbWVudCgpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBFbXB0eVN0YXRlbWVudE5vZGUobV9nbG9iYWxEYXRhKTsgfQorICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZUVtcHR5U3RhdGVtZW50KGludCBsaW5lTnVtYmVyKSB7IHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpOyB9CiAKLSAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVWYXJTdGF0ZW1lbnQoRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IGludCBzdGFydCwgaW50IGVuZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVWYXJTdGF0ZW1l
bnQoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBl
bmQpCiAgICAgewogICAgICAgICBTdGF0ZW1lbnROb2RlKiByZXN1bHQ7CiAgICAgICAgIGlmICgh
ZXhwcikKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBFbXB0eVN0YXRl
bWVudE5vZGUobV9nbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBFbXB0eVN0YXRlbWVudE5vZGUobGluZU51bWJlcik7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBWYXJTdGF0ZW1lbnROb2RlKG1f
Z2xvYmFsRGF0YSwgZXhwcik7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgVmFyU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyLCBleHByKTsKICAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlUmV0dXJuU3RhdGVtZW50KEV4cHJlc3Npb25Ob2RlKiBleHBy
ZXNzaW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUp
CisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlUmV0dXJuU3RhdGVtZW50KGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbiwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBz
dGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgUmV0dXJuTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIFJldHVybk5vZGUobV9nbG9iYWxEYXRhLCBleHByZXNzaW9u
KTsKKyAgICAgICAgUmV0dXJuTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFJldHVy
bk5vZGUobGluZU51bWJlciwgZXhwcmVzc2lvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCcmVha1N0YXRlbWVudChpbnQgZVN0YXJ0LCBpbnQgZUVu
ZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRl
QnJlYWtTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIEJyZWFrTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9kZShtX2dsb2JhbERhdGEpOworICAgICAgICBC
cmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBCcmVha05vZGUobV9nbG9iYWxE
YXRhLCBsaW5lTnVtYmVyKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBl
U3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVu
ZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0
YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExp
bmUpCiAgICAgewotICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRh
KSBCcmVha05vZGUobV9nbG9iYWxEYXRhLCAqaWRlbnQpOworICAgICAgICBCcmVha05vZGUqIHJl
c3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBCcmVha05vZGUobGluZU51bWJlciwgKmlkZW50KTsK
ICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQp
OwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnRpbnVl
U3RhdGVtZW50KGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChpbnQgbGluZU51
bWJlciwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQog
ICAgIHsKLSAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
Q29udGludWVOb2RlKG1fZ2xvYmFsRGF0YSk7CisgICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShtX2dsb2JhbERhdGEsIGxpbmVOdW1i
ZXIpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZUVuZCwg
ZUVuZCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29u
dGludWVTdGF0ZW1lbnQoY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBlU3RhcnQsIGludCBl
RW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVDb250aW51ZVN0YXRlbWVudChpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAg
ICB7Ci0gICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENv
bnRpbnVlTm9kZShtX2dsb2JhbERhdGEsICppZGVudCk7CisgICAgICAgIENvbnRpbnVlTm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShsaW5lTnVtYmVyLCAqaWRl
bnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZUVuZCwg
ZUVuZCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVHJ5
U3RhdGVtZW50KFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCwgYm9vbCBjYXRjaEhhc0V2YWwsIFN0YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVu
dE5vZGUqIGZpbmFsbHlCbG9jaywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlVHJ5U3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGJvb2wgY2F0Y2hIYXNFdmFs
LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2ss
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgVHJ5Tm9kZSogcmVz
dWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRyeU5vZGUobV9nbG9iYWxEYXRhLCB0cnlCbG9jaywg
KmlkZW50LCBjYXRjaEhhc0V2YWwsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CisgICAgICAg
IFRyeU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBUcnlOb2RlKGxpbmVOdW1iZXIs
IHRyeUJsb2NrLCAqaWRlbnQsIGNhdGNoSGFzRXZhbCwgY2F0Y2hCbG9jaywgZmluYWxseUJsb2Nr
KTsKICAgICAgICAgaWYgKGNhdGNoQmxvY2spCiAgICAgICAgICAgICB1c2VzQ2F0Y2goKTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVTd2l0Y2hTdGF0ZW1l
bnQoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIENsYXVzZUxpc3ROb2RlKiBmaXJzdENsYXVzZXMsIENh
c2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSogc2Vjb25kQ2xhdXNl
cywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRl
U3dpdGNoU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2xh
dXNlTGlzdE5vZGUqIGZpcnN0Q2xhdXNlcywgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2Us
IENsYXVzZUxpc3ROb2RlKiBzZWNvbmRDbGF1c2VzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7Ci0gICAgICAgIENhc2VCbG9ja05vZGUqIGNhc2VzID0gbmV3IChtX2dsb2JhbERh
dGEpIENhc2VCbG9ja05vZGUobV9nbG9iYWxEYXRhLCBmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1
c2UsIHNlY29uZENsYXVzZXMpOwotICAgICAgICBTd2l0Y2hOb2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgU3dpdGNoTm9kZShtX2dsb2JhbERhdGEsIGV4cHIsIGNhc2VzKTsKKyAgICAg
ICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2FzZUJsb2NrTm9k
ZShmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMpOworICAgICAgICBT
d2l0Y2hOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgU3dpdGNoTm9kZShsaW5lTnVt
YmVyLCBleHByLCBjYXNlcyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5k
TGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlV2hpbGVTdGF0ZW1lbnQoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5v
ZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlV2hpbGVTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQogICAgIHsKLSAgICAgICAgV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgV2hpbGVOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwciwgc3RhdGVtZW50KTsKKyAgICAgICAgV2hp
bGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgV2hpbGVOb2RlKGxpbmVOdW1iZXIs
IGV4cHIsIHN0YXRlbWVudCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5k
TGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRG9XaGlsZVN0YXRlbWVudChTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKKyAgICBTdGF0ZW1l
bnROb2RlKiBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnRMaW5lLCBpbnQg
ZW5kTGluZSkKICAgICB7Ci0gICAgICAgIERvV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgRG9XaGlsZU5vZGUobV9nbG9iYWxEYXRhLCBzdGF0ZW1lbnQsIGV4cHIpOworICAg
ICAgICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIERvV2hpbGVOb2Rl
KGxpbmVOdW1iZXIsIHN0YXRlbWVudCwgZXhwcik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnQsIGlu
dCBlbmQpCiAgICAgewotICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBMYWJlbE5vZGUobV9nbG9iYWxEYXRhLCAqaWRlbnQsIHN0YXRlbWVudCk7CisgICAgICAg
IExhYmVsTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIExhYmVsTm9kZShsaW5lTnVt
YmVyLCAqaWRlbnQsIHN0YXRlbWVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJl
c3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaXRoU3RhdGVtZW50KEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlV2l0aFN0YXRl
bWVudChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRoKCk7Ci0gICAgICAgIFdpdGhOb2RlKiByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgV2l0aE5vZGUobV9nbG9iYWxEYXRhLCBleHByLCBzdGF0ZW1l
bnQsIGVuZCwgZW5kIC0gc3RhcnQpOworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3ICht
X2dsb2JhbERhdGEpIFdpdGhOb2RlKGxpbmVOdW1iZXIsIGV4cHIsIHN0YXRlbWVudCwgZW5kLCBl
bmQgLSBzdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAgICAKICAgICAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVUaHJvd1N0YXRlbWVudChFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0
LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKKyAgICBTdGF0ZW1lbnROb2Rl
KiBjcmVhdGVUaHJvd1N0YXRlbWVudChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAg
ewotICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBUaHJvd05v
ZGUobV9nbG9iYWxEYXRhLCBleHByKTsKKyAgICAgICAgVGhyb3dOb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgVGhyb3dOb2RlKGxpbmVOdW1iZXIsIGV4cHIpOwogICAgICAgICByZXN1
bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGludCBs
aW5lTnVtYmVyLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIERl
YnVnZ2VyU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIERlYnVnZ2Vy
U3RhdGVtZW50Tm9kZShtX2dsb2JhbERhdGEpOworICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudE5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBEZWJ1Z2dlclN0YXRlbWVudE5vZGUobGlu
ZU51bWJlcik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUNvbnN0U3RhdGVtZW50KENvbnN0RGVjbE5vZGUqIGRlY2xzLCBpbnQgc3RhcnRMaW5lLCBp
bnQgZW5kTGluZSkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb25zdFN0YXRlbWVudChpbnQg
bGluZU51bWJlciwgQ29uc3REZWNsTm9kZSogZGVjbHMsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQogICAgIHsKLSAgICAgICAgQ29uc3RTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgQ29uc3RTdGF0ZW1lbnROb2RlKG1fZ2xvYmFsRGF0YSwgZGVjbHMpOworICAg
ICAgICBDb25zdFN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBDb25z
dFN0YXRlbWVudE5vZGUobGluZU51bWJlciwgZGVjbHMpOwogICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIENvbnN0RGVjbE5vZGUqIGFwcGVuZENvbnN0RGVjbChDb25zdERlY2xOb2RlKiB0YWlsLCBj
b25zdCBJZGVudGlmaWVyKiBuYW1lLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIpCisgICAg
Q29uc3REZWNsTm9kZSogYXBwZW5kQ29uc3REZWNsKGludCBsaW5lTnVtYmVyLCBDb25zdERlY2xO
b2RlKiB0YWlsLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBFeHByZXNzaW9uTm9kZSogaW5pdGlh
bGl6ZXIpCiAgICAgewotICAgICAgICBDb25zdERlY2xOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgQ29uc3REZWNsTm9kZShtX2dsb2JhbERhdGEsICpuYW1lLCBpbml0aWFsaXplcik7
CisgICAgICAgIENvbnN0RGVjbE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBDb25z
dERlY2xOb2RlKGxpbmVOdW1iZXIsICpuYW1lLCBpbml0aWFsaXplcik7CiAgICAgICAgIGlmICh0
YWlsKQogICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0gcmVzdWx0OwogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zY29wZS5tX3Zh
ckRlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWRlbnQsIGF0dHJzKSk7
CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNvbWJpbmVDb21tYU5vZGVzKEV4cHJlc3Np
b25Ob2RlKiBsaXN0LCBFeHByZXNzaW9uTm9kZSogaW5pdCkKKyAgICBFeHByZXNzaW9uTm9kZSog
Y29tYmluZUNvbW1hTm9kZXMoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBsaXN0LCBF
eHByZXNzaW9uTm9kZSogaW5pdCkKICAgICB7CiAgICAgICAgIGlmICghbGlzdCkKICAgICAgICAg
ICAgIHJldHVybiBpbml0OwpAQCAtNTA3LDcgKzUwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENvbW1hTm9kZSo+KGxpc3QpLT5hcHBlbmQoaW5pdCk7CiAgICAgICAgICAg
ICByZXR1cm4gbGlzdDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIENvbW1hTm9kZShtX2dsb2JhbERhdGEsIGxpc3QsIGluaXQpOworICAgICAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIENvbW1hTm9kZShsaW5lTnVtYmVyLCBsaXN0LCBpbml0KTsKICAg
ICB9CiAKICAgICBpbnQgZXZhbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ291bnQ7IH0K
QEAgLTUzNSwxMCArNTM1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG9wZXJhbmRTdGFj
a0RlcHRoID49IDApOwogICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5yZXNpemUobV9iaW5h
cnlPcGVyYW5kU3RhY2suc2l6ZSgpIC0gYW1vdW50KTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmRC
aW5hcnlPcGVyYXRpb24oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50JiwgY29uc3QgQmluYXJ5
T3BlcmFuZCYgbGhzLCBjb25zdCBCaW5hcnlPcGVyYW5kJiByaHMpCisgICAgdm9pZCBhcHBlbmRC
aW5hcnlPcGVyYXRpb24oaW50IGxpbmVOdW1iZXIsIGludCYgb3BlcmFuZFN0YWNrRGVwdGgsIGlu
dCYsIGNvbnN0IEJpbmFyeU9wZXJhbmQmIGxocywgY29uc3QgQmluYXJ5T3BlcmFuZCYgcmhzKQog
ICAgIHsKICAgICAgICAgb3BlcmFuZFN0YWNrRGVwdGgrKzsKLSAgICAgICAgbV9iaW5hcnlPcGVy
YW5kU3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1ha2VCaW5hcnlOb2RlKG1fYmluYXJ5T3Bl
cmF0b3JTdGFjay5sYXN0KCkuZmlyc3QsIGxocywgcmhzKSwgQmluYXJ5T3BJbmZvKGxocy5zZWNv
bmQsIHJocy5zZWNvbmQpKSk7CisgICAgICAgIG1fYmluYXJ5T3BlcmFuZFN0YWNrLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihtYWtlQmluYXJ5Tm9kZShsaW5lTnVtYmVyLCBtX2JpbmFyeU9wZXJhdG9y
U3RhY2subGFzdCgpLmZpcnN0LCBsaHMsIHJocyksIEJpbmFyeU9wSW5mbyhsaHMuc2Vjb25kLCBy
aHMuc2Vjb25kKSkpOwogICAgIH0KICAgICB2b2lkIG9wZXJhdG9yU3RhY2tBcHBlbmQoaW50JiBv
cGVyYXRvclN0YWNrRGVwdGgsIGludCBvcCwgaW50IHByZWNlZGVuY2UpCiAgICAgewpAQCAtNTgw
LDkgKzU4MCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmFwcGVu
ZChBc3NpZ25tZW50SW5mbyhub2RlLCBzdGFydCwgZGl2b3QsIGFzc2lnbm1lbnRDb3VudCwgb3Ap
KTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChpbnQmIGFz
c2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgaW5pdGlhbEFzc2ln
bm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGludCBsYXN0VG9rZW5FbmQp
CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnbm1lbnQoaW50IGxpbmVOdW1iZXIsIGlu
dCYgYXNzaWdubWVudFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBpbml0aWFs
QXNzaWdubWVudENvdW50LCBpbnQgY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW50IGxhc3RUb2tl
bkVuZCkKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25Ob2RlKiByZXN1bHQgPSBtYWtlQXNzaWdu
Tm9kZShtX2Fzc2lnbm1lbnRJbmZvU3RhY2subGFzdCgpLm1fbm9kZSwgbV9hc3NpZ25tZW50SW5m
b1N0YWNrLmxhc3QoKS5tX29wLCByaHMsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9p
bml0QXNzaWdubWVudHMgIT0gaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgbV9hc3NpZ25tZW50SW5m
b1N0YWNrLmxhc3QoKS5tX2luaXRBc3NpZ25tZW50cyAhPSBjdXJyZW50QXNzaWdubWVudENvdW50
LCBtX2Fzc2lnbm1lbnRJbmZvU3RhY2subGFzdCgpLm1fc3RhcnQsIG1fYXNzaWdubWVudEluZm9T
dGFjay5sYXN0KCkubV9kaXZvdCArIDEsIGxhc3RUb2tlbkVuZCk7CisgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsaW5lTnVtYmVyLCBtX2Fzc2lnbm1lbnRJ
bmZvU3RhY2subGFzdCgpLm1fbm9kZSwgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmxhc3QoKS5tX29w
LCByaHMsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9pbml0QXNzaWdubWVudHMgIT0g
aW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmxhc3QoKS5tX2lu
aXRBc3NpZ25tZW50cyAhPSBjdXJyZW50QXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1lbnRJbmZv
U3RhY2subGFzdCgpLm1fc3RhcnQsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9kaXZv
dCArIDEsIGxhc3RUb2tlbkVuZCk7CiAgICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoLS07CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC02MjUsMTMgKzYyNSwxMyBAQCBwcml2YXRlOgogICAgICAgICBtX2V2YWxD
b3VudCsrOwogICAgICAgICBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gRXZhbEZlYXR1cmU7CiAgICAg
fQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXIoZG91YmxlIGQpCisgICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZU51bWJlcihpbnQgbGluZU51bWJlciwgZG91YmxlIGQpCiAgICAgewot
ICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUobV9nbG9iYWxEYXRh
LCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKGxpbmVO
dW1iZXIsIGQpOwogICAgIH0KICAgICAKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
LSAgICBMZXhlciogbV9sZXhlcjsKKyAgICBTb3VyY2VDb2RlKiBtX3NvdXJjZUNvZGU7CiAgICAg
U2NvcGUgbV9zY29wZTsKICAgICBWZWN0b3I8QmluYXJ5T3BlcmFuZCwgMTA+IG1fYmluYXJ5T3Bl
cmFuZFN0YWNrOwogICAgIFZlY3RvcjxBc3NpZ25tZW50SW5mbywgMTA+IG1fYXNzaWdubWVudElu
Zm9TdGFjazsKQEAgLTY0MCwzMyArNjQwLDMzIEBAIHByaXZhdGU6CiAgICAgaW50IG1fZXZhbENv
dW50OwogfTsKIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VUeXBlT2ZOb2RlKEV4
cHJlc3Npb25Ob2RlKiBleHByKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VUeXBl
T2ZOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcikKIHsKICAgICBpZiAo
ZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0g
c3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihleHByKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBUeXBlT2ZSZXNvbHZlTm9kZShtX2dsb2JhbERhdGEsIHJlc29sdmUtPmlkZW50
aWZpZXIoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVHlwZU9mUmVzb2x2
ZU5vZGUobGluZU51bWJlciwgcmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKICAgICB9Ci0gICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBUeXBlT2ZWYWx1ZU5vZGUobV9nbG9iYWxEYXRhLCBleHBy
KTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFR5cGVPZlZhbHVlTm9kZShsaW5lTnVt
YmVyLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVO
b2RlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkK
K0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQog
ewogICAgIGlmICghZXhwci0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIERlbGV0ZVZhbHVlTm9kZShtX2dsb2JhbERhdGEsIGV4cHIpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0ZVZhbHVlTm9kZShsaW5lTnVtYmVyLCBleHBy
KTsKICAgICBpZiAoZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2Rl
KiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihleHByKTsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVSZXNvbHZlTm9kZShtX2dsb2JhbERhdGEsIHJl
c29sdmUtPmlkZW50aWZpZXIoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVSZXNvbHZlTm9kZShsaW5l
TnVtYmVyLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJh
Y2tldEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIERlbGV0ZUJyYWNrZXROb2RlKG1fZ2xvYmFsRGF0YSwgYnJhY2tldC0+YmFzZSgpLCBicmFj
a2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVCcmFja2V0Tm9kZShsaW5lTnVt
YmVyLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3Qg
LSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nl
c3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RB
Y2Nlc3Nvck5vZGUqPihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0
ZURvdE5vZGUobV9nbG9iYWxEYXRhLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRp
dm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBEZWxldGVEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50
aWZpZXIoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKIH0KIAotRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2RlKEV4cHJlc3Npb25Ob2RlKiBuKQor
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2RlKGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogbikKIHsKICAgICBpZiAobi0+aXNOdW1iZXIoKSkgewogICAgICAg
ICBOdW1iZXJOb2RlKiBudW1iZXJOb2RlID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOwpA
QCAtNjc0LDEyOCArNjc0LDEyOCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5l
Z2F0ZU5vCiAgICAgICAgIHJldHVybiBudW1iZXJOb2RlOwogICAgIH0KIAotICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgTmVnYXRlTm9kZShtX2dsb2JhbERhdGEsIG4pOworICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgTmVnYXRlTm9kZShsaW5lTnVtYmVyLCBuKTsKIH0KIAotRXhw
cmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXR3aXNlTm90Tm9kZShFeHByZXNzaW9uTm9k
ZSogZXhwcikKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQogewogICAgIGlmIChleHByLT5p
c051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKH50b0ludDMyKHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgQml0d2lzZU5vdE5vZGUobV9nbG9iYWxEYXRhLCBleHByKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZU51bWJlcihsaW5lTnVtYmVyLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwciktPnZhbHVlKCkpKTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJp
dHdpc2VOb3ROb2RlKGxpbmVOdW1iZXIsIGV4cHIpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZU11bHROb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCitFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZU11bHROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhw
cjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewog
ICAgIGV4cHIxID0gZXhwcjEtPnN0cmlwVW5hcnlQbHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+
c3RyaXBVbmFyeVBsdXMoKTsKIAogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+
aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICogc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIy
KS0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAqIHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMiktPnZhbHVlKCkpOwogCiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYm
IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgPT0gMSkKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKG1fZ2xvYmFsRGF0YSwgZXhw
cjIpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05vZGUobGlu
ZU51bWJlciwgZXhwcjIpOwogCiAgICAgaWYgKGV4cHIyLT5pc051bWJlcigpICYmIHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcjEpOworICAg
ICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05vZGUobGluZU51bWJlciwg
ZXhwcjEpOwogCi0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBNdWx0Tm9kZShtX2dsb2Jh
bERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBNdWx0Tm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0
SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURp
dk5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wg
cmlnaHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2
Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBleHByMSA9IGV4cHIx
LT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7
CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+
dmFsdWUoKSAvIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOwotICAg
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRGl2Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIxLCBl
eHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIo
bGluZU51bWJlciwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAvIHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOworICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgRGl2Tm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFz
QXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTW9kTm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBleHByMSA9IGV4cHIxLT5z
dHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAg
ICAgCiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAg
ICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGZtb2Qoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4
cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkp
OwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTW9kTm9kZShtX2dsb2JhbERhdGEsIGV4
cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIHJldHVybiBjcmVhdGVO
dW1iZXIobGluZU51bWJlciwgZm1vZChzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52
YWx1ZSgpLCBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7CisgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBNb2ROb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHBy
MiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlQWRkTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6
Om1ha2VBZGROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChl
eHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZU51bWJlcihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICsgc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7Ci0gICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBBZGROb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsaW5lTnVtYmVyLCBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBBZGROb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9kZShFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKGludCBsaW5lTnVt
YmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGV4cHIxID0gZXhwcjEtPnN0cmlwVW5hcnlQbHVz
KCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBsdXMoKTsKIAogICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZU51bWJlcihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpIC0gc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBTdWJOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsaW5lTnVtYmVyLCBzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpIC0gc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBT
dWJOb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9
CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZShFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2RlKGlu
dCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1iZXIo
KSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcih0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8ICh0b1VJbnQz
MihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlZnRTaGlmdE5vZGUobV9nbG9iYWxEYXRhLCBl
eHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKGxpbmVOdW1iZXIsIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSkgPDwgKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMikt
PnZhbHVlKCkpICYgMHgxZikpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTGVmdFNo
aWZ0Tm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwog
fQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVJpZ2h0U2hpZnROb2RlKEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVJpZ2h0U2hpZnROb2Rl
KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcih0
b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpID4+ICh0b1VJ
bnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsK
LSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJpZ2h0U2hpZnROb2RlKG1fZ2xvYmFsRGF0
YSwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZU51bWJlcihsaW5lTnVtYmVyLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJp
Z2h0U2hpZnROb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50
cyk7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2Rl
KEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVVSaWdodFNo
aWZ0Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEt
PmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVO
dW1iZXIodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkg
Pj4gKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpICYg
MHgxZikpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVW5zaWduZWRSaWdodFNoaWZ0
Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgdG9VSW50MzIoc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgPj4gKHRvVUludDMyKHN0YXRpY19jYXN0
PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOworICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsaW5lTnVtYmVyLCBleHByMSwg
ZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVp
bGRlcjo6bWFrZUJpdE9yTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1
aWxkZXI6Om1ha2VCaXRPck5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7CiAg
ICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICBy
ZXR1cm4gY3JlYXRlTnVtYmVyKHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZh
bHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdE9yTm9kZShtX2dsb2Jh
bERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIHJldHVy
biBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2Rl
Kj4oZXhwcjEpLT52YWx1ZSgpKSB8IHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4
cHIyKS0+dmFsdWUoKSkpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0T3JOb2Rl
KGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0QW5kTm9kZShFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQor
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRBbmROb2RlKGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+
aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcih0b0ludDMyKHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpICYgdG9JbnQzMihzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBCaXRBbmROb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2ln
bm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsaW5lTnVtYmVyLCB0b0ludDMy
KHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpICYgdG9JbnQzMihzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7CisgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBCaXRBbmROb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0
WE9yTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VC
aXRYT3JOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZU51bWJlcih0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkp
IF4gdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7Ci0g
ICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBCaXRYT3JOb2RlKG1fZ2xvYmFsRGF0YSwgZXhw
cjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51
bWJlcihsaW5lTnVtYmVyLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkpIF4gdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1
ZSgpKSk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBCaXRYT3JOb2RlKGxpbmVOdW1i
ZXIsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShFeHByZXNzaW9uTm9kZSogZnVu
YywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoaW50IGxpbmVO
dW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3Rh
cnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUo
bV9nbG9iYWxEYXRhLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEZ1bmN0aW9uQ2FsbFZhbHVl
Tm9kZShsaW5lTnVtYmVyLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0g
ZGl2b3QpOwogICAgIGlmIChmdW5jLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2
ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGZ1bmMpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwog
ICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2
YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIEV2YWxGdW5jdGlvbkNhbGxOb2RlKG1fZ2xvYmFsRGF0YSwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUobGluZU51bWJlciwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKG1fZ2xvYmFsRGF0
YSwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZShsaW5lTnVtYmVyLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QpOwogICAgIH0KICAgICBpZiAoZnVuYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkp
IHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJy
YWNrZXRBY2Nlc3Nvck5vZGUqPihmdW5jKTsKLSAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobV9n
bG9iYWxEYXRhLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBhcmdzLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZShsaW5lTnVtYmVyLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBh
cmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgICAgICBub2RlLT5z
ZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5lbmRPZmZzZXQo
KSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KQEAgLTgwMywxNzMgKzgwMywxNzMgQEAg
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbgogICAgIERvdEFjY2Vzc29y
Tm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZnVuYyk7CiAgICAgRnVu
Y3Rpb25DYWxsRG90Tm9kZSogbm9kZTsKICAgICBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5jYWxsKQotICAgICAgICBub2RlID0gbmV3IChtX2ds
b2JhbERhdGEpIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKG1fZ2xvYmFsRGF0YSwgZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0g
ZGl2b3QpOworICAgICAgICBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIENhbGxGdW5jdGlvbkNh
bGxEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJn
cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBlbHNlIGlmIChkb3Qt
PmlkZW50aWZpZXIoKSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFwcGx5KQotICAg
ICAgICBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSht
X2dsb2JhbERhdGEsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9nbG9i
YWxEYXRhKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobGluZU51bWJlciwgZG90LT5iYXNlKCks
IGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOwogICAgIGVsc2UKLSAgICAgICAgbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlv
bkNhbGxEb3ROb2RlKG1fZ2xvYmFsRGF0YSwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigp
LCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICBub2Rl
ID0gbmV3IChtX2dsb2JhbERhdGEpIEZ1bmN0aW9uQ2FsbERvdE5vZGUobGluZU51bWJlciwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwg
ZW5kIC0gZGl2b3QpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3Qo
KSwgZG90LT5lbmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHBhaXI8RXhwcmVzc2lv
bk5vZGUqLCBCaW5hcnlPcEluZm8+IGxocywgcGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9w
SW5mbz4gcmhzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKGlu
dCBsaW5lTnVtYmVyLCBpbnQgdG9rZW4sIHBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcElu
Zm8+IGxocywgcGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4gcmhzKQogewogICAg
IHN3aXRjaCAodG9rZW4pIHsKICAgICBjYXNlIE9SOgotICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIExvZ2ljYWxPcE5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJz
dCwgT3BMb2dpY2FsT3IpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExvZ2lj
YWxPcE5vZGUobGluZU51bWJlciwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbE9yKTsK
IAogICAgIGNhc2UgQU5EOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExvZ2lj
YWxPcE5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgT3BMb2dpY2FsQW5k
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsT3BOb2RlKGxpbmVO
dW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBPcExvZ2ljYWxBbmQpOwogCiAgICAgY2FzZSBC
SVRPUjoKLSAgICAgICAgcmV0dXJuIG1ha2VCaXRPck5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3Qs
IHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlQml0T3JOb2Rl
KGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1l
bnQpOwogCiAgICAgY2FzZSBCSVRYT1I6Ci0gICAgICAgIHJldHVybiBtYWtlQml0WE9yTm9kZShs
aHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAg
cmV0dXJuIG1ha2VCaXRYT3JOb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBCSVRBTkQ6Ci0gICAgICAgIHJl
dHVybiBtYWtlQml0QW5kTm9kZShsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNB
c3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VCaXRBbmROb2RlKGxpbmVOdW1iZXIsIGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2Fz
ZSBFUUVROgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVxdWFsTm9kZShtX2ds
b2JhbERhdGEsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQp
OworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVxdWFsTm9kZShsaW5lTnVtYmVy
LCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAg
IGNhc2UgTkU6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTm90RXF1YWxOb2Rl
KG1fZ2xvYmFsRGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTm90RXF1YWxOb2RlKGxp
bmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQp
OwogCiAgICAgY2FzZSBTVFJFUToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBT
dHJpY3RFcXVhbE5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNl
Y29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBT
dHJpY3RFcXVhbE5vZGUobGluZU51bWJlciwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNv
bmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNUUk5FUToKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBOb3RTdHJpY3RFcXVhbE5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBOb3RTdHJpY3RFcXVhbE5vZGUobGluZU51bWJlciwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIExU
OgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlc3NOb2RlKG1fZ2xvYmFsRGF0
YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTGVzc05vZGUobGluZU51bWJlciwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIEdU
OgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEdyZWF0ZXJOb2RlKG1fZ2xvYmFs
RGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRlck5vZGUobGluZU51bWJlciwg
bGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBj
YXNlIExFOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlc3NFcU5vZGUobV9n
bG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzRXFOb2RlKGxpbmVOdW1i
ZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAg
ICAgY2FzZSBHRToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBHcmVhdGVyRXFO
b2RlKG1fZ2xvYmFsRGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNz
aWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRlckVxTm9k
ZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25t
ZW50KTsKIAogICAgIGNhc2UgSU5TVEFOQ0VPRjogewotICAgICAgICBJbnN0YW5jZU9mTm9kZSog
bm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBJbnN0YW5jZU9mTm9kZShtX2dsb2JhbERhdGEsIGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBJ
bnN0YW5jZU9mTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBJbnN0YW5jZU9mTm9kZShs
aW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50
KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwg
cmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICB9CiAKICAgICBjYXNlIElOVE9LRU46IHsKLSAgICAgICAgSW5Ob2RlKiBub2RlID0gbmV3
IChtX2dsb2JhbERhdGEpIEluTm9kZShtX2dsb2JhbERhdGEsIGxocy5maXJzdCwgcmhzLmZpcnN0
LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgSW5Ob2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIGNhc2UgTFNISUZUOgotICAgICAg
ICByZXR1cm4gbWFrZUxlZnRTaGlmdE5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNv
bmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlTGVmdFNoaWZ0Tm9kZShsaW5l
TnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
IAogICAgIGNhc2UgUlNISUZUOgotICAgICAgICByZXR1cm4gbWFrZVJpZ2h0U2hpZnROb2RlKGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBy
ZXR1cm4gbWFrZVJpZ2h0U2hpZnROb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0
LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBVUlNISUZUOgotICAgICAg
ICByZXR1cm4gbWFrZVVSaWdodFNoaWZ0Tm9kZShsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNl
Y29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VVUmlnaHRTaGlmdE5vZGUo
bGluZU51bWJlciwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVu
dCk7CiAKICAgICBjYXNlIFBMVVM6Ci0gICAgICAgIHJldHVybiBtYWtlQWRkTm9kZShsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJu
IG1ha2VBZGROb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBNSU5VUzoKLSAgICAgICAgcmV0dXJuIG1ha2VT
dWJOb2RlKGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwor
ICAgICAgICByZXR1cm4gbWFrZVN1Yk5vZGUobGluZU51bWJlciwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFRJTUVTOgotICAgICAg
ICByZXR1cm4gbWFrZU11bHROb2RlKGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhh
c0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbWFrZU11bHROb2RlKGxpbmVOdW1iZXIsIGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2Fz
ZSBESVZJREU6Ci0gICAgICAgIHJldHVybiBtYWtlRGl2Tm9kZShsaHMuZmlyc3QsIHJocy5maXJz
dCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VEaXZOb2Rl
KGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1l
bnQpOwogCiAgICAgY2FzZSBNT0Q6Ci0gICAgICAgIHJldHVybiBtYWtlTW9kTm9kZShsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJu
IG1ha2VNb2ROb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOwogICAgIH0KICAgICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQog
Ci1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGxvYywgT3BlcmF0b3Igb3AsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGxvY0hhc0Fz
c2lnbm1lbnRzLCBib29sIGV4cHJIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUoaW50
IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgYm9vbCBsb2NIYXNBc3NpZ25tZW50cywgYm9vbCBleHBySGFzQXNzaWdubWVu
dHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogewogICAgIHVzZXNBc3NpZ25tZW50
KCk7CiAgICAgaWYgKCFsb2MtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBBc3NpZ25FcnJvck5vZGUobV9nbG9iYWxEYXRhLCBsb2MsIG9wLCBleHByLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIEFzc2lnbkVycm9yTm9kZShsaW5lTnVtYmVyLCBsb2MsIG9wLCBleHByLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogCiAgICAgaWYgKGxvYy0+aXNSZXNv
bHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkgewotICAgICAg
ICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWdu
UmVzb2x2ZU5vZGUobV9nbG9iYWxEYXRhLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGV4cHIsIGV4
cHJIYXNBc3NpZ25tZW50cyk7CisgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9
IG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25SZXNvbHZlTm9kZShsaW5lTnVtYmVyLCByZXNvbHZl
LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cyk7CiAgICAgICAgICAgICBz
ZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShtX2dsb2JhbERhdGEsIHJlc29sdmUtPmlkZW50aWZp
ZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQs
IGVuZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9k
aWZ5UmVzb2x2ZU5vZGUobGluZU51bWJlciwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZXhw
ciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3Qp
OwogICAgIH0KICAgICBpZiAobG9jLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAg
ICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vz
c29yTm9kZSo+KGxvYyk7CiAgICAgICAgIGlmIChvcCA9PSBPcEVxdWFsKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25CcmFja2V0Tm9kZShtX2dsb2JhbERhdGEs
IGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGV4cHIsIGxvY0hhc0Fzc2ln
bm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRp
dm90KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2b3QoKSk7Ci0gICAgICAgIFJlYWRNb2Rp
ZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5QnJhY2tl
dE5vZGUobV9nbG9iYWxEYXRhLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgp
LCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQXNzaWduQnJhY2tldE5vZGUobGluZU51bWJlciwgYnJhY2tldC0+YmFzZSgp
LCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNB
c3NpZ25tZW50cywgYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3QoKSAtIHN0YXJ0LCBl
bmQgLSBicmFja2V0LT5kaXZvdCgpKTsKKyAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBu
b2RlID0gbmV3IChtX2dsb2JhbERhdGEpIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShsaW5lTnVtYmVy
LCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFz
QXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+
ZGl2b3QoKSwgYnJhY2tldC0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAgICAgQVNTRVJUKGxvYy0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNz
b3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihsb2MpOwogICAgIGlm
IChvcCA9PSBPcEVxdWFsKQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFzc2ln
bkRvdE5vZGUobV9nbG9iYWxEYXRhLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4
cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFy
dCwgZW5kIC0gZG90LT5kaXZvdCgpKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBBc3NpZ25Eb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIo
KSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAt
IHN0YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCkpOwogCi0gICAgUmVhZE1vZGlmeURvdE5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVhZE1vZGlmeURvdE5vZGUobV9nbG9iYWxEYXRhLCBk
b3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVu
dHMsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgUmVhZE1vZGlmeURv
dE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVhZE1vZGlmeURvdE5vZGUobGluZU51
bWJlciwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fz
c2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIG5vZGUt
PnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5lbmRPZmZzZXQoKSk7CiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUHJl
Zml4Tm9kZShFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3AsIGludCBzdGFydCwgaW50
IGRpdm90LCBpbnQgZW5kKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3AsIGlu
dCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogewogICAgIHVzZXNBc3NpZ25tZW50KCk7CiAg
ICAgaWYgKCFleHByLT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgUHJlZml4RXJyb3JOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwciwgb3AsIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgUHJlZml4RXJyb3JOb2RlKGxpbmVOdW1iZXIsIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QpOwogCiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewog
ICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4o
ZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4UmVzb2x2ZU5v
ZGUobV9nbG9iYWxEYXRhLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBkaXZvdCwgZGl2b3Qg
LSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IFByZWZpeFJlc29sdmVOb2RlKGxpbmVOdW1iZXIsIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3As
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChleHBy
LT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2Rl
KiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAg
ICAgICBQcmVmaXhCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBQcmVmaXhC
cmFja2V0Tm9kZShtX2dsb2JhbERhdGEsIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2Ny
aXB0KCksIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICBQ
cmVmaXhCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBQcmVmaXhCcmFja2V0
Tm9kZShsaW5lTnVtYmVyLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBv
cCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0
U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+c3RhcnRPZmZzZXQo
KSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RB
Y2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxE
b3RBY2Nlc3Nvck5vZGUqPihleHByKTsKLSAgICBQcmVmaXhEb3ROb2RlKiBub2RlID0gbmV3ICht
X2dsb2JhbERhdGEpIFByZWZpeERvdE5vZGUobV9nbG9iYWxEYXRhLCBkb3QtPmJhc2UoKSwgZG90
LT5pZGVudGlmaWVyKCksIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwor
ICAgIFByZWZpeERvdE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4RG90Tm9k
ZShsaW5lTnVtYmVyLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIG9wLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25J
bmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5zdGFydE9mZnNldCgpKTsKICAgICByZXR1cm4gbm9kZTsK
IH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQb3N0Zml4Tm9kZShFeHByZXNz
aW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3AsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5k
KQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQb3N0Zml4Tm9kZShpbnQgbGluZU51
bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCkKIHsKICAgICB1c2VzQXNzaWdubWVudCgpOwogICAgIGlmICghZXhwci0+
aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFBvc3RmaXhF
cnJvck5vZGUobV9nbG9iYWxEYXRhLCBleHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4RXJy
b3JOb2RlKGxpbmVOdW1iZXIsIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0g
ZGl2b3QpOwogCiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNv
bHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeFJlc29sdmVOb2RlKG1fZ2xvYmFs
RGF0YSwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4UmVz
b2x2ZU5vZGUobGluZU51bWJlciwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZGl2b3QsIGRp
dm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tl
dEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQg
PSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIFBvc3Rm
aXhCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4QnJhY2tldE5v
ZGUobV9nbG9iYWxEYXRhLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBv
cCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgUG9zdGZpeEJy
YWNrZXROb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIFBvc3RmaXhCcmFja2V0Tm9kZShs
aW5lTnVtYmVyLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0U3ViZXhw
cmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZW5kT2Zmc2V0KCkpOwogICAg
ICAgICByZXR1cm4gbm9kZTsKIAogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nv
ck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nl
c3Nvck5vZGUqPihleHByKTsKLSAgICBQb3N0Zml4RG90Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9i
YWxEYXRhKSBQb3N0Zml4RG90Tm9kZShtX2dsb2JhbERhdGEsIGRvdC0+YmFzZSgpLCBkb3QtPmlk
ZW50aWZpZXIoKSwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAg
UG9zdGZpeERvdE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeERvdE5vZGUo
bGluZU51bWJlciwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZGl2b3QsIGRp
dm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5m
byhkb3QtPmRpdm90KCksIGRvdC0+ZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBub2RlOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1BhcnNlci5jcHAJKHJldmlzaW9u
IDk4NzMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1BhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjQ3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiSlNQYXJzZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2lu
Y2x1ZGUgIk5vZGVJbmZvLmgiCi0jaW5jbHVkZSAiQVNUQnVpbGRlci5oIgotI2luY2x1ZGUgIlNv
dXJjZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBKU0MgewotI2RlZmluZSBmYWlsKCkgZG8geyBp
ZiAoIW1fZXJyb3IpIHVwZGF0ZUVycm9yTWVzc2FnZSgpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkK
LSNkZWZpbmUgZmFpbFdpdGhUb2tlbih0b2spIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJv
ck1lc3NhZ2UodG9rKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxXaXRoTWVz
c2FnZShtc2cpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvck1lc3NhZ2UobXNnKTsgcmV0
dXJuIDA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxXaXRoTmFtZUFuZE1lc3NhZ2UoYmVmb3Jl
LCBuYW1lLCBhZnRlcikgZG8geyBpZiAoIW1fZXJyb3IpIHVwZGF0ZUVycm9yV2l0aE5hbWVBbmRN
ZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkKLSNkZWZp
bmUgZmFpbElmRmFsc2UoY29uZCkgZG8geyBpZiAoIShjb25kKSkgZmFpbCgpOyB9IHdoaWxlICgw
KQotI2RlZmluZSBmYWlsSWZGYWxzZVdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAoIShj
b25kKSkgZmFpbFdpdGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZkZh
bHNlV2l0aE5hbWVBbmRNZXNzYWdlKGNvbmQsIGJlZm9yZSwgbmFtZSwgbXNnKSBkbyB7IGlmICgh
KGNvbmQpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgbXNnKTsgfSB3aGls
ZSAoMCkKLSNkZWZpbmUgZmFpbElmVHJ1ZShjb25kKSBkbyB7IGlmICgoY29uZCkpIGZhaWwoKTsg
fSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFpbElmVHJ1ZVdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8g
eyBpZiAoKGNvbmQpKSBmYWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUg
ZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIG1zZykgZG8g
eyBpZiAoKGNvbmQpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgbXNnKTsg
fSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFpbElmVHJ1ZUlmU3RyaWN0KGNvbmQpIGRvIHsgaWYgKChj
b25kKSAmJiBzdHJpY3RNb2RlKCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFpbElm
VHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UoY29uZCwgbXNnKSBkbyB7IGlmICgoY29uZCkgJiYgc3Ry
aWN0TW9kZSgpKSBmYWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFp
bElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGNvbmQsIGJlZm9yZSwgbmFtZSwgYWZ0
ZXIpIGRvIHsgaWYgKChjb25kKSAmJiBzdHJpY3RNb2RlKCkpIGZhaWxXaXRoTmFtZUFuZE1lc3Nh
Z2UoYmVmb3JlLCBuYW1lLCBhZnRlcik7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZkZhbHNl
SWZTdHJpY3QoY29uZCkgZG8geyBpZiAoKCEoY29uZCkpICYmIHN0cmljdE1vZGUoKSkgZmFpbCgp
OyB9IHdoaWxlICgwKQotI2RlZmluZSBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE1lc3NhZ2UoY29u
ZCwgbXNnKSBkbyB7IGlmICgoIShjb25kKSkgJiYgc3RyaWN0TW9kZSgpKSBmYWlsV2l0aE1lc3Nh
Z2UobXNnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1l
QW5kTWVzc2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIGFmdGVyKSBkbyB7IGlmICgoIShjb25kKSkg
JiYgc3RyaWN0TW9kZSgpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0
ZXIpOyB9IHdoaWxlICgwKQotI2RlZmluZSBjb25zdW1lT3JGYWlsKHRva2VuVHlwZSkgZG8geyBp
ZiAoIWNvbnN1bWUodG9rZW5UeXBlKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxl
ICgwKQotI2RlZmluZSBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKHRva2VuVHlwZSwgZmxhZ3MpIGRv
IHsgaWYgKCFjb25zdW1lKHRva2VuVHlwZSwgZmxhZ3MpKSBmYWlsV2l0aFRva2VuKHRva2VuVHlw
ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hdGNoT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAo
IW1hdGNoKHRva2VuVHlwZSkpIGZhaWxXaXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkK
LSNkZWZpbmUgZmFpbElmU3RhY2tPdmVyZmxvdygpIGRvIHsgZmFpbElmRmFsc2VXaXRoTWVzc2Fn
ZShjYW5SZWN1cnNlKCksICJDb2RlIG5lc3RlZCB0b28gZGVlcGx5LiIpOyB9IHdoaWxlICgwKQot
Ci0vLyBNYWNyb3MgdG8gbWFrZSB0aGUgbW9yZSBjb21tb24gVHJlZUJ1aWxkZXIgdHlwZXMgYSBs
aXR0bGUgbGVzcyB2ZXJib3NlCi0jZGVmaW5lIFRyZWVTdGF0ZW1lbnQgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OlN0YXRlbWVudAotI2RlZmluZSBUcmVlRXhwcmVzc2lvbiB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6RXhwcmVzc2lvbgotI2RlZmluZSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCB0eXBlbmFt
ZSBUcmVlQnVpbGRlcjo6Rm9ybWFsUGFyYW1ldGVyTGlzdAotI2RlZmluZSBUcmVlU291cmNlRWxl
bWVudHMgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlNvdXJjZUVsZW1lbnRzCi0jZGVmaW5lIFRyZWVD
bGF1c2UgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkNsYXVzZQotI2RlZmluZSBUcmVlQ2xhdXNlTGlz
dCB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6Q2xhdXNlTGlzdAotI2RlZmluZSBUcmVlQ29uc3REZWNs
TGlzdCB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6Q29uc3REZWNsTGlzdAotI2RlZmluZSBUcmVlQXJn
dW1lbnRzIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpBcmd1bWVudHMKLSNkZWZpbmUgVHJlZUFyZ3Vt
ZW50c0xpc3QgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkFyZ3VtZW50c0xpc3QKLSNkZWZpbmUgVHJl
ZUZ1bmN0aW9uQm9keSB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5Ci0jZGVmaW5l
IFRyZWVQcm9wZXJ0eSB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6UHJvcGVydHkKLSNkZWZpbmUgVHJl
ZVByb3BlcnR5TGlzdCB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6UHJvcGVydHlMaXN0Ci0KLUNPTVBJ
TEVfQVNTRVJUKExhc3RVbnRhZ2dlZFRva2VuIDwgNjQsIExlc3NUaGFuNjRVbnRhZ2dlZFRva2Vu
cyk7Ci0KLWNsYXNzIEpTUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBKU1BhcnNlcihMZXhlciosIEpT
R2xvYmFsRGF0YSosIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wgaXNTdHJpY3RDb250ZXh0LCBi
b29sIGlzRnVuY3Rpb24sIGNvbnN0IFNvdXJjZUNvZGUqKTsKLSAgICBVU3RyaW5nIHBhcnNlUHJv
Z3JhbSgpOwotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQWxsb3dJbk92ZXJyaWRlIHsKLSAgICAgICAg
QWxsb3dJbk92ZXJyaWRlKEpTUGFyc2VyKiBwYXJzZXIpCi0gICAgICAgICAgICA6IG1fcGFyc2Vy
KHBhcnNlcikKLSAgICAgICAgICAgICwgbV9vbGRBbGxvd3NJbihwYXJzZXItPm1fYWxsb3dzSW4p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+bV9hbGxvd3NJbiA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgfkFsbG93SW5PdmVycmlkZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1fcGFyc2VyLT5tX2FsbG93c0luID0gbV9vbGRBbGxvd3NJbjsKLSAgICAgICAgfQotICAgICAg
ICBKU1BhcnNlciogbV9wYXJzZXI7Ci0gICAgICAgIGJvb2wgbV9vbGRBbGxvd3NJbjsKLSAgICB9
OwotICAgIAotICAgIHN0cnVjdCBTY29wZUxhYmVsSW5mbyB7Ci0gICAgICAgIFNjb3BlTGFiZWxJ
bmZvKFN0cmluZ0ltcGwqIGlkZW50LCBib29sIGlzTG9vcCkKLSAgICAgICAgOiBtX2lkZW50KGlk
ZW50KQotICAgICAgICAsIG1faXNMb29wKGlzTG9vcCkKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgICAgIFN0cmluZ0ltcGwqIG1faWRlbnQ7Ci0gICAgICAgIGJvb2wgbV9pc0xvb3A7Ci0gICAg
fTsKLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dCh1bnNpZ25lZCBsZXhUeXBlID0g
MCkKLSAgICB7Ci0gICAgICAgIG1fbGFzdExpbmUgPSBtX3Rva2VuLm1faW5mby5saW5lOwotICAg
ICAgICBtX2xhc3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9pbmZvLmVuZE9mZnNldDsKLSAgICAgICAg
bV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobV9sYXN0TGluZSk7Ci0gICAgICAgIG1fdG9rZW4u
bV90eXBlID0gbV9sZXhlci0+bGV4KCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4ubV9pbmZvLCBs
ZXhUeXBlLCBzdHJpY3RNb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgbmV4dEV4cGVjdElkZW50aWZpZXIodW5zaWduZWQgbGV4VHlwZSA9IDApCi0gICAgewotICAg
ICAgICBtX2xhc3RMaW5lID0gbV90b2tlbi5tX2luZm8ubGluZTsKLSAgICAgICAgbV9sYXN0VG9r
ZW5FbmQgPSBtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXItPnNldExh
c3RMaW5lTnVtYmVyKG1fbGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4
ZXItPmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4ubV9kYXRhLCAmbV90b2tlbi5tX2luZm8s
IGxleFR5cGUsIHN0cmljdE1vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBuZXh0VG9rZW5Jc0NvbG9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xleGVyLT5u
ZXh0VG9rZW5Jc0NvbG9uKCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNvbnN1
bWUoSlNUb2tlblR5cGUgZXhwZWN0ZWQsIHVuc2lnbmVkIGZsYWdzID0gMCkKLSAgICB7Ci0gICAg
ICAgIGJvb2wgcmVzdWx0ID0gbV90b2tlbi5tX3R5cGUgPT0gZXhwZWN0ZWQ7Ci0gICAgICAgIGlm
IChyZXN1bHQpCi0gICAgICAgICAgICBuZXh0KGZsYWdzKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIFVTdHJpbmcgZ2V0VG9rZW4oKSB7Ci0gICAg
ICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciA9IG1fc291cmNlLT5wcm92aWRlcigp
OwotICAgICAgICByZXR1cm4gVVN0cmluZyhzb3VyY2VQcm92aWRlci0+Z2V0UmFuZ2UodG9rZW5T
dGFydCgpLCB0b2tlbkVuZCgpKS5pbXBsKCkpOwotICAgIH0KLSAgICAKLSAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgbWF0Y2goSlNUb2tlblR5cGUgZXhwZWN0ZWQpCi0gICAgewotICAgICAgICByZXR1
cm4gbV90b2tlbi5tX3R5cGUgPT0gZXhwZWN0ZWQ7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSBpbnQgdG9rZW5TdGFydCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90b2tlbi5tX2luZm8u
c3RhcnRPZmZzZXQ7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgdG9rZW5MaW5lKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Rva2VuLm1faW5mby5saW5lOwotICAgIH0KLQotICAg
IEFMV0FZU19JTkxJTkUgaW50IHRva2VuRW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Rv
a2VuLm1faW5mby5lbmRPZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IGNoYXIqIGdldFRv
a2VuTmFtZShKU1Rva2VuVHlwZSB0b2spIAotICAgIHsKLSAgICAgICAgc3dpdGNoICh0b2spIHsK
LSAgICAgICAgY2FzZSBOVUxMVE9LRU46IAotICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKLSAg
ICAgICAgY2FzZSBUUlVFVE9LRU46Ci0gICAgICAgICAgICByZXR1cm4gInRydWUiOwotICAgICAg
ICBjYXNlIEZBTFNFVE9LRU46IAotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7Ci0gICAgICAg
IGNhc2UgQlJFQUs6IAotICAgICAgICAgICAgcmV0dXJuICJicmVhayI7Ci0gICAgICAgIGNhc2Ug
Q0FTRTogCi0gICAgICAgICAgICByZXR1cm4gImNhc2UiOwotICAgICAgICBjYXNlIERFRkFVTFQ6
IAotICAgICAgICAgICAgcmV0dXJuICJkZWZ1YWx0IjsKLSAgICAgICAgY2FzZSBGT1I6IAotICAg
ICAgICAgICAgcmV0dXJuICJmb3IiOwotICAgICAgICBjYXNlIE5FVzogCi0gICAgICAgICAgICBy
ZXR1cm4gIm5ldyI7Ci0gICAgICAgIGNhc2UgVkFSOiAKLSAgICAgICAgICAgIHJldHVybiAidmFy
IjsKLSAgICAgICAgY2FzZSBDT05TVFRPS0VOOiAKLSAgICAgICAgICAgIHJldHVybiAiY29uc3Qi
OwotICAgICAgICBjYXNlIENPTlRJTlVFOiAKLSAgICAgICAgICAgIHJldHVybiAiY29udGludWUi
OwotICAgICAgICBjYXNlIEZVTkNUSU9OOiAKLSAgICAgICAgICAgIHJldHVybiAiZnVuY3Rpb24i
OwotICAgICAgICBjYXNlIElGOiAKLSAgICAgICAgICAgIHJldHVybiAiaWYiOwotICAgICAgICBj
YXNlIFRISVNUT0tFTjogCi0gICAgICAgICAgICByZXR1cm4gInRoaXMiOwotICAgICAgICBjYXNl
IERPOiAKLSAgICAgICAgICAgIHJldHVybiAiZG8iOwotICAgICAgICBjYXNlIFdISUxFOiAKLSAg
ICAgICAgICAgIHJldHVybiAid2hpbGUiOwotICAgICAgICBjYXNlIFNXSVRDSDogCi0gICAgICAg
ICAgICByZXR1cm4gInN3aXRjaCI7Ci0gICAgICAgIGNhc2UgV0lUSDogCi0gICAgICAgICAgICBy
ZXR1cm4gIndpdGgiOwotICAgICAgICBjYXNlIFRIUk9XOiAKLSAgICAgICAgICAgIHJldHVybiAi
dGhyb3ciOwotICAgICAgICBjYXNlIFRSWTogCi0gICAgICAgICAgICByZXR1cm4gInRyeSI7Ci0g
ICAgICAgIGNhc2UgQ0FUQ0g6IAotICAgICAgICAgICAgcmV0dXJuICJjYXRjaCI7Ci0gICAgICAg
IGNhc2UgRklOQUxMWTogCi0gICAgICAgICAgICByZXR1cm4gImZpbmFsbHkiOwotICAgICAgICBj
YXNlIERFQlVHR0VSOiAKLSAgICAgICAgICAgIHJldHVybiAiZGVidWdnZXIiOwotICAgICAgICBj
YXNlIEVMU0U6IAotICAgICAgICAgICAgcmV0dXJuICJlbHNlIjsKLSAgICAgICAgY2FzZSBPUEVO
QlJBQ0U6IAotICAgICAgICAgICAgcmV0dXJuICJ7IjsKLSAgICAgICAgY2FzZSBDTE9TRUJSQUNF
OiAKLSAgICAgICAgICAgIHJldHVybiAifSI7Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVOOiAKLSAg
ICAgICAgICAgIHJldHVybiAiKCI7Ci0gICAgICAgIGNhc2UgQ0xPU0VQQVJFTjogCi0gICAgICAg
ICAgICByZXR1cm4gIikiOwotICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiAKLSAgICAgICAgICAg
IHJldHVybiAiWyI7Ci0gICAgICAgIGNhc2UgQ0xPU0VCUkFDS0VUOiAKLSAgICAgICAgICAgIHJl
dHVybiAiXSI7Ci0gICAgICAgIGNhc2UgQ09NTUE6IAotICAgICAgICAgICAgcmV0dXJuICIsIjsK
LSAgICAgICAgY2FzZSBRVUVTVElPTjogCi0gICAgICAgICAgICByZXR1cm4gIj8iOwotICAgICAg
ICBjYXNlIFNFTUlDT0xPTjogCi0gICAgICAgICAgICByZXR1cm4gIjsiOwotICAgICAgICBjYXNl
IENPTE9OOiAKLSAgICAgICAgICAgIHJldHVybiAiOiI7Ci0gICAgICAgIGNhc2UgRE9UOiAKLSAg
ICAgICAgICAgIHJldHVybiAiLiI7Ci0gICAgICAgIGNhc2UgRVFVQUw6IAotICAgICAgICAgICAg
cmV0dXJuICI9IjsKLSAgICAgICAgY2FzZSBQTFVTRVFVQUw6IAotICAgICAgICAgICAgcmV0dXJu
ICIrPSI7Ci0gICAgICAgIGNhc2UgTUlOVVNFUVVBTDogCi0gICAgICAgICAgICByZXR1cm4gIi09
IjsKLSAgICAgICAgY2FzZSBNVUxURVFVQUw6IAotICAgICAgICAgICAgcmV0dXJuICIqPSI7Ci0g
ICAgICAgIGNhc2UgRElWRVFVQUw6IAotICAgICAgICAgICAgcmV0dXJuICIvPSI7Ci0gICAgICAg
IGNhc2UgTFNISUZURVFVQUw6IAotICAgICAgICAgICAgcmV0dXJuICI8PD0iOwotICAgICAgICBj
YXNlIFJTSElGVEVRVUFMOiAKLSAgICAgICAgICAgIHJldHVybiAiPj49IjsKLSAgICAgICAgY2Fz
ZSBVUlNISUZURVFVQUw6IAotICAgICAgICAgICAgcmV0dXJuICI+Pj49IjsKLSAgICAgICAgY2Fz
ZSBBTkRFUVVBTDogCi0gICAgICAgICAgICByZXR1cm4gIiY9IjsKLSAgICAgICAgY2FzZSBNT0RF
UVVBTDogCi0gICAgICAgICAgICByZXR1cm4gIiU9IjsKLSAgICAgICAgY2FzZSBYT1JFUVVBTDog
Ci0gICAgICAgICAgICByZXR1cm4gIl49IjsKLSAgICAgICAgY2FzZSBPUkVRVUFMOiAKLSAgICAg
ICAgICAgIHJldHVybiAifD0iOwotICAgICAgICBjYXNlIEFVVE9QTFVTUExVUzogCi0gICAgICAg
IGNhc2UgUExVU1BMVVM6IAotICAgICAgICAgICAgcmV0dXJuICIrKyI7Ci0gICAgICAgIGNhc2Ug
QVVUT01JTlVTTUlOVVM6IAotICAgICAgICBjYXNlIE1JTlVTTUlOVVM6IAotICAgICAgICAgICAg
cmV0dXJuICItLSI7Ci0gICAgICAgIGNhc2UgRVhDTEFNQVRJT046IAotICAgICAgICAgICAgcmV0
dXJuICIhIjsKLSAgICAgICAgY2FzZSBUSUxERTogCi0gICAgICAgICAgICByZXR1cm4gIn4iOwot
ICAgICAgICBjYXNlIFRZUEVPRjogCi0gICAgICAgICAgICByZXR1cm4gInR5cGVvZiI7Ci0gICAg
ICAgIGNhc2UgVk9JRFRPS0VOOiAKLSAgICAgICAgICAgIHJldHVybiAidm9pZCI7Ci0gICAgICAg
IGNhc2UgREVMRVRFVE9LRU46IAotICAgICAgICAgICAgcmV0dXJuICJkZWxldGUiOwotICAgICAg
ICBjYXNlIE9SOiAKLSAgICAgICAgICAgIHJldHVybiAifHwiOwotICAgICAgICBjYXNlIEFORDog
Ci0gICAgICAgICAgICByZXR1cm4gIiYmIjsKLSAgICAgICAgY2FzZSBCSVRPUjogCi0gICAgICAg
ICAgICByZXR1cm4gInwiOwotICAgICAgICBjYXNlIEJJVFhPUjogCi0gICAgICAgICAgICByZXR1
cm4gIl4iOwotICAgICAgICBjYXNlIEJJVEFORDogCi0gICAgICAgICAgICByZXR1cm4gIiYiOwot
ICAgICAgICBjYXNlIEVRRVE6IAotICAgICAgICAgICAgcmV0dXJuICI9PSI7Ci0gICAgICAgIGNh
c2UgTkU6IAotICAgICAgICAgICAgcmV0dXJuICIhPSI7Ci0gICAgICAgIGNhc2UgU1RSRVE6IAot
ICAgICAgICAgICAgcmV0dXJuICI9PT0iOwotICAgICAgICBjYXNlIFNUUk5FUTogCi0gICAgICAg
ICAgICByZXR1cm4gIiE9PSI7Ci0gICAgICAgIGNhc2UgTFQ6IAotICAgICAgICAgICAgcmV0dXJu
ICI8IjsKLSAgICAgICAgY2FzZSBHVDogCi0gICAgICAgICAgICByZXR1cm4gIj4iOwotICAgICAg
ICBjYXNlIExFOiAKLSAgICAgICAgICAgIHJldHVybiAiPD0iOwotICAgICAgICBjYXNlIEdFOiAK
LSAgICAgICAgICAgIHJldHVybiAiPj0iOwotICAgICAgICBjYXNlIElOU1RBTkNFT0Y6IAotICAg
ICAgICAgICAgcmV0dXJuICJpbnN0YW5jZW9mIjsKLSAgICAgICAgY2FzZSBJTlRPS0VOOiAKLSAg
ICAgICAgICAgIHJldHVybiAiaW4iOwotICAgICAgICBjYXNlIExTSElGVDogCi0gICAgICAgICAg
ICByZXR1cm4gIjw8IjsKLSAgICAgICAgY2FzZSBSU0hJRlQ6IAotICAgICAgICAgICAgcmV0dXJu
ICI+PiI7Ci0gICAgICAgIGNhc2UgVVJTSElGVDogCi0gICAgICAgICAgICByZXR1cm4gIj4+PiI7
Ci0gICAgICAgIGNhc2UgUExVUzogCi0gICAgICAgICAgICByZXR1cm4gIisiOwotICAgICAgICBj
YXNlIE1JTlVTOiAKLSAgICAgICAgICAgIHJldHVybiAiLSI7Ci0gICAgICAgIGNhc2UgVElNRVM6
IAotICAgICAgICAgICAgcmV0dXJuICIqIjsKLSAgICAgICAgY2FzZSBESVZJREU6IAotICAgICAg
ICAgICAgcmV0dXJuICIvIjsKLSAgICAgICAgY2FzZSBNT0Q6IAotICAgICAgICAgICAgcmV0dXJu
ICIlIjsKLSAgICAgICAgY2FzZSBSRVRVUk46IAotICAgICAgICBjYXNlIFJFU0VSVkVEX0lGX1NU
UklDVDoKLSAgICAgICAgY2FzZSBSRVNFUlZFRDogCi0gICAgICAgIGNhc2UgTlVNQkVSOgotICAg
ICAgICBjYXNlIElERU5UOiAKLSAgICAgICAgY2FzZSBTVFJJTkc6IAotICAgICAgICBjYXNlIEVS
Uk9SVE9LOgotICAgICAgICBjYXNlIEVPRlRPSzogCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgY2FzZSBMYXN0VW50YWdnZWRUb2tlbjogCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuICJpbnRl
cm5hbCBlcnJvciI7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1cGRhdGVF
cnJvck1lc3NhZ2VTcGVjaWFsQ2FzZShKU1Rva2VuVHlwZSBleHBlY3RlZFRva2VuKSAKLSAgICB7
Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRU
b2tlbikgewotICAgICAgICBjYXNlIFJFU0VSVkVEX0lGX1NUUklDVDoKLSAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSA9ICJVc2Ugb2YgcmVzZXJ2ZWQgd29yZCAnIjsKLSAgICAgICAgICAgIGVycm9y
TWVzc2FnZSArPSBnZXRUb2tlbigpLmltcGwoKTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSAr
PSAiJyBpbiBzdHJpY3QgbW9kZSI7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9y
TWVzc2FnZS5pbXBsKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgUkVTRVJW
RUQ6Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVXNlIG9mIHJlc2VydmVkIHdvcmQgJyI7
Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7Ci0gICAgICAg
ICAgICBlcnJvck1lc3NhZ2UgKz0gIiciOwotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBl
cnJvck1lc3NhZ2UuaW1wbCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE5V
TUJFUjogCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVW5leHBlY3RlZCBudW1iZXIgJyI7
Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7Ci0gICAgICAg
ICAgICBlcnJvck1lc3NhZ2UgKz0gIiciOwotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBl
cnJvck1lc3NhZ2UuaW1wbCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIElE
RU5UOiAKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJFeHBlY3RlZCBhbiBpZGVudGlmaWVy
IGJ1dCBmb3VuZCAnIjsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmlt
cGwoKTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAiJyBpbnN0ZWFkIjsKLSAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmltcGwoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBTVFJJTkc6IAotICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
IlVuZXhwZWN0ZWQgc3RyaW5nICI7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9r
ZW4oKS5pbXBsKCk7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZS5p
bXBsKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRVJST1JUT0s6IAotICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlID0gIlVucmVjb2duaXplZCB0b2tlbiAnIjsKLSAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmltcGwoKTsKLSAgICAgICAgICAgIGVycm9y
TWVzc2FnZSArPSAiJyI7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2Fn
ZS5pbXBsKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRU9GVE9LOiAgCi0g
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJVbmV4cGVjdGVkIEVPRiI7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgUkVUVVJOOgotICAgICAgICAgICAgbV9lcnJvck1lc3Nh
Z2UgPSAiUmV0dXJuIHN0YXRlbWVudHMgYXJlIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyI7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImludGVybmFs
IGVycm9yIjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAg
Ci0gICAgTkVWRVJfSU5MSU5FIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKCkgCi0gICAgewotICAg
ICAgICBtX2Vycm9yID0gdHJ1ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGdldFRva2Vu
TmFtZShtX3Rva2VuLm1fdHlwZSk7Ci0gICAgICAgIGlmICghbmFtZSkgCi0gICAgICAgICAgICB1
cGRhdGVFcnJvck1lc3NhZ2VTcGVjaWFsQ2FzZShtX3Rva2VuLm1fdHlwZSk7Ci0gICAgICAgIGVs
c2UgCi0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IFVTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IlVuZXhwZWN0ZWQgdG9rZW4gJyVzJyIsIG5hbWUpLmltcGwoKSk7Ci0gICAgfQotICAgIAotICAg
IE5FVkVSX0lOTElORSB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZShKU1Rva2VuVHlwZSBleHBlY3Rl
ZFRva2VuKSAKLSAgICB7Ci0gICAgICAgIG1fZXJyb3IgPSB0cnVlOwotICAgICAgICBjb25zdCBj
aGFyKiBuYW1lID0gZ2V0VG9rZW5OYW1lKGV4cGVjdGVkVG9rZW4pOwotICAgICAgICBpZiAobmFt
ZSkKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gVVN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
RXhwZWN0ZWQgdG9rZW4gJyVzJyIsIG5hbWUpLmltcGwoKSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaWYgKCFnZXRUb2tlbk5hbWUobV90b2tlbi5tX3R5cGUpKQotICAgICAgICAgICAg
ICAgIHVwZGF0ZUVycm9yTWVzc2FnZVNwZWNpYWxDYXNlKG1fdG9rZW4ubV90eXBlKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1cGRhdGVFcnJvck1lc3NhZ2VTcGVjaWFsQ2Fz
ZShleHBlY3RlZFRva2VuKTsKLSAgICAgICAgfSAKLSAgICB9Ci0gICAgCi0gICAgTkVWRVJfSU5M
SU5FIHZvaWQgdXBkYXRlRXJyb3JXaXRoTmFtZUFuZE1lc3NhZ2UoY29uc3QgY2hhciogYmVmb3Jl
TXNnLCBVU3RyaW5nIG5hbWUsIGNvbnN0IGNoYXIqIGFmdGVyTXNnKSAKLSAgICB7Ci0gICAgICAg
IG1fZXJyb3IgPSB0cnVlOwotICAgICAgICBTdHJpbmcgcHJlZml4KGJlZm9yZU1zZyk7Ci0gICAg
ICAgIFN0cmluZyBwb3N0Zml4KGFmdGVyTXNnKTsKLSAgICAgICAgcHJlZml4ICs9ICIgJyI7Ci0g
ICAgICAgIHByZWZpeCArPSBuYW1lLmltcGwoKTsKLSAgICAgICAgcHJlZml4ICs9ICInICI7Ci0g
ICAgICAgIHByZWZpeCArPSBwb3N0Zml4OwotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHByZWZp
eC5pbXBsKCk7Ci0gICAgfQotICAgIAotICAgIE5FVkVSX0lOTElORSB2b2lkIHVwZGF0ZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIAotICAgIHsgICAKLSAgICAgICAgbV9lcnJvciA9IHRy
dWU7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gVVN0cmluZyhtc2cpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9vcCgpOyB9Ci0g
ICAgdm9pZCBlbmRMb29wKCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9Ci0gICAgdm9p
ZCBzdGFydFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0U3dpdGNoKCk7IH0KLSAgICB2
b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPmVuZFN3aXRjaCgpOyB9Ci0gICAgdm9p
ZCBzZXRTdHJpY3RNb2RlKCkgeyBjdXJyZW50U2NvcGUoKS0+c2V0U3RyaWN0TW9kZSgpOyB9Ci0g
ICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPnN0cmljdE1vZGUo
KTsgfQotICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50U2NvcGUo
KS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQotICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihjb25z
dCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xhcmVQYXJh
bWV0ZXIoaWRlbnQpOyB9Ci0gICAgYm9vbCBicmVha0lzVmFsaWQoKQotICAgIHsKLSAgICAgICAg
U2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29wZSgpOwotICAgICAgICB3aGlsZSAoIWN1cnJl
bnQtPmJyZWFrSXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ29udGFp
bmluZ1Njb3BlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQuY29udGFpbmluZ1Njb3BlKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGJvb2wgY29udGludWVJc1ZhbGlkKCkKLSAgICB7Ci0g
ICAgICAgIFNjb3BlUmVmIGN1cnJlbnQgPSBjdXJyZW50U2NvcGUoKTsKLSAgICAgICAgd2hpbGUg
KCFjdXJyZW50LT5jb250aW51ZUlzVmFsaWQoKSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50
Lmhhc0NvbnRhaW5pbmdTY29wZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNvbnRhaW5pbmdTY29wZSgpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB2b2lkIHB1c2hMYWJlbChjb25zdCBJ
ZGVudGlmaWVyKiBsYWJlbCwgYm9vbCBpc0xvb3ApIHsgY3VycmVudFNjb3BlKCktPnB1c2hMYWJl
bChsYWJlbCwgaXNMb29wKTsgfQotICAgIHZvaWQgcG9wTGFiZWwoKSB7IGN1cnJlbnRTY29wZSgp
LT5wb3BMYWJlbCgpOyB9Ci0gICAgU2NvcGVMYWJlbEluZm8qIGdldExhYmVsKGNvbnN0IElkZW50
aWZpZXIqIGxhYmVsKQotICAgIHsKLSAgICAgICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRT
Y29wZSgpOwotICAgICAgICBTY29wZUxhYmVsSW5mbyogcmVzdWx0ID0gMDsKLSAgICAgICAgd2hp
bGUgKCEocmVzdWx0ID0gY3VycmVudC0+Z2V0TGFiZWwobGFiZWwpKSkgewotICAgICAgICAgICAg
aWYgKCFjdXJyZW50Lmhhc0NvbnRhaW5pbmdTY29wZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY29udGFpbmluZ1Njb3BlKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBlbnVtIFNvdXJj
ZUVsZW1lbnRzTW9kZSB7IENoZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3RyaWN0TW9k
ZSB9OwotICAgIHRlbXBsYXRlIDxTb3VyY2VFbGVtZW50c01vZGUgbW9kZSwgY2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZVNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVy
Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNl
U3RhdGVtZW50KFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomIGRpcmVjdGl2ZSk7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVZhckRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlQ29uc3RE
ZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VXaGlsZVN0
YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBwYXJzZUZvclN0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUJyZWFrU3RhdGVtZW50
KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlQ29udGludWVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VSZXR1cm5TdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lbnQgcGFyc2VUaHJvd1N0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVdpdGhTdGF0ZW1lbnQoVHJlZUJ1
aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2VMaXN0IHBhcnNlU3dpdGNoQ2xhdXNlcyhUcmVlQnVpbGRl
ciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSBwYXJzZVN3
aXRjaERlZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VUcnlTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VEZWJ1
Z2dlclN0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VF
eHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUlmU3RhdGVtZW50KFRyZWVCdWls
ZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRy
ZWVTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNl
Q29uZGl0aW9uYWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlQmluYXJ5RXhw
cmVzc2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
QUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbihUcmVlQnVp
bGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24g
cGFyc2VNZW1iZXJFeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VBcnJheUxpdGVyYWwoVHJlZUJ1aWxk
ZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJl
ZUV4cHJlc3Npb24gcGFyc2VPYmplY3RMaXRlcmFsKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNl
U3RyaWN0T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQXJndW1lbnRzIHBhcnNlQXJndW1lbnRzKFRy
ZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0LCBjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlUHJvcGVydHkgcGFyc2VQcm9wZXJ0eShUcmVlQnVpbGRlciYp
OwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVu
Y3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xh
cmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlm
aWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlk
ZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQ29uc3REZWNsTGlzdCBwYXJzZUNv
bnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KTsKLSAgICBlbnVtIEZ1bmN0
aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25OZWVkc05h
bWUgfTsKLSAgICB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5D
b250YWluaW5nU2NvcGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIHBhcnNlRnVuY3Rpb25JbmZv
KFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlz
dCYsIFRyZWVGdW5jdGlvbkJvZHkmLCBpbnQmIG9wZW5CcmFjZSwgaW50JiBjbG9zZUJyYWNlLCBp
bnQmIGJvZHlTdGFydExpbmUpOwotICAgIEFMV0FZU19JTkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0
b3IoSlNUb2tlblR5cGUgdG9rZW4pOwotICAgIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24o
KTsKLQotICAgIGJvb2wgYXV0b1NlbWlDb2xvbigpCi0gICAgewotICAgICAgICBpZiAobV90b2tl
bi5tX3R5cGUgPT0gU0VNSUNPTE9OKSB7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWxsb3dBdXRvbWF0aWNT
ZW1pY29sb24oKTsKLSAgICB9Ci0KLSAgICBib29sIGNhblJlY3Vyc2UoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKTsKLSAgICB9Ci0gICAgCi0gICAgaW50
IGxhc3RUb2tlbkVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5F
bmQ7Ci0gICAgfQotCi0gICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKLSAgICBMZXhlciogbV9sZXhl
cjsKLSAgICBTdGFja0JvdW5kcyBtX3N0YWNrOwotICAgIGJvb2wgbV9lcnJvcjsKLSAgICBVU3Ry
aW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAg
IEpTVG9rZW4gbV90b2tlbjsKLSAgICBib29sIG1fYWxsb3dzSW47Ci0gICAgaW50IG1fbGFzdExp
bmU7Ci0gICAgaW50IG1fbGFzdFRva2VuRW5kOwotICAgIGludCBtX2Fzc2lnbm1lbnRDb3VudDsK
LSAgICBpbnQgbV9ub25MSFNDb3VudDsKLSAgICBib29sIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRl
ZDsKLSAgICBpbnQgbV9zdGF0ZW1lbnREZXB0aDsKLSAgICBpbnQgbV9ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50OwotICAgIGNvbnN0IElkZW50aWZpZXIqIG1fbGFzdElkZW50aWZpZXI7Ci0KLSAg
ICBzdHJ1Y3QgRGVwdGhNYW5hZ2VyIHsKLSAgICAgICAgRGVwdGhNYW5hZ2VyKGludCogZGVwdGgp
Ci0gICAgICAgICAgICA6IG1fb3JpZ2luYWxEZXB0aCgqZGVwdGgpCi0gICAgICAgICAgICAsIG1f
ZGVwdGgoZGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgfkRl
cHRoTWFuYWdlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgICptX2RlcHRoID0gbV9vcmlnaW5h
bERlcHRoOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBt
X29yaWdpbmFsRGVwdGg7Ci0gICAgICAgIGludCogbV9kZXB0aDsKLSAgICB9OwotICAgIAotICAg
IHN0cnVjdCBTY29wZSB7Ci0gICAgICAgIFNjb3BlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCBpc0Z1bmN0aW9uLCBib29sIHN0cmljdE1vZGUpCi0gICAgICAgICAgICA6IG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fdXNlc0V2YWwoZmFsc2UpCi0gICAgICAgICAgICAsIG1fbmVlZHNG
dWxsQWN0aXZhdGlvbihmYWxzZSkKLSAgICAgICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyh0cnVl
KQotICAgICAgICAgICAgLCBtX3N0cmljdE1vZGUoc3RyaWN0TW9kZSkKLSAgICAgICAgICAgICwg
bV9pc0Z1bmN0aW9uKGlzRnVuY3Rpb24pCi0gICAgICAgICAgICAsIG1faXNGdW5jdGlvbkJvdW5k
YXJ5KGZhbHNlKQotICAgICAgICAgICAgLCBtX2lzVmFsaWRTdHJpY3RNb2RlKHRydWUpCi0gICAg
ICAgICAgICAsIG1fbG9vcERlcHRoKDApCi0gICAgICAgICAgICAsIG1fc3dpdGNoRGVwdGgoMCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgU2NvcGUoY29uc3QgU2NvcGUmIHJocykK
LSAgICAgICAgICAgIDogbV9nbG9iYWxEYXRhKHJocy5tX2dsb2JhbERhdGEpCi0gICAgICAgICAg
ICAsIG1fc2hhZG93c0FyZ3VtZW50cyhyaHMubV9zaGFkb3dzQXJndW1lbnRzKQotICAgICAgICAg
ICAgLCBtX3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQotICAgICAgICAgICAgLCBtX25lZWRzRnVs
bEFjdGl2YXRpb24ocmhzLm1fbmVlZHNGdWxsQWN0aXZhdGlvbikKLSAgICAgICAgICAgICwgbV9h
bGxvd3NOZXdEZWNscyhyaHMubV9hbGxvd3NOZXdEZWNscykKLSAgICAgICAgICAgICwgbV9zdHJp
Y3RNb2RlKHJocy5tX3N0cmljdE1vZGUpCi0gICAgICAgICAgICAsIG1faXNGdW5jdGlvbihyaHMu
bV9pc0Z1bmN0aW9uKQotICAgICAgICAgICAgLCBtX2lzRnVuY3Rpb25Cb3VuZGFyeShyaHMubV9p
c0Z1bmN0aW9uQm91bmRhcnkpCi0gICAgICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUocmhz
Lm1faXNWYWxpZFN0cmljdE1vZGUpCi0gICAgICAgICAgICAsIG1fbG9vcERlcHRoKHJocy5tX2xv
b3BEZXB0aCkKLSAgICAgICAgICAgICwgbV9zd2l0Y2hEZXB0aChyaHMubV9zd2l0Y2hEZXB0aCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJocy5tX2xhYmVscykgewotICAgICAgICAgICAg
ICAgIG1fbGFiZWxzID0gYWRvcHRQdHIobmV3IExhYmVsU3RhY2spOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHR5cGVkZWYgTGFiZWxTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3I7Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0gcmhzLm1fbGFiZWxzLT5lbmQo
KTsKLSAgICAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFiZWxzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBl
bmQoU2NvcGVMYWJlbEluZm8oaXQtPm1faWRlbnQsIGl0LT5tX2lzTG9vcCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgbV9zd2l0Y2hE
ZXB0aCsrOyB9Ci0gICAgICAgIHZvaWQgZW5kU3dpdGNoKCkgeyBtX3N3aXRjaERlcHRoLS07IH0K
LSAgICAgICAgdm9pZCBzdGFydExvb3AoKSB7IG1fbG9vcERlcHRoKys7IH0KLSAgICAgICAgdm9p
ZCBlbmRMb29wKCkgeyBBU1NFUlQobV9sb29wRGVwdGgpOyBtX2xvb3BEZXB0aC0tOyB9Ci0gICAg
ICAgIGJvb2wgaW5Mb29wKCkgeyByZXR1cm4gISFtX2xvb3BEZXB0aDsgfQotICAgICAgICBib29s
IGJyZWFrSXNWYWxpZCgpIHsgcmV0dXJuIG1fbG9vcERlcHRoIHx8IG1fc3dpdGNoRGVwdGg7IH0K
LSAgICAgICAgYm9vbCBjb250aW51ZUlzVmFsaWQoKSB7IHJldHVybiBtX2xvb3BEZXB0aDsgfQot
Ci0gICAgICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIqIGxhYmVsLCBib29sIGlz
TG9vcCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2xhYmVscykKLSAgICAgICAgICAg
ICAgICBtX2xhYmVscyA9IGFkb3B0UHRyKG5ldyBMYWJlbFN0YWNrKTsKLSAgICAgICAgICAgIG1f
bGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwtPmltcGwoKSwgaXNMb29wKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIHBvcExhYmVsKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKG1fbGFiZWxzKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2xhYmVscy0+c2l6ZSgp
KTsKLSAgICAgICAgICAgIG1fbGFiZWxzLT5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBTY29wZUxhYmVsSW5mbyogZ2V0TGFiZWwoY29uc3QgSWRlbnRpZmllciogbGFiZWwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9sYWJlbHMpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gbV9sYWJlbHMtPnNpemUoKTsgaSA+IDA7
IGktLSkgewotICAgICAgICAgICAgICAgIGlmIChtX2xhYmVscy0+YXQoaSAtIDEpLm1faWRlbnQg
PT0gbGFiZWwtPmltcGwoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZtX2xhYmVscy0+
YXQoaSAtIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldElzRnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2lzRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgbV9pc0Z1bmN0aW9uQm91bmRhcnkg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNGdW5jdGlvbigpIHsgcmV0dXJuIG1f
aXNGdW5jdGlvbjsgfQotICAgICAgICBib29sIGlzRnVuY3Rpb25Cb3VuZGFyeSgpIHsgcmV0dXJu
IG1faXNGdW5jdGlvbkJvdW5kYXJ5OyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGRlY2xhcmVW
YXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZh
bCAhPSAqaWRlbnQgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgIT0g
KmlkZW50OwotICAgICAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmlj
dE1vZGUgJiYgaXNWYWxpZFN0cmljdE1vZGU7Ci0gICAgICAgICAgICBtX2RlY2xhcmVkVmFyaWFi
bGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gaXNW
YWxpZFN0cmljdE1vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgZGVjbGFy
ZVdyaXRlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9zdHJpY3RNb2RlKTsKLSAgICAgICAgICAgIG1fd3JpdHRlblZhcmlhYmxlcy5hZGQo
aWRlbnQtPmltcGwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHByZXZlbnROZXdEZWNs
cygpIHsgbV9hbGxvd3NOZXdEZWNscyA9IGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgYWxsb3dzTmV3
RGVjbHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c05ld0RlY2xzOyB9Ci0KLSAgICAgICAgYm9v
bCBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBib29sIGlzQXJndW1lbnRzID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50OwotICAgICAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9k
ZSA9IG1fZGVjbGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKS5zZWNv
bmQgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNB
cmd1bWVudHM7Ci0gICAgICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3Ry
aWN0TW9kZSAmJiBpc1ZhbGlkU3RyaWN0TW9kZTsKLSAgICAgICAgICAgIGlmIChpc0FyZ3VtZW50
cykKLSAgICAgICAgICAgICAgICBtX3NoYWRvd3NBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIGlzVmFsaWRTdHJpY3RNb2RlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBib29sIGlzRXZhbCkK
LSAgICAgICAgewotICAgICAgICAgICAgbV91c2VzRXZhbCB8PSBpc0V2YWw7Ci0gICAgICAgICAg
ICBtX3VzZWRWYXJpYWJsZXMuYWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25l
ZWRzRnVsbEFjdGl2YXRpb24gPSB0cnVlOyB9Ci0gICAgICAgIAotICAgICAgICBib29sIGNvbGxl
Y3RGcmVlVmFyaWFibGVzKFNjb3BlKiBuZXN0ZWRTY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3Nl
ZFZhcmlhYmxlcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX3Vz
ZXNFdmFsKQotICAgICAgICAgICAgICAgIG1fdXNlc0V2YWwgPSB0cnVlOwotICAgICAgICAgICAg
SWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0gbmVzdGVkU2NvcGUtPm1fdXNlZFZhcmlhYmxl
cy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3IgcHRyID0g
bmVzdGVkU2NvcGUtPm1fdXNlZFZhcmlhYmxlcy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikg
ewotICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV9kZWNsYXJlZFZhcmlhYmxlcy5j
b250YWlucygqcHRyKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgbV91c2VkVmFyaWFibGVzLmFkZCgqcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hv
dWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpCi0gICAgICAgICAgICAgICAgICAgIG1fY2xvc2VkVmFy
aWFibGVzLmFkZCgqcHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuZXN0ZWRT
Y29wZS0+bV93cml0dGVuVmFyaWFibGVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIElkZW50
aWZpZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG5lc3RlZFNjb3BlLT5tX3dyaXR0ZW5WYXJpYWJsZXMu
ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBwdHIg
PSBuZXN0ZWRTY29wZS0+bV93cml0dGVuVmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV9kZWNsYXJlZFZh
cmlhYmxlcy5jb250YWlucygqcHRyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICBtX3dyaXR0ZW5WYXJpYWJsZXMuYWRkKCpwdHIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGdldFVuY2FwdHVyZWRXcml0dGVuVmFyaWFibGVz
KElkZW50aWZpZXJTZXQmIHdyaXR0ZW5WYXJpYWJsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fd3JpdHRlblZhcmlhYmxlcy5lbmQoKTsK
LSAgICAgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3IgcHRyID0gbV93cml0dGVu
VmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX2RlY2xhcmVkVmFyaWFibGVzLmNvbnRhaW5zKCpwdHIpKQotICAgICAgICAgICAgICAg
ICAgICB3cml0dGVuVmFyaWFibGVzLmFkZCgqcHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZ2V0Q2FwdHVyZWRWYXJpYWJsZXMoSWRlbnRpZmllclNldCYgY2Fw
dHVyZWRWYXJpYWJsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX25lZWRzRnVsbEFj
dGl2YXRpb24gfHwgbV91c2VzRXZhbCkgewotICAgICAgICAgICAgICAgIGNhcHR1cmVkVmFyaWFi
bGVzLnN3YXAobV9kZWNsYXJlZFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBw
dHIgPSBtX2Nsb3NlZFZhcmlhYmxlcy5iZWdpbigpOyBwdHIgIT0gbV9jbG9zZWRWYXJpYWJsZXMu
ZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2RlY2xhcmVkVmFyaWFibGVz
LmNvbnRhaW5zKCpwdHIpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBjYXB0dXJlZFZhcmlhYmxlcy5hZGQoKnB0cik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBtX3N0cmljdE1vZGUgPSB0cnVl
OyB9Ci0gICAgICAgIGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0TW9k
ZTsgfQotICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9p
c1ZhbGlkU3RyaWN0TW9kZTsgfQotICAgICAgICBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NBcmd1bWVudHM7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQg
Y29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IoY29uc3QgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMsIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiYgdmVjdG9yKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBjYXB0dXJlZFZh
cmlhYmxlcy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3Ig
aXQgPSBjYXB0dXJlZFZhcmlhYmxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9kZWNsYXJlZFZhcmlhYmxlcy5jb250YWlucygqaXQpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKCpp
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2F2ZUZ1bmN0aW9uSW5mbyhTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbSogaW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1faXNGdW5jdGlv
bik7Ci0gICAgICAgICAgICBpbmZvLT51c2VzRXZhbCA9IG1fdXNlc0V2YWw7Ci0gICAgICAgICAg
ICBpbmZvLT5zdHJpY3RNb2RlID0gbV9zdHJpY3RNb2RlOwotICAgICAgICAgICAgaW5mby0+bmVl
ZHNGdWxsQWN0aXZhdGlvbiA9IG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKLSAgICAgICAgICAgIGNv
cHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3Jp
dHRlblZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3Rv
cihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVzZWRWYXJpYWJsZXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCByZXN0b3JlRnVuY3Rpb25JbmZvKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtKiBpbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsK
LSAgICAgICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2VzRXZhbDsKLSAgICAgICAgICAgIG1f
c3RyaWN0TW9kZSA9IGluZm8tPnN0cmljdE1vZGU7Ci0gICAgICAgICAgICBtX25lZWRzRnVsbEFj
dGl2YXRpb24gPSBpbmZvLT5uZWVkc0Z1bGxBY3RpdmF0aW9uOwotICAgICAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGluZm8tPnVzZWRWYXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBtX3VzZWRWYXJp
YWJsZXMuYWRkKGluZm8tPnVzZWRWYXJpYWJsZXNbaV0pOwotICAgICAgICAgICAgc2l6ZSA9IGlu
Zm8tPndyaXR0ZW5WYXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBtX3dyaXR0ZW5WYXJpYWJsZXMu
YWRkKGluZm8tPndyaXR0ZW5WYXJpYWJsZXNbaV0pOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICAgICAgYm9vbCBtX3No
YWRvd3NBcmd1bWVudHMgOiAxOwotICAgICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwotICAgICAg
ICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbiA6IDE7Ci0gICAgICAgIGJvb2wgbV9hbGxvd3NO
ZXdEZWNscyA6IDE7Ci0gICAgICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKLSAgICAgICAgYm9v
bCBtX2lzRnVuY3Rpb24gOiAxOwotICAgICAgICBib29sIG1faXNGdW5jdGlvbkJvdW5kYXJ5IDog
MTsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWRTdHJpY3RNb2RlIDogMTsKLSAgICAgICAgaW50IG1f
bG9vcERlcHRoOwotICAgICAgICBpbnQgbV9zd2l0Y2hEZXB0aDsKLQotICAgICAgICB0eXBlZGVm
IFZlY3RvcjxTY29wZUxhYmVsSW5mbywgMj4gTGFiZWxTdGFjazsKLSAgICAgICAgT3duUHRyPExh
YmVsU3RhY2s+IG1fbGFiZWxzOwotICAgICAgICBJZGVudGlmaWVyU2V0IG1fZGVjbGFyZWRWYXJp
YWJsZXM7Ci0gICAgICAgIElkZW50aWZpZXJTZXQgbV91c2VkVmFyaWFibGVzOwotICAgICAgICBJ
ZGVudGlmaWVyU2V0IG1fY2xvc2VkVmFyaWFibGVzOwotICAgICAgICBJZGVudGlmaWVyU2V0IG1f
d3JpdHRlblZhcmlhYmxlczsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8U2NvcGUsIDEw
PiBTY29wZVN0YWNrOwotCi0gICAgc3RydWN0IFNjb3BlUmVmIHsKLSAgICAgICAgU2NvcGVSZWYo
U2NvcGVTdGFjayogc2NvcGVTdGFjaywgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICA6IG1f
c2NvcGVTdGFjayhzY29wZVN0YWNrKQotICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAg
ICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgU2NvcGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAm
bV9zY29wZVN0YWNrLT5hdChtX2luZGV4KTsgfQotICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLQotICAgICAgICBib29sIGhhc0NvbnRhaW5pbmdTY29w
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2luZGV4ICYmICFtX3Njb3BlU3Rh
Y2stPmF0KG1faW5kZXgpLmlzRnVuY3Rpb25Cb3VuZGFyeSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgU2NvcGVSZWYgY29udGFpbmluZ1Njb3BlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGhhc0NvbnRhaW5pbmdTY29wZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBTY29wZVJlZiht
X3Njb3BlU3RhY2ssIG1faW5kZXggLSAxKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgU2NvcGVTdGFjayogbV9zY29wZVN0YWNrOwotICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgQXV0b1BvcFNjb3BlUmVmIDogcHVibGljIFNjb3BlUmVm
IHsKLSAgICAgICAgQXV0b1BvcFNjb3BlUmVmKEpTUGFyc2VyKiBwYXJzZXIsIFNjb3BlUmVmIHNj
b3BlKQotICAgICAgICAgICAgOiBTY29wZVJlZihzY29wZSkKLSAgICAgICAgICAgICwgbV9wYXJz
ZXIocGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+QXV0b1BvcFNjb3Bl
UmVmKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcGFyc2VyKQotICAgICAgICAgICAg
ICAgIG1fcGFyc2VyLT5wb3BTY29wZSgqdGhpcywgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRQb3BwZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3BhcnNlciA9IDA7
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTUGFyc2VyKiBtX3BhcnNlcjsK
LSAgICB9OwotCi0gICAgU2NvcGVSZWYgY3VycmVudFNjb3BlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTY29wZVJlZigmbV9zY29wZVN0YWNrLCBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7Ci0g
ICAgfQotICAgIAotICAgIFNjb3BlUmVmIHB1c2hTY29wZSgpCi0gICAgewotICAgICAgICBib29s
IGlzRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc1N0cmljdCA9IGZhbHNlOwotICAg
ICAgICBpZiAoIW1fc2NvcGVTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlzU3RyaWN0
ID0gbV9zY29wZVN0YWNrLmxhc3QoKS5zdHJpY3RNb2RlKCk7Ci0gICAgICAgICAgICBpc0Z1bmN0
aW9uID0gbV9zY29wZVN0YWNrLmxhc3QoKS5pc0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZShtX2dsb2JhbERhdGEsIGlzRnVuY3Rpb24sIGlz
U3RyaWN0KSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2NvcGUoKTsKLSAgICB9Ci0KLSAgICBi
b29sIHBvcFNjb3BlSW50ZXJuYWwoU2NvcGVSZWYmIHNjb3BlLCBib29sIHNob3VsZFRyYWNrQ2xv
c2VkVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUu
aW5kZXgoKSA9PSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7Ci0gICAgICAgIEFTU0VSVChtX3Nj
b3BlU3RhY2suc2l6ZSgpID4gMSk7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gbV9zY29wZVN0YWNr
W21fc2NvcGVTdGFjay5zaXplKCkgLSAyXS5jb2xsZWN0RnJlZVZhcmlhYmxlcygmbV9zY29wZVN0
YWNrLmxhc3QoKSwgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpOwotICAgICAgICBtX3Njb3Bl
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IGJvb2wgcG9wU2NvcGUoU2NvcGVSZWYmIHNjb3BlLCBib29sIHNob3VsZFRyYWNrQ2xvc2VkVmFy
aWFibGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBvcFNjb3BlSW50ZXJuYWwoc2NvcGUsIHNo
b3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKTsKLSAgICB9Ci0KLSAgICBib29sIHBvcFNjb3BlKEF1
dG9Qb3BTY29wZVJlZiYgc2NvcGUsIGJvb2wgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpCi0g
ICAgewotICAgICAgICBzY29wZS5zZXRQb3BwZWQoKTsKLSAgICAgICAgcmV0dXJuIHBvcFNjb3Bl
SW50ZXJuYWwoc2NvcGUsIHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKTsKLSAgICB9Ci0KLSAg
ICBib29sIGRlY2xhcmVWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKLSAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKLSAgICAgICAgQVNT
RVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKLSAgICAgICAgd2hpbGUgKCFtX3Njb3BlU3Rh
Y2tbaV0uYWxsb3dzTmV3RGVjbHMoKSkgewotICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9zY29wZVN0YWNrW2ldLmRlY2xhcmVWYXJpYWJsZShpZGVudCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZGVjbGFyZVdyaXRlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpCi0gICAgICAgICAgICBtX3Njb3Bl
U3RhY2subGFzdCgpLmRlY2xhcmVXcml0ZShpZGVudCk7Ci0gICAgfQotCi0gICAgU2NvcGVTdGFj
ayBtX3Njb3BlU3RhY2s7Ci0KLSAgICBjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogZmlu
ZENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQgb3BlbkJyYWNlUG9zKSAKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2Z1bmN0aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmdldChvcGVuQnJhY2VQb3Mp
IDogMDsKLSAgICB9Ci0KLSAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBtX2Z1bmN0aW9uQ2FjaGU7
Ci0gICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7Ci19OwotCi1VU3RyaW5nIGpzUGFyc2Uo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMs
IEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
Y29uc3QgU291cmNlQ29kZSogc291cmNlKQotewotICAgIEpTUGFyc2VyIHBhcnNlcihnbG9iYWxE
YXRhLT5sZXhlciwgZ2xvYmFsRGF0YSwgcGFyYW1ldGVycywgc3RyaWN0bmVzcyA9PSBKU1BhcnNl
U3RyaWN0LCBwYXJzZXJNb2RlID09IEpTUGFyc2VGdW5jdGlvbkNvZGUsIHNvdXJjZSk7Ci0gICAg
cmV0dXJuIHBhcnNlci5wYXJzZVByb2dyYW0oKTsKLX0KLQotSlNQYXJzZXI6OkpTUGFyc2VyKExl
eGVyKiBsZXhlciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBib29sIGlzRnVuY3Rpb24sIGNvbnN0
IFNvdXJjZUNvZGUqIHNvdXJjZSkKLSAgICA6IG1fbGV4ZXIobGV4ZXIpCi0gICAgLCBtX3N0YWNr
KGdsb2JhbERhdGEtPnN0YWNrKCkpCi0gICAgLCBtX2Vycm9yKGZhbHNlKQotICAgICwgbV9lcnJv
ck1lc3NhZ2UoIlBhcnNlIGVycm9yIikKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQot
ICAgICwgbV9hbGxvd3NJbih0cnVlKQotICAgICwgbV9sYXN0TGluZSgwKQotICAgICwgbV9sYXN0
VG9rZW5FbmQoMCkKLSAgICAsIG1fYXNzaWdubWVudENvdW50KDApCi0gICAgLCBtX25vbkxIU0Nv
dW50KDApCi0gICAgLCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQoc291cmNlLT5wcm92aWRlcigp
LT5pc1ZhbGlkKCkpCi0gICAgLCBtX3N0YXRlbWVudERlcHRoKDApCi0gICAgLCBtX25vblRyaXZp
YWxFeHByZXNzaW9uQ291bnQoMCkKLSAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKLSAgICAsIG1f
ZnVuY3Rpb25DYWNoZShtX2xleGVyLT5zb3VyY2VQcm92aWRlcigpLT5jYWNoZSgpKQotICAgICwg
bV9zb3VyY2Uoc291cmNlKQotewotICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7Ci0g
ICAgaWYgKGlzRnVuY3Rpb24pCi0gICAgICAgIHNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7Ci0gICAg
aWYgKGluU3RyaWN0Q29udGV4dCkKLSAgICAgICAgc2NvcGUtPnNldFN0cmljdE1vZGUoKTsKLSAg
ICBpZiAocGFyYW1ldGVycykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy0+c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBzY29wZS0+ZGVjbGFyZVBhcmFtZXRl
cigmcGFyYW1ldGVycy0+YXQoaSkpOwotICAgIH0KLSAgICBuZXh0KCk7Ci0gICAgbV9sZXhlci0+
c2V0TGFzdExpbmVOdW1iZXIodG9rZW5MaW5lKCkpOwotfQotCi1VU3RyaW5nIEpTUGFyc2VyOjpw
YXJzZVByb2dyYW0oKQotewotICAgIHVuc2lnbmVkIG9sZEZ1bmN0aW9uQ2FjaGVTaXplID0gbV9m
dW5jdGlvbkNhY2hlID8gbV9mdW5jdGlvbkNhY2hlLT5ieXRlU2l6ZSgpIDogMDsKLSAgICBBU1RC
dWlsZGVyIGNvbnRleHQobV9nbG9iYWxEYXRhLCBtX2xleGVyKTsKLSAgICBpZiAobV9sZXhlci0+
aXNSZXBhcnNpbmcoKSkKLSAgICAgICAgbV9zdGF0ZW1lbnREZXB0aC0tOwotICAgIFNjb3BlUmVm
IHNjb3BlID0gY3VycmVudFNjb3BlKCk7Ci0gICAgU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1l
bnRzID0gcGFyc2VTb3VyY2VFbGVtZW50czxDaGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQpOwot
ICAgIGlmICghc291cmNlRWxlbWVudHMgfHwgIWNvbnN1bWUoRU9GVE9LKSkKLSAgICAgICAgcmV0
dXJuIG1fZXJyb3JNZXNzYWdlOwotICAgIElkZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJpYWJsZXM7
Ci0gICAgc2NvcGUtPmdldENhcHR1cmVkVmFyaWFibGVzKGNhcHR1cmVkVmFyaWFibGVzKTsKLSAg
ICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBjb250ZXh0LmZlYXR1cmVzKCk7Ci0gICAgaWYgKHNj
b3BlLT5zdHJpY3RNb2RlKCkpCi0gICAgICAgIGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0dXJl
OwotICAgIGlmIChzY29wZS0+c2hhZG93c0FyZ3VtZW50cygpKQotICAgICAgICBmZWF0dXJlcyB8
PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKLSAgICAKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkNh
Y2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVuY3Rpb25DYWNoZS0+Ynl0ZVNpemUoKSA6
IDA7Ci0gICAgaWYgKGZ1bmN0aW9uQ2FjaGVTaXplICE9IG9sZEZ1bmN0aW9uQ2FjaGVTaXplKQot
ICAgICAgICBtX2xleGVyLT5zb3VyY2VQcm92aWRlcigpLT5ub3RpZnlDYWNoZVNpemVDaGFuZ2Vk
KGZ1bmN0aW9uQ2FjaGVTaXplIC0gb2xkRnVuY3Rpb25DYWNoZVNpemUpOwotCi0gICAgbV9nbG9i
YWxEYXRhLT5wYXJzZXItPmRpZEZpbmlzaFBhcnNpbmcoc291cmNlRWxlbWVudHMsIGNvbnRleHQu
dmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0aW9ucygpLCBmZWF0dXJlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xhc3RMaW5lLCBj
b250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcyk7Ci0gICAgcmV0dXJuIFVT
dHJpbmcoKTsKLX0KLQotYm9vbCBKU1BhcnNlcjo6YWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQot
ewotICAgIHJldHVybiBtYXRjaChDTE9TRUJSQUNFKSB8fCBtYXRjaChFT0ZUT0spIHx8IG1fbGV4
ZXItPnByZXZUZXJtaW5hdG9yKCk7Ci19Ci0KLXRlbXBsYXRlIDxKU1BhcnNlcjo6U291cmNlRWxl
bWVudHNNb2RlIG1vZGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgSlNQ
YXJzZXI6OnBhcnNlU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAg
VHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVTb3VyY2VF
bGVtZW50cygpOwotICAgIGJvb2wgc2Vlbk5vbkRpcmVjdGl2ZSA9IGZhbHNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGRpcmVjdGl2ZSA9IDA7Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBt
X3Rva2VuLm1faW5mby5zdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBvbGRMYXN0TGluZU51bWJl
ciA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7Ci0gICAgdW5zaWduZWQgb2xkTGluZU51bWJl
ciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKLSAgICBib29sIGhhc1NldFN0cmljdCA9IGZhbHNl
OwotICAgIHdoaWxlIChUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNv
bnRleHQsIGRpcmVjdGl2ZSkpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2hlY2tGb3JTdHJpY3RN
b2RlICYmICFzZWVuTm9uRGlyZWN0aXZlKSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aXZlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNTZXRTdHJpY3QgJiYgbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVyID09ICpkaXJlY3RpdmUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2V0U3RyaWN0TW9kZSgpOwotICAgICAgICAgICAgICAgICAgICBoYXNTZXRT
dHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShpc1ZhbGlkU3Ry
aWN0TW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KHN0YXJ0
T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgICAgICAg
ICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihvbGRMYXN0TGluZU51bWJlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbGV4ZXItPnNldExpbmVOdW1iZXIob2xkTGluZU51bWJlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGZhaWxJZlRydWUobV9lcnJvcik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIHNlZW5Ob25EaXJlY3RpdmUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNv
bnRleHQuYXBwZW5kU3RhdGVtZW50KHNvdXJjZUVsZW1lbnRzLCBzdGF0ZW1lbnQpOwotICAgIH0K
LQotICAgIGlmIChtX2Vycm9yKQotICAgICAgICBmYWlsKCk7Ci0gICAgcmV0dXJuIHNvdXJjZUVs
ZW1lbnRzOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
SlNQYXJzZXI6OnBhcnNlVmFyRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0g
ICAgQVNTRVJUKG1hdGNoKFZBUikpOwotICAgIGludCBzdGFydCA9IHRva2VuTGluZSgpOwotICAg
IGludCBlbmQgPSAwOwotICAgIGludCBzY3JhdGNoOwotICAgIGNvbnN0IElkZW50aWZpZXIqIHNj
cmF0Y2gxID0gMDsKLSAgICBUcmVlRXhwcmVzc2lvbiBzY3JhdGNoMiA9IDA7Ci0gICAgaW50IHNj
cmF0Y2gzID0gMDsKLSAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNscyA9IHBhcnNlVmFyRGVjbGFy
YXRpb25MaXN0KGNvbnRleHQsIHNjcmF0Y2gsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgc2NyYXRjaDMs
IHNjcmF0Y2gzLCBzY3JhdGNoMyk7Ci0gICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKLSAgICBmYWls
SWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVmFy
U3RhdGVtZW50KHZhckRlY2xzLCBzdGFydCwgZW5kKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpwYXJzZUNvbnN0RGVjbGFyYXRpb24o
VHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKENPTlNUVE9LRU4pKTsK
LSAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kID0gMDsKLSAgICBUcmVl
Q29uc3REZWNsTGlzdCBjb25zdERlY2xzID0gcGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChjb250
ZXh0KTsKLSAgICBmYWlsSWZUcnVlKG1fZXJyb3IpOwotICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1p
Q29sb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29uc3RTdGF0ZW1lbnQo
Y29uc3REZWNscywgc3RhcnQsIGVuZCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VEb1doaWxlU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChETykpOwotICAgIGludCBzdGFydExp
bmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogdW51
c2VkID0gMDsKLSAgICBzdGFydExvb3AoKTsKLSAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9
IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Ci0gICAgZW5kTG9vcCgpOwotICAgIGZh
aWxJZkZhbHNlKHN0YXRlbWVudCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAg
ICBjb25zdW1lT3JGYWlsKFdISUxFKTsKLSAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7Ci0g
ICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBm
YWlsSWZGYWxzZShleHByKTsKLSAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwotICAgIGlm
IChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBuZXh0KCk7IC8vIEFsd2F5cyBwZXJmb3JtcyBh
dXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbi4KLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVE
b1doaWxlU3RhdGVtZW50KHN0YXRlbWVudCwgZXhwciwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpw
YXJzZVdoaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVCht
YXRjaChXSElMRSkpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0
KCk7Ci0gICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotICAgIFRyZWVFeHByZXNzaW9uIGV4
cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7Ci0g
ICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFS
RU4pOwotICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7Ci0gICAgc3RhcnRMb29wKCk7
Ci0gICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1
bnVzZWQpOwotICAgIGVuZExvb3AoKTsKLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVdoaWxlU3RhdGVtZW50KGV4cHIsIHN0YXRlbWVudCwgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBKU1BhcnNlcjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXIm
IGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50
LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYg
aW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpCi17Ci0gICAgVHJlZUV4cHJlc3Npb24gdmFyRGVjbHMg
PSAwOwotICAgIGRvIHsKLSAgICAgICAgZGVjbGFyYXRpb25zKys7Ci0gICAgICAgIG5leHQoKTsK
LSAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwotCi0gICAgICAgIGludCB2YXJTdGFydCA9IHRv
a2VuU3RhcnQoKTsKLSAgICAgICAgaWRlbnRTdGFydCA9IHZhclN0YXJ0OwotICAgICAgICBjb25z
dCBJZGVudGlmaWVyKiBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGxhc3RJ
ZGVudCA9IG5hbWU7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgYm9vbCBoYXNJbml0aWFsaXpl
ciA9IG1hdGNoKEVRVUFMKTsKLSAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5k
TWVzc2FnZShkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxl
IG5hbWVkIiwgbmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7Ci0gICAgICAgIGNvbnRl
eHQuYWRkVmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0Y2go
SU5UT0tFTikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwotICAg
ICAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgICAgIGludCB2YXJEaXZvdCA9IHRv
a2VuU3RhcnQoKSArIDE7Ci0gICAgICAgICAgICBpbml0U3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0g
ICAgICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsgLy8gY29uc3Vt
ZSAnPScKLSAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRD
b3VudDsKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGluaXRpYWxpemVyID0gcGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGluaXRFbmQgPSBsYXN0VG9r
ZW5FbmQoKTsKLSAgICAgICAgICAgIGxhc3RJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwotICAg
ICAgICAgICAgZmFpbElmRmFsc2UoaW5pdGlhbGl6ZXIpOwotCi0gICAgICAgICAgICBUcmVlRXhw
cmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKCpuYW1lLCBpbml0aWFs
aXplciwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCB2YXJTdGFydCwg
dmFyRGl2b3QsIGxhc3RUb2tlbkVuZCgpKTsKLSAgICAgICAgICAgIGlmICghdmFyRGVjbHMpCi0g
ICAgICAgICAgICAgICAgdmFyRGVjbHMgPSBub2RlOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHZhckRlY2xzID0gY29udGV4dC5jb21iaW5lQ29tbWFOb2Rlcyh2YXJEZWNscywg
bm9kZSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChtYXRjaChDT01NQSkpOwotICAgIHJldHVy
biB2YXJEZWNsczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ29uc3RE
ZWNsTGlzdCBKU1BhcnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYg
Y29udGV4dCkKLXsKLSAgICBmYWlsSWZUcnVlKHN0cmljdE1vZGUoKSk7Ci0gICAgVHJlZUNvbnN0
RGVjbExpc3QgY29uc3REZWNscyA9IDA7Ci0gICAgVHJlZUNvbnN0RGVjbExpc3QgdGFpbCA9IDA7
Ci0gICAgZG8gewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsK
LSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50Owot
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIgPSBtYXRjaChFUVVB
TCk7Ci0gICAgICAgIGRlY2xhcmVWYXJpYWJsZShuYW1lKTsKLSAgICAgICAgY29udGV4dC5hZGRW
YXIobmFtZSwgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQgfCAoaGFzSW5pdGlhbGl6ZXIg
PyBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIgOiAwKSk7Ci0gICAgICAgIFRyZWVF
eHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsKLSAgICAgICAgaWYgKGhhc0luaXRpYWxpemVyKSB7
Ci0gICAgICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsgLy8gY29u
c3VtZSAnPScKLSAgICAgICAgICAgIGluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbihjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICB0YWlsID0gY29udGV4dC5hcHBlbmRD
b25zdERlY2wodGFpbCwgbmFtZSwgaW5pdGlhbGl6ZXIpOwotICAgICAgICBpZiAoIWNvbnN0RGVj
bHMpCi0gICAgICAgICAgICBjb25zdERlY2xzID0gdGFpbDsKLSAgICB9IHdoaWxlIChtYXRjaChD
T01NQSkpOwotICAgIHJldHVybiBjb25zdERlY2xzOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlRm9yU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChGT1IpKTsKLSAgICBpbnQgc3Rh
cnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgbmV4dCgpOwotICAgIGNvbnN1bWVPckZhaWwoT1BF
TlBBUkVOKTsKLSAgICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwotICAgIGludCBk
ZWNsYXJhdGlvbnMgPSAwOwotICAgIGludCBkZWNsc1N0YXJ0ID0gMDsKLSAgICBpbnQgZGVjbHNF
bmQgPSAwOwotICAgIFRyZWVFeHByZXNzaW9uIGRlY2xzID0gMDsKLSAgICBib29sIGhhc0RlY2xh
cmF0aW9uID0gZmFsc2U7Ci0gICAgaWYgKG1hdGNoKFZBUikpIHsKLSAgICAgICAgLyoKLSAgICAg
ICAgIGZvciAodmFyIElERU5UIGluIGV4cHJlc3Npb24pIHN0YXRlbWVudAotICAgICAgICAgZm9y
ICh2YXIgSURFTlQgPSBleHByZXNzaW9uIGluIGV4cHJlc3Npb24pIHN0YXRlbWVudAotICAgICAg
ICAgZm9yICh2YXIgdmFyRGVjbGFyYXRpb25MaXN0OyBleHByZXNzaW9uT3B0OyBleHByZXNzaW9u
T3B0KQotICAgICAgICAgKi8KLSAgICAgICAgaGFzRGVjbGFyYXRpb24gPSB0cnVlOwotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBmb3JJblRhcmdldCA9IDA7Ci0gICAgICAgIFRyZWVFeHByZXNz
aW9uIGZvckluSW5pdGlhbGl6ZXIgPSAwOwotICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7Ci0g
ICAgICAgIGludCBpbml0U3RhcnQgPSAwOwotICAgICAgICBpbnQgaW5pdEVuZCA9IDA7Ci0gICAg
ICAgIGRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoY29udGV4dCwgZGVjbGFyYXRpb25z
LCBmb3JJblRhcmdldCwgZm9ySW5Jbml0aWFsaXplciwgZGVjbHNTdGFydCwgaW5pdFN0YXJ0LCBp
bml0RW5kKTsKLSAgICAgICAgbV9hbGxvd3NJbiA9IHRydWU7Ci0gICAgICAgIGlmIChtX2Vycm9y
KQotICAgICAgICAgICAgZmFpbCgpOwotCi0gICAgICAgIC8vIFJlbWFpbmRlciBvZiBhIHN0YW5k
YXJkIGZvciBsb29wIGlzIGhhbmRsZWQgaWRlbnRpY2FsbHkKLSAgICAgICAgaWYgKG1hdGNoKFNF
TUlDT0xPTikpCi0gICAgICAgICAgICBnb3RvIHN0YW5kYXJkRm9yTG9vcDsKLQotICAgICAgICBm
YWlsSWZGYWxzZShkZWNsYXJhdGlvbnMgPT0gMSk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGZvci1p
biB3aXRoIHZhciBkZWNsYXJhdGlvbgotICAgICAgICBpbnQgaW5Mb2NhdGlvbiA9IHRva2VuU3Rh
cnQoKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKLQotICAgICAgICBUcmVlRXhw
cmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBmYWlsSWZG
YWxzZShleHByKTsKLSAgICAgICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLQotICAg
ICAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBjb25zdW1lT3JGYWlsKENM
T1NFUEFSRU4pOwotCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7Ci0gICAg
ICAgIHN0YXJ0TG9vcCgpOwotICAgICAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNl
U3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Ci0gICAgICAgIGVuZExvb3AoKTsKLSAgICAgICAg
ZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKLQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVG
b3JJbkxvb3AoZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGV4cHIsIHN0YXRlbWVudCwg
ZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwgZXhwckVuZCwgaW5pdFN0YXJ0LCBpbml0RW5kLCBzdGFy
dExpbmUsIGVuZExpbmUpOwotICAgIH0KLQotICAgIGlmICghbWF0Y2goU0VNSUNPTE9OKSkgewot
ICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7Ci0gICAgICAgIGRlY2xzU3RhcnQgPSB0b2tlblN0
YXJ0KCk7Ci0gICAgICAgIGRlY2xzID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAg
ICBkZWNsc0VuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICBtX2FsbG93c0luID0gdHJ1ZTsK
LSAgICAgICAgZmFpbElmRmFsc2UoZGVjbHMpOwotICAgIH0KLQotICAgIGlmIChtYXRjaChTRU1J
Q09MT04pKSB7Ci0gICAgc3RhbmRhcmRGb3JMb29wOgotICAgICAgICAvLyBTdGFuZGFyZCBmb3Ig
bG9vcAotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9
IDA7Ci0KLSAgICAgICAgaWYgKCFtYXRjaChTRU1JQ09MT04pKSB7Ci0gICAgICAgICAgICBjb25k
aXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxz
ZShjb25kaXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN1bWVPckZhaWwoU0VNSUNPTE9O
KTsKLQotICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbmNyZW1lbnQgPSAwOwotICAgICAgICBpZiAo
IW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSBwYXJzZUV4cHJl
c3Npb24oY29udGV4dCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShpbmNyZW1lbnQpOwotICAg
ICAgICB9Ci0gICAgICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGNvbnN1
bWVPckZhaWwoQ0xPU0VQQVJFTik7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9
IDA7Ci0gICAgICAgIHN0YXJ0TG9vcCgpOwotICAgICAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVu
dCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Ci0gICAgICAgIGVuZExvb3AoKTsK
LSAgICAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlRm9yTG9vcChkZWNscywgY29uZGl0aW9uLCBpbmNyZW1lbnQsIHN0YXRlbWVudCwgaGFz
RGVjbGFyYXRpb24sIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci0gICAgfQotCi0gICAgLy8gRm9yLWlu
IGxvb3AKLSAgICBmYWlsSWZGYWxzZShub25MSFNDb3VudCA9PSBtX25vbkxIU0NvdW50KTsKLSAg
ICBjb25zdW1lT3JGYWlsKElOVE9LRU4pOwotICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJz
ZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgaW50IGV4
cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwot
ICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7Ci0gICAgY29uc3QgSWRlbnRpZmllciogdW51
c2VkID0gMDsKLSAgICBzdGFydExvb3AoKTsKLSAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9
IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Ci0gICAgZW5kTG9vcCgpOwotICAgIGZh
aWxJZkZhbHNlKHN0YXRlbWVudCk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRm9y
SW5Mb29wKGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHBy
RW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlQnJlYWtTdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKEJSRUFLKSk7Ci0gICAgaW50IHN0YXJ0
Q29sID0gdG9rZW5TdGFydCgpOwotICAgIGludCBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGlu
dCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgp
OwotICAgIG5leHQoKTsKLQotICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKLSAgICAgICAgZmFp
bElmRmFsc2VXaXRoTWVzc2FnZShicmVha0lzVmFsaWQoKSwgIidicmVhaycgaXMgb25seSB2YWxp
ZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9vcCBzdGF0ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQoc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBl
bmRMaW5lKTsKLSAgICB9Ci0gICAgbWF0Y2hPckZhaWwoSURFTlQpOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgZmFpbElmRmFsc2VXaXRo
TmFtZUFuZE1lc3NhZ2UoZ2V0TGFiZWwoaWRlbnQpLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgpLCAi
aXMgbm90IGRlZmluZWQiKTsKLSAgICBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGVuZExpbmUg
PSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0gICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xv
bigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChpZGVudCwgc3Rh
cnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpwYXJzZUNvbnRpbnVlU3RhdGVt
ZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChDT05USU5VRSkp
OwotICAgIGludCBzdGFydENvbCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kQ29sID0gdG9r
ZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExp
bmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0KLSAgICBpZiAoYXV0b1NlbWlDb2xvbigp
KSB7Ci0gICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY29udGludWVJc1ZhbGlkKCksICIn
Y29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1lbnQiKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoc3RhcnRDb2wsIGVuZENv
bCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKLSAgICB9Ci0gICAgbWF0Y2hPckZhaWwoSURFTlQpOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAg
U2NvcGVMYWJlbEluZm8qIGxhYmVsID0gZ2V0TGFiZWwoaWRlbnQpOwotICAgIGZhaWxJZkZhbHNl
V2l0aE5hbWVBbmRNZXNzYWdlKGxhYmVsLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgpLCAiaXMgbm90
IGRlZmluZWQiKTsKLSAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdlKGxhYmVsLT5tX2lzTG9vcCwg
Iidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29wIHN0YXRlbWVudCIpOwotICAg
IGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgIG5l
eHQoKTsKLSAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGlkZW50LCBzdGFydENvbCwgZW5kQ29sLCBzdGFy
dExpbmUsIGVuZExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250
ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChSRVRVUk4pKTsKLSAgICBmYWlsSWZGYWxzZShjdXJy
ZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5l
KCk7Ci0gICAgaW50IGVuZExpbmUgPSBzdGFydExpbmU7Ci0gICAgaW50IHN0YXJ0ID0gdG9rZW5T
dGFydCgpOwotICAgIGludCBlbmQgPSB0b2tlbkVuZCgpOwotICAgIG5leHQoKTsKLSAgICAvLyBX
ZSBkbyB0aGUgYXV0byBzZW1pY29sb24gY2hlY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcGFyc2Ug
YW4gZXhwcmVzc2lvbgotICAgIC8vIGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBhIGxpbmUgYnJl
YWsgYWZ0ZXIgdGhlIHJldHVybiBjb3JyZWN0bHkgdGVybWluYXRlcwotICAgIC8vIHRoZSBzdGF0
ZW1lbnQKLSAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKLSAgICAgICAgZW5kTGluZSAgPSB0b2tl
bkxpbmUoKTsKLSAgICBpZiAoYXV0b1NlbWlDb2xvbigpKQotICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoMCwgc3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5l
KTsKLSAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwot
ICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIGlm
IChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5lICA9IHRva2VuTGluZSgpOwotICAg
IGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
UmV0dXJuU3RhdGVtZW50KGV4cHIsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6
cGFyc2VUaHJvd1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQo
bWF0Y2goVEhST1cpKTsKLSAgICBpbnQgZVN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBz
dGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0gICAgCi0gICAgZmFpbElmVHJ1
ZShhdXRvU2VtaUNvbG9uKCkpOwotCi0gICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZUVuZCA9
IGxhc3RUb2tlbkVuZCgpOwotICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZmFp
bElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKLQotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVRo
cm93U3RhdGVtZW50KGV4cHIsIGVTdGFydCwgZUVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpw
YXJzZVdpdGhTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1h
dGNoKFdJVEgpKTsKLSAgICBmYWlsSWZUcnVlV2l0aE1lc3NhZ2Uoc3RyaWN0TW9kZSgpLCAiJ3dp
dGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOwotICAgIGN1cnJl
bnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7Ci0gICAgaW50IHN0YXJ0TGluZSA9
IHRva2VuTGluZSgpOwotICAgIG5leHQoKTsKLSAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7
Ci0gICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIFRyZWVFeHByZXNzaW9uIGV4cHIg
PSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAg
aW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotCi0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUo
KTsKLSAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IHVudXNlZCA9IDA7Ci0gICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVu
dChjb250ZXh0LCB1bnVzZWQpOwotICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7Ci0KLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50KGV4cHIsIHN0YXRlbWVudCwgc3RhcnQs
IGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudChUcmVlQnVp
bGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQobWF0Y2goU1dJVENIKSk7Ci0gICAgaW50IHN0
YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIG5leHQoKTsKLSAgICBjb25zdW1lT3JGYWlsKE9Q
RU5QQVJFTik7Ci0gICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250
ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGlu
ZSgpOwotICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7Ci0gICAgY29uc3VtZU9yRmFpbChP
UEVOQlJBQ0UpOwotICAgIHN0YXJ0U3dpdGNoKCk7Ci0gICAgVHJlZUNsYXVzZUxpc3QgZmlyc3RD
bGF1c2VzID0gcGFyc2VTd2l0Y2hDbGF1c2VzKGNvbnRleHQpOwotICAgIGZhaWxJZlRydWUobV9l
cnJvcik7Ci0KLSAgICBUcmVlQ2xhdXNlIGRlZmF1bHRDbGF1c2UgPSBwYXJzZVN3aXRjaERlZmF1
bHRDbGF1c2UoY29udGV4dCk7Ci0gICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKLQotICAgIFRyZWVD
bGF1c2VMaXN0IHNlY29uZENsYXVzZXMgPSBwYXJzZVN3aXRjaENsYXVzZXMoY29udGV4dCk7Ci0g
ICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKLSAgICBlbmRTd2l0Y2goKTsKLSAgICBjb25zdW1lT3JG
YWlsKENMT1NFQlJBQ0UpOwotCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlU3dpdGNoU3RhdGVt
ZW50KGV4cHIsIGZpcnN0Q2xhdXNlcywgZGVmYXVsdENsYXVzZSwgc2Vjb25kQ2xhdXNlcywgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKLQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVDbGF1c2VMaXN0IEpTUGFyc2VyOjpwYXJzZVN3aXRjaENsYXVzZXMoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCi17Ci0gICAgaWYgKCFtYXRjaChDQVNFKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
bmV4dCgpOwotICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShjb25kaXRpb24pOwotICAgIGNvbnN1bWVPckZhaWwo
Q09MT04pOwotICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzdGF0ZW1lbnRzID0gcGFyc2VTb3VyY2VF
bGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxz
ZShzdGF0ZW1lbnRzKTsKLSAgICBUcmVlQ2xhdXNlIGNsYXVzZSA9IGNvbnRleHQuY3JlYXRlQ2xh
dXNlKGNvbmRpdGlvbiwgc3RhdGVtZW50cyk7Ci0gICAgVHJlZUNsYXVzZUxpc3QgY2xhdXNlTGlz
dCA9IGNvbnRleHQuY3JlYXRlQ2xhdXNlTGlzdChjbGF1c2UpOwotICAgIFRyZWVDbGF1c2VMaXN0
IHRhaWwgPSBjbGF1c2VMaXN0OwotCi0gICAgd2hpbGUgKG1hdGNoKENBU0UpKSB7Ci0gICAgICAg
IG5leHQoKTsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwotICAgICAgICBmYWlsSWZGYWxzZShjb25kaXRpb24pOwotICAgICAgICBj
b25zdW1lT3JGYWlsKENPTE9OKTsKLSAgICAgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHN0YXRlbWVu
dHMgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRDaGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQp
OwotICAgICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnRzKTsKLSAgICAgICAgY2xhdXNlID0gY29u
dGV4dC5jcmVhdGVDbGF1c2UoY29uZGl0aW9uLCBzdGF0ZW1lbnRzKTsKLSAgICAgICAgdGFpbCA9
IGNvbnRleHQuY3JlYXRlQ2xhdXNlTGlzdCh0YWlsLCBjbGF1c2UpOwotICAgIH0KLSAgICByZXR1
cm4gY2xhdXNlTGlzdDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xh
dXNlIEpTUGFyc2VyOjpwYXJzZVN3aXRjaERlZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCi17Ci0gICAgaWYgKCFtYXRjaChERUZBVUxUKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
bmV4dCgpOwotICAgIGNvbnN1bWVPckZhaWwoQ09MT04pOwotICAgIFRyZWVTb3VyY2VFbGVtZW50
cyBzdGF0ZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2Rl
Pihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnRzKTsKLSAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVDbGF1c2UoMCwgc3RhdGVtZW50cyk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VUcnlTdGF0ZW1lbnQoVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKFRSWSkpOwotICAgIFRyZWVT
dGF0ZW1lbnQgdHJ5QmxvY2sgPSAwOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJm1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0gICAgYm9vbCBjYXRj
aEhhc0V2YWwgPSBmYWxzZTsKLSAgICBUcmVlU3RhdGVtZW50IGNhdGNoQmxvY2sgPSAwOwotICAg
IFRyZWVTdGF0ZW1lbnQgZmluYWxseUJsb2NrID0gMDsKLSAgICBpbnQgZmlyc3RMaW5lID0gdG9r
ZW5MaW5lKCk7Ci0gICAgbmV4dCgpOwotICAgIG1hdGNoT3JGYWlsKE9QRU5CUkFDRSk7Ci0KLSAg
ICB0cnlCbG9jayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgZmFpbElmRmFs
c2UodHJ5QmxvY2spOwotICAgIGludCBsYXN0TGluZSA9IG1fbGFzdExpbmU7Ci0KLSAgICBpZiAo
bWF0Y2goQ0FUQ0gpKSB7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3Rp
dmF0aW9uKCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChPUEVOUEFS
RU4pOwotICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAgICAgIGlkZW50ID0gbV90b2tl
bi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgQXV0b1BvcFNjb3BlUmVm
IGNhdGNoU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwotICAgICAgICBmYWlsSWZGYWxzZUlmU3Ry
aWN0V2l0aE5hbWVBbmRNZXNzYWdlKGNhdGNoU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShpZGVudCks
ICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgaWRlbnQtPmltcGwoKSwgImluIHN0
cmljdCBtb2RlIik7Ci0gICAgICAgIGNhdGNoU2NvcGUtPnByZXZlbnROZXdEZWNscygpOwotICAg
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwotICAgICAgICBtYXRjaE9yRmFpbChPUEVO
QlJBQ0UpOwotICAgICAgICBpbnQgaW5pdGlhbEV2YWxDb3VudCA9IGNvbnRleHQuZXZhbENvdW50
KCk7Ci0gICAgICAgIGNhdGNoQmxvY2sgPSBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwot
ICAgICAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdlKGNhdGNoQmxvY2ssICIndHJ5JyBtdXN0IGhh
dmUgYSBjYXRjaCBvciBmaW5hbGx5IGJsb2NrIik7Ci0gICAgICAgIGNhdGNoSGFzRXZhbCA9IGlu
aXRpYWxFdmFsQ291bnQgIT0gY29udGV4dC5ldmFsQ291bnQoKTsKLSAgICAgICAgZmFpbElmRmFs
c2UocG9wU2NvcGUoY2F0Y2hTY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5m
bykpOwotICAgIH0KLQotICAgIGlmIChtYXRjaChGSU5BTExZKSkgewotICAgICAgICBuZXh0KCk7
Ci0gICAgICAgIG1hdGNoT3JGYWlsKE9QRU5CUkFDRSk7Ci0gICAgICAgIGZpbmFsbHlCbG9jayA9
IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKGZpbmFs
bHlCbG9jayk7Ci0gICAgfQotICAgIGZhaWxJZkZhbHNlKGNhdGNoQmxvY2sgfHwgZmluYWxseUJs
b2NrKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUcnlTdGF0ZW1lbnQodHJ5QmxvY2ssIGlk
ZW50LCBjYXRjaEhhc0V2YWwsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jaywgZmlyc3RMaW5lLCBs
YXN0TGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBKU1BhcnNlcjo6cGFyc2VEZWJ1Z2dlclN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkK
LXsKLSAgICBBU1NFUlQobWF0Y2goREVCVUdHRVIpKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9r
ZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSBzdGFydExpbmU7Ci0gICAgbmV4dCgpOwotICAg
IGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
LSAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZURlYnVnZ2VyKHN0YXJ0TGluZSwgZW5kTGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChU
cmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQobWF0Y2goT1BFTkJSQUNFKSk7Ci0g
ICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7Ci0gICAgbmV4dCgpOwotICAgIGlmIChtYXRjaChD
TE9TRUJSQUNFKSkgewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUJsb2NrU3RhdGVtZW50KDAsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKLSAgICB9Ci0gICAgVHJl
ZVNvdXJjZUVsZW1lbnRzIHN1YnRyZWUgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRDaGVja0Zv
clN0cmljdE1vZGU+KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKHN1YnRyZWUpOwotICAgIG1h
dGNoT3JGYWlsKENMT1NFQlJBQ0UpOwotICAgIG5leHQoKTsKLSAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVCbG9ja1N0YXRlbWVudChzdWJ0cmVlLCBzdGFydCwgbV9sYXN0TGluZSk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3Rp
dmUpCi17Ci0gICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRo
KTsKLSAgICBtX3N0YXRlbWVudERlcHRoKys7Ci0gICAgZGlyZWN0aXZlID0gMDsKLSAgICBpbnQg
bm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCA9IDA7Ci0gICAgZmFpbElmU3RhY2tPdmVyZmxvdygp
OwotICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICBjYXNlIE9QRU5CUkFDRToKLSAg
ICAgICAgcmV0dXJuIHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgY2FzZSBWQVI6
Ci0gICAgICAgIHJldHVybiBwYXJzZVZhckRlY2xhcmF0aW9uKGNvbnRleHQpOwotICAgIGNhc2Ug
Q09OU1RUT0tFTjoKLSAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3REZWNsYXJhdGlvbihjb250ZXh0
KTsKLSAgICBjYXNlIEZVTkNUSU9OOgotICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE1l
c3NhZ2UobV9zdGF0ZW1lbnREZXB0aCA9PSAxLCAiRnVuY3Rpb25zIGNhbm5vdCBiZSBkZWNsYXJl
ZCBpbiBhIG5lc3RlZCBibG9jayBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICByZXR1cm4gcGFy
c2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQpOwotICAgIGNhc2UgU0VNSUNPTE9OOgotICAg
ICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUVtcHR5U3RhdGVtZW50
KCk7Ci0gICAgY2FzZSBJRjoKLSAgICAgICAgcmV0dXJuIHBhcnNlSWZTdGF0ZW1lbnQoY29udGV4
dCk7Ci0gICAgY2FzZSBETzoKLSAgICAgICAgcmV0dXJuIHBhcnNlRG9XaGlsZVN0YXRlbWVudChj
b250ZXh0KTsKLSAgICBjYXNlIFdISUxFOgotICAgICAgICByZXR1cm4gcGFyc2VXaGlsZVN0YXRl
bWVudChjb250ZXh0KTsKLSAgICBjYXNlIEZPUjoKLSAgICAgICAgcmV0dXJuIHBhcnNlRm9yU3Rh
dGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgQ09OVElOVUU6Ci0gICAgICAgIHJldHVybiBwYXJz
ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgQlJFQUs6Ci0gICAgICAgIHJl
dHVybiBwYXJzZUJyZWFrU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgUkVUVVJOOgotICAg
ICAgICByZXR1cm4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgY2FzZSBXSVRI
OgotICAgICAgICByZXR1cm4gcGFyc2VXaXRoU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2Ug
U1dJVENIOgotICAgICAgICByZXR1cm4gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoY29udGV4dCk7Ci0g
ICAgY2FzZSBUSFJPVzoKLSAgICAgICAgcmV0dXJuIHBhcnNlVGhyb3dTdGF0ZW1lbnQoY29udGV4
dCk7Ci0gICAgY2FzZSBUUlk6Ci0gICAgICAgIHJldHVybiBwYXJzZVRyeVN0YXRlbWVudChjb250
ZXh0KTsKLSAgICBjYXNlIERFQlVHR0VSOgotICAgICAgICByZXR1cm4gcGFyc2VEZWJ1Z2dlclN0
YXRlbWVudChjb250ZXh0KTsKLSAgICBjYXNlIEVPRlRPSzoKLSAgICBjYXNlIENBU0U6Ci0gICAg
Y2FzZSBDTE9TRUJSQUNFOgotICAgIGNhc2UgREVGQVVMVDoKLSAgICAgICAgLy8gVGhlc2UgdG9r
ZW5zIGltcGx5IHRoZSBlbmQgb2YgYSBzZXQgb2Ygc291cmNlIGVsZW1lbnRzCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25P
ckxhYmVsU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgU1RSSU5HOgotICAgICAgICBkaXJl
Y3RpdmUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCA9IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBUcmVlU3RhdGVtZW50IGV4cHJTdGF0ZW1lbnQgPSBwYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQoY29udGV4dCk7Ci0gICAgICAgIGlmIChkaXJlY3RpdmUgJiYgbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCAhPSBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQpCi0gICAgICAgICAgICBkaXJl
Y3RpdmUgPSAwOwotICAgICAgICByZXR1cm4gZXhwclN0YXRlbWVudDsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgSlNQYXJz
ZXI6OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBt
YXRjaE9yRmFpbChJREVOVCk7Ci0gICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVz
c2FnZShkZWNsYXJlUGFyYW1ldGVyKG1fdG9rZW4ubV9kYXRhLmlkZW50KSwgIkNhbm5vdCBkZWNs
YXJlIGEgcGFyYW1ldGVyIG5hbWVkIiwgbV90b2tlbi5tX2RhdGEuaWRlbnQtPmltcGwoKSwgIiBp
biBzdHJpY3QgbW9kZSIpOwotICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3QgPSBjb250
ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKm1fdG9rZW4ubV9kYXRhLmlkZW50KTsKLSAg
ICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCB0YWlsID0gbGlzdDsKLSAgICBuZXh0KCk7Ci0gICAg
d2hpbGUgKG1hdGNoKENPTU1BKSkgewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIG1hdGNoT3JG
YWlsKElERU5UKTsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKLSAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2Fn
ZShkZWNsYXJlUGFyYW1ldGVyKGlkZW50KSwgIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5h
bWVkIiwgaWRlbnQtPmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIG5leHQoKTsK
LSAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCh0YWlsLCAq
aWRlbnQpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IEpTUGFyc2VyOjpwYXJzZUZ1bmN0aW9uQm9keShU
cmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAg
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdHJpY3RNb2RlKCkpOwotICAg
IERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7Ci0gICAgbV9z
dGF0ZW1lbnREZXB0aCA9IDA7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9k
eUJ1aWxkZXIgYm9keUJ1aWxkZXIobV9nbG9iYWxEYXRhLCBtX2xleGVyKTsKLSAgICBmYWlsSWZG
YWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIp
KTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RyaWN0TW9kZSgpKTsK
LX0KLQotdGVtcGxhdGUgPEpTUGFyc2VyOjpGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVu
dHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBib29s
IEpTUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3Qg
SWRlbnRpZmllciomIG5hbWUsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLCBU
cmVlRnVuY3Rpb25Cb2R5JiBib2R5LCBpbnQmIG9wZW5CcmFjZVBvcywgaW50JiBjbG9zZUJyYWNl
UG9zLCBpbnQmIGJvZHlTdGFydExpbmUpCi17Ci0gICAgQXV0b1BvcFNjb3BlUmVmIGZ1bmN0aW9u
U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwotICAgIGZ1bmN0aW9uU2NvcGUtPnNldElzRnVuY3Rp
b24oKTsKLSAgICBpZiAobWF0Y2goSURFTlQpKSB7Ci0gICAgICAgIG5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhNZXNzYWdlKCpuYW1lID09IG1fZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvLCAiQ2Fubm90IG5hbWUgYSBm
dW5jdGlvbiBfX3Byb3RvX18iKTsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBpZiAoIW5hbWVJ
c0luQ29udGFpbmluZ1Njb3BlKQotICAgICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdChmdW5j
dGlvblNjb3BlLT5kZWNsYXJlVmFyaWFibGUobmFtZSkpOwotICAgIH0gZWxzZSBpZiAocmVxdWly
ZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotICAgIGlmICghbWF0Y2goQ0xPU0VQQVJFTikpIHsK
LSAgICAgICAgcGFyYW1ldGVycyA9IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhjb250ZXh0KTsKLSAg
ICAgICAgZmFpbElmRmFsc2UocGFyYW1ldGVycyk7Ci0gICAgfQotICAgIGNvbnN1bWVPckZhaWwo
Q0xPU0VQQVJFTik7Ci0gICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFKTsKLQotICAgIG9wZW5CcmFj
ZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOwotICAgIGJvZHlTdGFydExpbmUgPSB0b2tl
bkxpbmUoKTsKLQotICAgIC8vIElmIHdlIGtub3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5
LCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgaW5mbyBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBl
bmQgb2YgdGhlIGZ1bmN0aW9uLgotICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRl
bSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENh
Y2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VQb3MpIDogMCkgewotICAgICAgICAvLyBJZiB3ZSdy
ZSBpbiBhIHN0cmljdCBjb250ZXh0LCB0aGUgY2FjaGVkIGZ1bmN0aW9uIGluZm8gbXVzdCBzYXkg
aXQgd2FzIHN0cmljdCB0b28uCi0gICAgICAgIEFTU0VSVCghc3RyaWN0TW9kZSgpIHx8IGNhY2hl
ZEluZm8tPnN0cmljdE1vZGUpOwotICAgICAgICBib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlv
bkJvZHkoY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7Ci0KLSAgICAgICAgZnVuY3Rpb25TY29wZS0+
cmVzdG9yZUZ1bmN0aW9uSW5mbyhjYWNoZWRJbmZvKTsKLSAgICAgICAgZmFpbElmRmFsc2UocG9w
U2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykp
OwotCi0gICAgICAgIGNsb3NlQnJhY2VQb3MgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlUG9zOwot
ICAgICAgICBtX3Rva2VuID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7Ci0gICAgICAg
IG1fbGV4ZXItPnNldE9mZnNldChtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQpOwotICAgICAgICBt
X2xleGVyLT5zZXRMaW5lTnVtYmVyKG1fdG9rZW4ubV9pbmZvLmxpbmUpOwotCi0gICAgICAgIG5l
eHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbmV4dCgpOwotCi0gICAg
Ym9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKGJvZHkp
OwotICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgbmFtZSkgewotICAgICAg
ICBmYWlsSWZUcnVlV2l0aE5hbWVBbmRNZXNzYWdlKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlz
IG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBmYWlsSWZUcnVlV2l0aE5hbWVB
bmRNZXNzYWdlKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSwgIkZ1
bmN0aW9uIG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUi
KTsKLSAgICB9Ci0gICAgY2xvc2VCcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOwot
ICAgIAotICAgIC8vIENhY2hlIHRoZSB0b2tlbml6ZXIgc3RhdGUgYW5kIHRoZSBmdW5jdGlvbiBz
Y29wZSB0aGUgZmlyc3QgdGltZSB0aGUgZnVuY3Rpb24gaXMgcGFyc2VkLgotICAgIC8vIEFueSBm
dXR1cmUgcmVwYXJzaW5nIGNhbiB0aGVuIHNraXAgdGhlIGZ1bmN0aW9uLgotICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluaW11bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSA9IDY0OwotICAgIE93blB0cjxT
b3VyY2VQcm92aWRlckNhY2hlSXRlbT4gbmV3SW5mbzsKLSAgICBpbnQgZnVuY3Rpb25MZW5ndGgg
PSBjbG9zZUJyYWNlUG9zIC0gb3BlbkJyYWNlUG9zOwotICAgIGlmIChUcmVlQnVpbGRlcjo6Q2Fu
VXNlRnVuY3Rpb25DYWNoZSAmJiBtX2Z1bmN0aW9uQ2FjaGUgJiYgZnVuY3Rpb25MZW5ndGggPiBt
aW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlKSB7Ci0gICAgICAgIG5ld0luZm8gPSBhZG9wdFB0
cihuZXcgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0obV90b2tlbi5tX2luZm8ubGluZSwgY2xvc2VC
cmFjZVBvcykpOwotICAgICAgICBmdW5jdGlvblNjb3BlLT5zYXZlRnVuY3Rpb25JbmZvKG5ld0lu
Zm8uZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlv
blNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSk7Ci0gICAgbWF0Y2hP
ckZhaWwoQ0xPU0VCUkFDRSk7Ci0KLSAgICBpZiAobmV3SW5mbykgewotICAgICAgICB1bnNpZ25l
ZCBhcHByb3hpbWF0ZUJ5dGVTaXplID0gbmV3SW5mby0+YXBwcm94aW1hdGVCeXRlU2l6ZSgpOwot
ICAgICAgICBtX2Z1bmN0aW9uQ2FjaGUtPmFkZChvcGVuQnJhY2VQb3MsIG5ld0luZm8ucmVsZWFz
ZSgpLCBhcHByb3hpbWF0ZUJ5dGVTaXplKTsKLSAgICB9Ci0KLSAgICBuZXh0KCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBKU1BhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0
KQotewotICAgIEFTU0VSVChtYXRjaChGVU5DVElPTikpOwotICAgIG5leHQoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBuYW1lID0gMDsKLSAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJh
bWV0ZXJzID0gMDsKLSAgICBUcmVlRnVuY3Rpb25Cb2R5IGJvZHkgPSAwOwotICAgIGludCBvcGVu
QnJhY2VQb3MgPSAwOwotICAgIGludCBjbG9zZUJyYWNlUG9zID0gMDsKLSAgICBpbnQgYm9keVN0
YXJ0TGluZSA9IDA7Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9u
TmVlZHNOYW1lLCB0cnVlPihjb250ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJh
Y2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpKSk7Ci0gICAgZmFpbElmRmFsc2Uo
bmFtZSk7Ci0gICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSkpOwot
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KG5hbWUsIGJvZHksIHBh
cmFtZXRlcnMsIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSwgbV9s
YXN0TGluZSk7Ci19Ci0KLXN0cnVjdCBMYWJlbEluZm8gewotICAgIExhYmVsSW5mbyhjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQotICAgICAgICA6IG1faWRlbnQo
aWRlbnQpCi0gICAgICAgICwgbV9zdGFydChzdGFydCkKLSAgICAgICAgLCBtX2VuZChlbmQpCi0g
ICAgewotICAgIH0KLQotICAgIGNvbnN0IElkZW50aWZpZXIqIG1faWRlbnQ7Ci0gICAgaW50IG1f
c3RhcnQ7Ci0gICAgaW50IG1fZW5kOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25PckxhYmVsU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotCi0gICAgLyogRXhwcmVzc2lvbiBhbmQgTGFiZWwg
c3RhdGVtZW50cyBhcmUgYW1iaWd1b3VzIGF0IExMKDEpLCBzbyB3ZSBoYXZlIGEKLSAgICAgKiBz
cGVjaWFsIGNhc2UgdGhhdCBsb29rcyBmb3IgYSBjb2xvbiBhcyB0aGUgbmV4dCBjaGFyYWN0ZXIg
aW4gdGhlIGlucHV0LgotICAgICAqLwotICAgIFZlY3RvcjxMYWJlbEluZm8+IGxhYmVsczsKLQot
ICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQg
c3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGlmICghbmV4dFRva2VuSXNDb2xvbigp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoaXQgdGhpcyBwYXRoIHdlJ3JlIG1ha2luZyBhIGV4
cHJlc3Npb24gc3RhdGVtZW50LCB3aGljaAotICAgICAgICAgICAgLy8gYnkgZGVmaW5pdGlvbiBj
YW4ndCBtYWtlIHVzZSBvZiBjb250aW51ZS9icmVhayBzbyB3ZSBjYW4ganVzdAotICAgICAgICAg
ICAgLy8gaWdub3JlIGFueSBsYWJlbHMgd2UgbWlnaHQgaGF2ZSBhY2N1bXVsYXRlZC4KLSAgICAg
ICAgICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4
dCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShleHByZXNzaW9uKTsKLSAgICAgICAgICAgIGZh
aWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVFeHByU3RhdGVtZW50KGV4cHJlc3Npb24sIHN0YXJ0TGluZSwgbV9sYXN0TGluZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKLSAgICAgICAgaW50IGVuZCA9IHRva2VuRW5kKCk7Ci0gICAgICAgIG5leHQoKTsK
LSAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTik7Ci0gICAgICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIE8oTl4yKSBvdmVyIHRoZSBj
dXJyZW50IGxpc3Qgb2YgY29uc2VjdXRpdmUgbGFiZWxzLCBidXQgSQotICAgICAgICAgICAgLy8g
aGF2ZSBuZXZlciBzZWVuIG1vcmUgdGhhbiBvbmUgbGFiZWwgaW4gYSByb3cgaW4gdGhlIHJlYWwg
d29ybGQuCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7
IGkrKykKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGlkZW50LT5pbXBsKCkgPT0gbGFiZWxz
W2ldLm1faWRlbnQtPmltcGwoKSk7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlKGdldExhYmVsKGlk
ZW50KSk7Ci0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKExhYmVsSW5mbyhpZGVudCwgc3RhcnQs
IGVuZCkpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAobWF0Y2goSURFTlQpKTsKLSAgICBib29s
IGlzTG9vcCA9IGZhbHNlOwotICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICBjYXNl
IEZPUjoKLSAgICBjYXNlIFdISUxFOgotICAgIGNhc2UgRE86Ci0gICAgICAgIGlzTG9vcCA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7Ci0gICAgaWYgKCFtX3N5bnRheEFs
cmVhZHlWYWxpZGF0ZWQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMu
c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBwdXNoTGFiZWwobGFiZWxzW2ldLm1faWRlbnQsIGlz
TG9vcCk7Ci0gICAgfQotICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1l
bnQoY29udGV4dCwgdW51c2VkKTsKLSAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7IGkrKykKLSAg
ICAgICAgICAgIHBvcExhYmVsKCk7Ci0gICAgfQotICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgY29uc3QgTGFiZWxJbmZvJiBpbmZvID0gbGFiZWxzW2xhYmVscy5zaXplKCkgLSBpIC0gMV07
Ci0gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQoaW5mby5t
X2lkZW50LCBzdGF0ZW1lbnQsIGluZm8ubV9zdGFydCwgaW5mby5tX2VuZCk7Ci0gICAgfQotICAg
IHJldHVybiBzdGF0ZW1lbnQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQotewotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBUcmVl
RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgIGZh
aWxJZkZhbHNlKGV4cHJlc3Npb24pOwotICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7
Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChleHByZXNzaW9uLCBzdGFy
dExpbmUsIG1fbGFzdExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKElGKSk7Ci0KLSAgICBpbnQgc3RhcnQgPSB0b2tlbkxp
bmUoKTsKLSAgICBuZXh0KCk7Ci0KLSAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7Ci0KLSAg
ICBUcmVlRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0g
ICAgZmFpbElmRmFsc2UoY29uZGl0aW9uKTsKLSAgICBpbnQgZW5kID0gdG9rZW5MaW5lKCk7Ci0g
ICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLQotICAgIGNvbnN0IElkZW50aWZpZXIqIHVu
dXNlZCA9IDA7Ci0gICAgVHJlZVN0YXRlbWVudCB0cnVlQmxvY2sgPSBwYXJzZVN0YXRlbWVudChj
b250ZXh0LCB1bnVzZWQpOwotICAgIGZhaWxJZkZhbHNlKHRydWVCbG9jayk7Ci0KLSAgICBpZiAo
IW1hdGNoKEVMU0UpKQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVJZlN0YXRlbWVudChj
b25kaXRpb24sIHRydWVCbG9jaywgc3RhcnQsIGVuZCk7Ci0gICAgCi0gICAgVmVjdG9yPFRyZWVF
eHByZXNzaW9uPiBleHByU3RhY2s7Ci0gICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gcG9zU3Rh
Y2s7Ci0gICAgVmVjdG9yPFRyZWVTdGF0ZW1lbnQ+IHN0YXRlbWVudFN0YWNrOwotICAgIGJvb2wg
dHJhaWxpbmdFbHNlID0gZmFsc2U7Ci0gICAgZG8gewotICAgICAgICBuZXh0KCk7Ci0gICAgICAg
IGlmICghbWF0Y2goSUYpKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQg
PSAwOwotICAgICAgICAgICAgVHJlZVN0YXRlbWVudCBibG9jayA9IHBhcnNlU3RhdGVtZW50KGNv
bnRleHQsIHVudXNlZCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShibG9jayk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnRTdGFjay5hcHBlbmQoYmxvY2spOwotICAgICAgICAgICAgdHJhaWxpbmdF
bHNlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGludCBp
bm5lclN0YXJ0ID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgCi0gICAg
ICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsKLSAgICAgICAgCi0gICAgICAgIFRyZWVFeHBy
ZXNzaW9uIGlubmVyQ29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAg
ICBmYWlsSWZGYWxzZShpbm5lckNvbmRpdGlvbik7Ci0gICAgICAgIGludCBpbm5lckVuZCA9IHRv
a2VuTGluZSgpOwotICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwotICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAgICAgICBUcmVlU3RhdGVtZW50IGlubmVy
VHJ1ZUJsb2NrID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKLSAgICAgICAgZmFp
bElmRmFsc2UoaW5uZXJUcnVlQmxvY2spOyAgICAgCi0gICAgICAgIGV4cHJTdGFjay5hcHBlbmQo
aW5uZXJDb25kaXRpb24pOwotICAgICAgICBwb3NTdGFjay5hcHBlbmQobWFrZV9wYWlyKGlubmVy
U3RhcnQsIGlubmVyRW5kKSk7Ci0gICAgICAgIHN0YXRlbWVudFN0YWNrLmFwcGVuZChpbm5lclRy
dWVCbG9jayk7Ci0gICAgfSB3aGlsZSAobWF0Y2goRUxTRSkpOwotCi0gICAgaWYgKCF0cmFpbGlu
Z0Vsc2UpIHsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24gY29uZGl0aW9uID0gZXhwclN0YWNrLmxh
c3QoKTsKLSAgICAgICAgZXhwclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgVHJlZVN0YXRl
bWVudCB0cnVlQmxvY2sgPSBzdGF0ZW1lbnRTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlbWVu
dFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgcGFpcjxpbnQsIGludD4gcG9zID0gcG9zU3Rh
Y2subGFzdCgpOwotICAgICAgICBwb3NTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIHN0YXRl
bWVudFN0YWNrLmFwcGVuZChjb250ZXh0LmNyZWF0ZUlmU3RhdGVtZW50KGNvbmRpdGlvbiwgdHJ1
ZUJsb2NrLCBwb3MuZmlyc3QsIHBvcy5zZWNvbmQpKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIWV4
cHJTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24gY29uZGl0aW9uID0g
ZXhwclN0YWNrLmxhc3QoKTsKLSAgICAgICAgZXhwclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgVHJlZVN0YXRlbWVudCBmYWxzZUJsb2NrID0gc3RhdGVtZW50U3RhY2subGFzdCgpOwotICAg
ICAgICBzdGF0ZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIFRyZWVTdGF0ZW1lbnQg
dHJ1ZUJsb2NrID0gc3RhdGVtZW50U3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZW1lbnRTdGFj
ay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIHBhaXI8aW50LCBpbnQ+IHBvcyA9IHBvc1N0YWNrLmxh
c3QoKTsKLSAgICAgICAgcG9zU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBzdGF0ZW1lbnRT
dGFjay5hcHBlbmQoY29udGV4dC5jcmVhdGVJZlN0YXRlbWVudChjb25kaXRpb24sIHRydWVCbG9j
aywgZmFsc2VCbG9jaywgcG9zLmZpcnN0LCBwb3Muc2Vjb25kKSk7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUlmU3RhdGVtZW50KGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBz
dGF0ZW1lbnRTdGFjay5sYXN0KCksIHN0YXJ0LCBlbmQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZUV4cHJlc3Npb24oVHJl
ZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgZmFpbElmU3RhY2tPdmVyZmxvdygpOwotICAgIFRy
ZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwot
ICAgIGZhaWxJZkZhbHNlKG5vZGUpOwotICAgIGlmICghbWF0Y2goQ09NTUEpKQotICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICBuZXh0KCk7Ci0gICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
Kys7Ci0gICAgbV9ub25MSFNDb3VudCsrOwotICAgIFRyZWVFeHByZXNzaW9uIHJpZ2h0ID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShyaWdodCk7
Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkNvbW1hIGNvbW1hTm9kZSA9IGNvbnRleHQuY3Jl
YXRlQ29tbWFFeHByKG5vZGUsIHJpZ2h0KTsKLSAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7Ci0g
ICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAgICAgICByaWdo
dCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKHJpZ2h0KTsKLSAgICAgICAgY29udGV4dC5hcHBlbmRUb0NvbW1hKGNvbW1hTm9kZSwgcmln
aHQpOwotICAgIH0KLSAgICByZXR1cm4gY29tbWFOb2RlOwotfQotCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQYXJzZXI6OnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgZmFpbElmU3RhY2tPdmVy
ZmxvdygpOwotICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgaW5pdGlhbEFz
c2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OwotICAgIGludCBpbml0aWFsTm9uTEhT
Q291bnQgPSBtX25vbkxIU0NvdW50OwotICAgIFRyZWVFeHByZXNzaW9uIGxocyA9IHBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKGxocyk7Ci0gICAg
aWYgKGluaXRpYWxOb25MSFNDb3VudCAhPSBtX25vbkxIU0NvdW50KQotICAgICAgICByZXR1cm4g
bGhzOwotCi0gICAgaW50IGFzc2lnbm1lbnRTdGFjayA9IDA7Ci0gICAgT3BlcmF0b3Igb3A7Ci0g
ICAgYm9vbCBoYWRBc3NpZ25tZW50ID0gZmFsc2U7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAgICAgICBjYXNlIEVRVUFMOiBvcCA9IE9w
RXF1YWw7IGJyZWFrOwotICAgICAgICBjYXNlIFBMVVNFUVVBTDogb3AgPSBPcFBsdXNFcTsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTUlOVVNFUVVBTDogb3AgPSBPcE1pbnVzRXE7IGJyZWFrOwotICAg
ICAgICBjYXNlIE1VTFRFUVVBTDogb3AgPSBPcE11bHRFcTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RElWRVFVQUw6IG9wID0gT3BEaXZFcTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFNISUZURVFVQUw6
IG9wID0gT3BMU2hpZnQ7IGJyZWFrOwotICAgICAgICBjYXNlIFJTSElGVEVRVUFMOiBvcCA9IE9w
UlNoaWZ0OyBicmVhazsKLSAgICAgICAgY2FzZSBVUlNISUZURVFVQUw6IG9wID0gT3BVUlNoaWZ0
OyBicmVhazsKLSAgICAgICAgY2FzZSBBTkRFUVVBTDogb3AgPSBPcEFuZEVxOyBicmVhazsKLSAg
ICAgICAgY2FzZSBYT1JFUVVBTDogb3AgPSBPcFhPckVxOyBicmVhazsKLSAgICAgICAgY2FzZSBP
UkVRVUFMOiBvcCA9IE9wT3JFcTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgTU9ERVFVQUw6IG9wID0g
T3BNb2RFcTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnb3RvIGVuZDsK
LSAgICAgICAgfQotICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAg
ICAgaGFkQXNzaWdubWVudCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNr
QXBwZW5kKGFzc2lnbm1lbnRTdGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydCgpLCBtX2Fzc2ln
bm1lbnRDb3VudCwgb3ApOwotICAgICAgICBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAg
bV9hc3NpZ25tZW50Q291bnQrKzsKLSAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxk
U3RyaW5ncyk7Ci0gICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRpZmllciAm
JiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJp
Y3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFz
dElkZW50aWZpZXIsICInZXZhbCcgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7
Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidhcmd1bWVu
dHMnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgZGVj
bGFyZVdyaXRlKG1fbGFzdElkZW50aWZpZXIpOwotICAgICAgICAgICAgbV9sYXN0SWRlbnRpZmll
ciA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGhzID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Np
b24oY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKGxocyk7Ci0gICAgICAgIGlmIChpbml0
aWFsTm9uTEhTQ291bnQgIT0gbV9ub25MSFNDb3VudCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLWVuZDoKLSAgICBpZiAoaGFkQXNzaWdubWVudCkKLSAgICAgICAgbV9ub25MSFNDb3VudCsr
OwotCi0gICAgaWYgKCFUcmVlQnVpbGRlcjo6Q3JlYXRlc0FTVCkKLSAgICAgICAgcmV0dXJuIGxo
czsKLQotICAgIHdoaWxlIChhc3NpZ25tZW50U3RhY2spCi0gICAgICAgIGxocyA9IGNvbnRleHQu
Y3JlYXRlQXNzaWdubWVudChhc3NpZ25tZW50U3RhY2ssIGxocywgaW5pdGlhbEFzc2lnbm1lbnRD
b3VudCwgbV9hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tlbkVuZCgpKTsKLQotICAgIHJldHVybiBs
aHM7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQ
YXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQot
ewotICAgIFRyZWVFeHByZXNzaW9uIGNvbmQgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oY29udGV4
dCk7Ci0gICAgZmFpbElmRmFsc2UoY29uZCk7Ci0gICAgaWYgKCFtYXRjaChRVUVTVElPTikpCi0g
ICAgICAgIHJldHVybiBjb25kOwotICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwot
ICAgIG1fbm9uTEhTQ291bnQrKzsKLSAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJp
bmdzKTsKLSAgICBUcmVlRXhwcmVzc2lvbiBsaHMgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KGNvbnRleHQpOwotICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoQ09MT04sIFRyZWVCdWlsZGVy
OjpEb250QnVpbGRTdHJpbmdzKTsKLQotICAgIFRyZWVFeHByZXNzaW9uIHJocyA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UocmhzKTsKLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVDb25kaXRpb25hbEV4cHIoY29uZCwgbGhzLCByaHMpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzVW5hcnlPcChKU1Rva2VuVHlwZSB0b2tlbikK
LXsKLSAgICByZXR1cm4gdG9rZW4gJiBVbmFyeU9wVG9rZW5GbGFnOwotfQotCi1pbnQgSlNQYXJz
ZXI6OmlzQmluYXJ5T3BlcmF0b3IoSlNUb2tlblR5cGUgdG9rZW4pCi17Ci0gICAgaWYgKG1fYWxs
b3dzSW4pCi0gICAgICAgIHJldHVybiB0b2tlbiAmIChCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1h
c2sgPDwgQmluYXJ5T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9uYWxTaGlmdCk7Ci0g
ICAgcmV0dXJuIHRva2VuICYgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZUJp
bmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0KLSAgICBpbnQgb3BlcmFu
ZFN0YWNrRGVwdGggPSAwOwotICAgIGludCBvcGVyYXRvclN0YWNrRGVwdGggPSAwOwotICAgIHR5
cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlFeHByQ29udGV4dCBiaW5hcnlFeHByQ29udGV4dChj
b250ZXh0KTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgZXhwclN0YXJ0ID0gdG9r
ZW5TdGFydCgpOwotICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50
Q291bnQ7Ci0gICAgICAgIFRyZWVFeHByZXNzaW9uIGN1cnJlbnQgPSBwYXJzZVVuYXJ5RXhwcmVz
c2lvbihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFsc2UoY3VycmVudCk7Ci0KLSAgICAgICAg
Y29udGV4dC5hcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5kU3RhY2tEZXB0aCwgY3Vy
cmVudCwgZXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgbGFzdFRva2VuRW5kKCksIGluaXRpYWxB
c3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCk7Ci0gICAgICAgIGludCBwcmVjZWRlbmNl
ID0gaXNCaW5hcnlPcGVyYXRvcihtX3Rva2VuLm1fdHlwZSk7Ci0gICAgICAgIGlmICghcHJlY2Vk
ZW5jZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9u
Q291bnQrKzsKLSAgICAgICAgbV9ub25MSFNDb3VudCsrOwotICAgICAgICBpbnQgb3BlcmF0b3JU
b2tlbiA9IG1fdG9rZW4ubV90eXBlOwotICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVp
bGRTdHJpbmdzKTsKLQotICAgICAgICB3aGlsZSAob3BlcmF0b3JTdGFja0RlcHRoICYmICBjb250
ZXh0Lm9wZXJhdG9yU3RhY2tIYXNIaWdoZXJQcmVjZWRlbmNlKG9wZXJhdG9yU3RhY2tEZXB0aCwg
cHJlY2VkZW5jZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kU3RhY2tEZXB0aCA+IDEp
OwotCi0gICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6QmluYXJ5T3BlcmFuZCByaHMg
PSBjb250ZXh0LmdldEZyb21PcGVyYW5kU3RhY2soLTEpOwotICAgICAgICAgICAgdHlwZW5hbWUg
VHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgbGhzID0gY29udGV4dC5nZXRGcm9tT3BlcmFuZFN0
YWNrKC0yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2hyaW5rT3BlcmFuZFN0YWNrQnkob3BlcmFu
ZFN0YWNrRGVwdGgsIDIpOwotICAgICAgICAgICAgY29udGV4dC5hcHBlbmRCaW5hcnlPcGVyYXRp
b24ob3BlcmFuZFN0YWNrRGVwdGgsIG9wZXJhdG9yU3RhY2tEZXB0aCwgbGhzLCByaHMpOwotICAg
ICAgICAgICAgY29udGV4dC5vcGVyYXRvclN0YWNrUG9wKG9wZXJhdG9yU3RhY2tEZXB0aCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY29udGV4dC5vcGVyYXRvclN0YWNrQXBwZW5kKG9wZXJhdG9yU3Rh
Y2tEZXB0aCwgb3BlcmF0b3JUb2tlbiwgcHJlY2VkZW5jZSk7Ci0gICAgfQotICAgIHdoaWxlIChv
cGVyYXRvclN0YWNrRGVwdGgpIHsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmRTdGFja0RlcHRoID4g
MSk7Ci0KLSAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgcmhzID0g
Y29udGV4dC5nZXRGcm9tT3BlcmFuZFN0YWNrKC0xKTsKLSAgICAgICAgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OkJpbmFyeU9wZXJhbmQgbGhzID0gY29udGV4dC5nZXRGcm9tT3BlcmFuZFN0YWNrKC0y
KTsKLSAgICAgICAgY29udGV4dC5zaHJpbmtPcGVyYW5kU3RhY2tCeShvcGVyYW5kU3RhY2tEZXB0
aCwgMik7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5T3BlcmF0aW9uKG9wZXJhbmRTdGFj
a0RlcHRoLCBvcGVyYXRvclN0YWNrRGVwdGgsIGxocywgcmhzKTsKLSAgICAgICAgY29udGV4dC5v
cGVyYXRvclN0YWNrUG9wKG9wZXJhdG9yU3RhY2tEZXB0aCk7Ci0gICAgfQotICAgIHJldHVybiBj
b250ZXh0LnBvcE9wZXJhbmRTdGFjayhvcGVyYW5kU3RhY2tEZXB0aCk7Ci19Ci0KLQotdGVtcGxh
dGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgSlNQYXJz
ZXI6OnBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgYm9vbCB3YXNJ
ZGVudCA9IGZhbHNlOwotICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICBuYW1lZFBy
b3BlcnR5OgotICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgIHdhc0lkZW50ID0gdHJ1ZTsKLSAgICBj
YXNlIFNUUklORzogewotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4u
bV9kYXRhLmlkZW50OwotICAgICAgICBpZiAoY29tcGxldGUgfHwgKHdhc0lkZW50ICYmICgqaWRl
bnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50ID09IG1fZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCi0gICAgICAgICAgICBuZXh0RXhwZWN0SWRl
bnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZlZFdvcmRzIHwg
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKLQotICAgICAgICBpZiAobWF0Y2goQ09M
T04pKSB7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBu
b2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGZh
aWxJZkZhbHNlKG5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3Jl
YXRlUHJvcGVydHk8Y29tcGxldGU+KGlkZW50LCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50
KTsKLSAgICAgICAgfQotICAgICAgICBmYWlsSWZGYWxzZSh3YXNJZGVudCk7Ci0gICAgICAgIG1h
dGNoT3JGYWlsKElERU5UKTsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogYWNjZXNzb3JOYW1l
ID0gMDsKLSAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7Ci0g
ICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7Ci0gICAgICAgIGludCBvcGVuQnJhY2VQ
b3MgPSAwOwotICAgICAgICBpbnQgY2xvc2VCcmFjZVBvcyA9IDA7Ci0gICAgICAgIGludCBib2R5
U3RhcnRMaW5lID0gMDsKLSAgICAgICAgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGU7Ci0gICAgICAg
IGlmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5nZXQpCi0gICAgICAg
ICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7Ci0gICAgICAgIGVsc2UgaWYgKCppZGVu
dCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnNldCkKLSAgICAgICAgICAgIHR5cGUg
PSBQcm9wZXJ0eU5vZGU6OlNldHRlcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbCgp
OwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25OZWVkc05h
bWUsIGZhbHNlPihjb250ZXh0LCBhY2Nlc3Nvck5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5C
cmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSkpKTsKLSAgICAgICAgcmV0dXJu
IGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4o
dHlwZSwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3Nl
QnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwotICAgIH0KLSAgICBjYXNlIE5V
TUJFUjogewotICAgICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91
YmxlVmFsdWU7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTik7
Ci0gICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KGNvbnRleHQpOwotICAgICAgICBmYWlsSWZGYWxzZShub2RlKTsKLSAgICAgICAgcmV0dXJuIGNv
bnRleHQudGVtcGxhdGUgY3JlYXRlUHJvcGVydHk8Y29tcGxldGU+KG1fZ2xvYmFsRGF0YSwgcHJv
cGVydHlOYW1lLCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgZmFpbElmRmFsc2UobV90b2tlbi5tX3R5cGUgJiBLZXl3b3JkVG9rZW5G
bGFnKTsKLSAgICAgICAgZ290byBuYW1lZFByb3BlcnR5OwotICAgIH0KLX0KLQotdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBKU1BhcnNlcjo6cGFyc2VPYmplY3RM
aXRlcmFsKFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIGludCBzdGFydE9mZnNldCA9IG1f
dG9rZW4ubV9kYXRhLmludFZhbHVlOwotICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJS
QUNFLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0KLSAgICBpZiAobWF0Y2goQ0xP
U0VCUkFDRSkpIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVPYmplY3RMaXRlcmFsKCk7Ci0gICAgfQotCi0gICAgVHJlZVByb3BlcnR5IHByb3BlcnR5ID0g
cGFyc2VQcm9wZXJ0eTxmYWxzZT4oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UocHJvcGVydHkp
OwotICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkICYmIGNvbnRleHQuZ2V0VHlwZShw
cm9wZXJ0eSkgIT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCkgewotICAgICAgICBtX2xleGVyLT5z
ZXRPZmZzZXQoc3RhcnRPZmZzZXQpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVybiBw
YXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7Ci0gICAgfQotICAgIFRyZWVQcm9wZXJ0
eUxpc3QgcHJvcGVydHlMaXN0ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHkp
OwotICAgIFRyZWVQcm9wZXJ0eUxpc3QgdGFpbCA9IHByb3BlcnR5TGlzdDsKLSAgICB3aGlsZSAo
bWF0Y2goQ09NTUEpKSB7Ci0gICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmlu
Z3MpOwotICAgICAgICAvLyBhbGxvdyBleHRyYSBjb21tYSwgc2VlIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MzkKLSAgICAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0Up
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eTxm
YWxzZT4oY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKLSAgICAgICAg
aWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQgJiYgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5
KSAhPSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICBtX2xleGVyLT5zZXRP
ZmZzZXQoc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgcmV0
dXJuIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAg
ICB0YWlsID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHksIHRhaWwpOwotICAg
IH0KLQotICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VCUkFDRSk7Ci0KLSAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVPYmplY3RMaXRlcmFsKHByb3BlcnR5TGlzdCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQYXJzZXI6OnBhcnNlU3RyaWN0T2JqZWN0
TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBjb25zdW1lT3JGYWlsKE9QRU5C
UkFDRSk7Ci0gICAgCi0gICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7Ci0gICAgICAgIG5leHQo
KTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbCgpOwotICAgIH0K
LSAgICAKLSAgICBUcmVlUHJvcGVydHkgcHJvcGVydHkgPSBwYXJzZVByb3BlcnR5PHRydWU+KGNv
bnRleHQpOwotICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKLSAgICAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZCwgSWRlbnRpZmllclJlcEhhc2g+IE9i
amVjdFZhbGlkYXRpb25NYXA7Ci0gICAgT2JqZWN0VmFsaWRhdGlvbk1hcCBvYmplY3RWYWxpZGF0
b3I7Ci0gICAgLy8gQWRkIHRoZSBmaXJzdCBwcm9wZXJ0eQotICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkKQotICAgICAgICBvYmplY3RWYWxpZGF0b3IuYWRkKGNvbnRleHQuZ2V0TmFt
ZShwcm9wZXJ0eSkuaW1wbCgpLCBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpKTsKLSAgICAKLSAg
ICBUcmVlUHJvcGVydHlMaXN0IHByb3BlcnR5TGlzdCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlM
aXN0KHByb3BlcnR5KTsKLSAgICBUcmVlUHJvcGVydHlMaXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7
Ci0gICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIC8v
IGFsbG93IGV4dHJhIGNvbW1hLCBzZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTkzOQotICAgICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgcHJvcGVydHkgPSBwYXJzZVByb3BlcnR5PHRydWU+KGNvbnRleHQpOwot
ICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7Ci0gICAgICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkKSB7Ci0gICAgICAgICAgICBzdGQ6OnBhaXI8T2JqZWN0VmFsaWRhdGlvbk1h
cDo6aXRlcmF0b3IsIGJvb2w+IHByb3BlcnR5RW50cnlJdGVyID0gb2JqZWN0VmFsaWRhdG9yLmFk
ZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3Bl
cnR5KSk7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnR5RW50cnlJdGVyLnNlY29uZCkgewotICAg
ICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeUl0ZXIuZmlyc3QtPnNlY29uZCA9
PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNv
bnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7Ci0gICAg
ICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVy
dHlFbnRyeUl0ZXIuZmlyc3QtPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlFbnRy
eUl0ZXIuZmlyc3QtPnNlY29uZCB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5
TGlzdChwcm9wZXJ0eSwgdGFpbCk7Ci0gICAgfQotICAgIAotICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VCUkFDRSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbChw
cm9wZXJ0eUxpc3QpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIEpTUGFyc2VyOjpwYXJzZUFycmF5TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkK
LXsKLSAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5CUkFDS0VULCBUcmVlQnVpbGRlcjo6
RG9udEJ1aWxkU3RyaW5ncyk7Ci0KLSAgICBpbnQgZWxpc2lvbnMgPSAwOwotICAgIHdoaWxlICht
YXRjaChDT01NQSkpIHsKLSAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5n
cyk7Ci0gICAgICAgIGVsaXNpb25zKys7Ci0gICAgfQotICAgIGlmIChtYXRjaChDTE9TRUJSQUNL
RVQpKSB7Ci0gICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJheShlbGlzaW9ucyk7Ci0gICAgfQotCi0gICAg
VHJlZUV4cHJlc3Npb24gZWxlbSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7
Ci0gICAgZmFpbElmRmFsc2UoZWxlbSk7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkVsZW1l
bnRMaXN0IGVsZW1lbnRMaXN0ID0gY29udGV4dC5jcmVhdGVFbGVtZW50TGlzdChlbGlzaW9ucywg
ZWxlbSk7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkVsZW1lbnRMaXN0IHRhaWwgPSBlbGVt
ZW50TGlzdDsKLSAgICBlbGlzaW9ucyA9IDA7Ci0gICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgewot
ICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKLSAgICAgICAgZWxp
c2lvbnMgPSAwOwotCi0gICAgICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKLSAgICAgICAgICAg
IG5leHQoKTsKLSAgICAgICAgICAgIGVsaXNpb25zKys7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobWF0Y2goQ0xPU0VCUkFDS0VUKSkgewotICAgICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6
RG9udEJ1aWxkU3RyaW5ncyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJh
eShlbGlzaW9ucywgZWxlbWVudExpc3QpOwotICAgICAgICB9Ci0gICAgICAgIFRyZWVFeHByZXNz
aW9uIGVsZW0gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBm
YWlsSWZGYWxzZShlbGVtKTsKLSAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlRWxlbWVudExp
c3QodGFpbCwgZWxpc2lvbnMsIGVsZW0pOwotICAgIH0KLQotICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VCUkFDS0VUKTsKLQotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFycmF5KGVsZW1lbnRMaXN0
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBKU1Bh
cnNlcjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgY2FzZSBPUEVOQlJBQ0U6Ci0gICAgICAg
IGlmIChzdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpY3RPYmplY3RM
aXRlcmFsKGNvbnRleHQpOwotICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RMaXRlcmFsKGNvbnRl
eHQpOwotICAgIGNhc2UgT1BFTkJSQUNLRVQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUFycmF5TGl0
ZXJhbChjb250ZXh0KTsKLSAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICBuZXh0KCk7Ci0g
ICAgICAgIGludCBvbGROb25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7Ci0gICAgICAgIFRyZWVF
eHByZXNzaW9uIHJlc3VsdCA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgbV9u
b25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OwotICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NF
UEFSRU4pOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGNhc2UgVEhJU1RP
S0VOOiB7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQudGhpc0V4cHIo
KTsKLSAgICB9Ci0gICAgY2FzZSBJREVOVDogewotICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0
YXJ0KCk7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEu
aWRlbnQ7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlh
YmxlKGlkZW50LCBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50KTsK
LSAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IGlkZW50OwotICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVSZXNvbHZlKGlkZW50LCBzdGFydCk7Ci0gICAgfQotICAgIGNhc2UgU1RSSU5HOiB7
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7
Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlU3RyaW5nKGlk
ZW50KTsKLSAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKLSAgICAgICAgZG91YmxlIGQgPSBtX3Rv
a2VuLm1fZGF0YS5kb3VibGVWYWx1ZTsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVOdW1iZXJFeHByKGQpOwotICAgIH0KLSAgICBjYXNlIE5VTExUT0tFTjog
ewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU51bGwoKTsK
LSAgICB9Ci0gICAgY2FzZSBUUlVFVE9LRU46IHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVCb29sZWFuKHRydWUpOwotICAgIH0KLSAgICBjYXNlIEZBTFNF
VE9LRU46IHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVC
b29sZWFuKGZhbHNlKTsKLSAgICB9Ci0gICAgY2FzZSBESVZFUVVBTDoKLSAgICBjYXNlIERJVklE
RTogewotICAgICAgICAvKiByZWdleHAgKi8KLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogcGF0
dGVybjsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogZmxhZ3M7Ci0gICAgICAgIGlmIChtYXRj
aChESVZFUVVBTCkpCi0gICAgICAgICAgICBmYWlsSWZGYWxzZShtX2xleGVyLT5zY2FuUmVnRXhw
KHBhdHRlcm4sIGZsYWdzLCAnPScpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbElm
RmFsc2UobV9sZXhlci0+c2NhblJlZ0V4cChwYXR0ZXJuLCBmbGFncykpOwotCi0gICAgICAgIGlu
dCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBUcmVlRXhw
cmVzc2lvbiByZSA9IGNvbnRleHQuY3JlYXRlUmVnRXhwKCpwYXR0ZXJuLCAqZmxhZ3MsIHN0YXJ0
KTsKLSAgICAgICAgaWYgKCFyZSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogeWFyckVycm9y
TXNnID0gWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi0+dXN0cmluZygpKTsKLSAgICAgICAgICAg
IEFTU0VSVCghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOwotICAgICAgICAgICAgZmFpbFdpdGhN
ZXNzYWdlKHlhcnJFcnJvck1zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlOwotICAg
IH0KLSAgICBkZWZhdWx0OgotICAgICAgICBmYWlsKCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVBcmd1bWVudHMgSlNQYXJzZXI6OnBhcnNlQXJndW1lbnRz
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BF
TlBBUkVOLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0gICAgaWYgKG1hdGNoKENM
T1NFUEFSRU4pKSB7Ci0gICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3Mp
OwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcmd1bWVudHMoKTsKLSAgICB9Ci0gICAg
VHJlZUV4cHJlc3Npb24gZmlyc3RBcmcgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRl
eHQpOwotICAgIGZhaWxJZkZhbHNlKGZpcnN0QXJnKTsKLQotICAgIFRyZWVBcmd1bWVudHNMaXN0
IGFyZ0xpc3QgPSBjb250ZXh0LmNyZWF0ZUFyZ3VtZW50c0xpc3QoZmlyc3RBcmcpOwotICAgIFRy
ZWVBcmd1bWVudHNMaXN0IHRhaWwgPSBhcmdMaXN0OwotICAgIHdoaWxlIChtYXRjaChDT01NQSkp
IHsKLSAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0gICAgICAg
IFRyZWVFeHByZXNzaW9uIGFyZyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7
Ci0gICAgICAgIGZhaWxJZkZhbHNlKGFyZyk7Ci0gICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0
ZUFyZ3VtZW50c0xpc3QodGFpbCwgYXJnKTsKLSAgICB9Ci0gICAgY29uc3VtZU9yRmFpbChDTE9T
RVBBUkVOKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcmd1bWVudHMoYXJnTGlzdCk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQYXJzZXI6
OnBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBUcmVl
RXhwcmVzc2lvbiBiYXNlID0gMDsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAg
aW50IGV4cHJlc3Npb25TdGFydCA9IHN0YXJ0OwotICAgIGludCBuZXdDb3VudCA9IDA7Ci0gICAg
d2hpbGUgKG1hdGNoKE5FVykpIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBuZXdDb3VudCsr
OwotICAgIH0KLQotICAgIGlmIChtYXRjaChGVU5DVElPTikpIHsKLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciogbmFtZSA9ICZtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlm
aWVyOwotICAgICAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0gMDsKLSAg
ICAgICAgVHJlZUZ1bmN0aW9uQm9keSBib2R5ID0gMDsKLSAgICAgICAgaW50IG9wZW5CcmFjZVBv
cyA9IDA7Ci0gICAgICAgIGludCBjbG9zZUJyYWNlUG9zID0gMDsKLSAgICAgICAgaW50IGJvZHlT
dGFydExpbmUgPSAwOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJz
ZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBmYWxzZT4oY29udGV4dCwgbmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3Rh
cnRMaW5lKSkpOwotICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobmFt
ZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3Rh
cnRMaW5lLCBtX2xhc3RMaW5lKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFzZSA9IHBhcnNlUHJp
bWFyeUV4cHJlc3Npb24oY29udGV4dCk7Ci0KLSAgICBmYWlsSWZGYWxzZShiYXNlKTsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAg
IGNhc2UgT1BFTkJSQUNLRVQ6IHsKLSAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25D
b3VudCsrOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQoKTsK
LSAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9u
TEhTQ291bnQ7Ci0gICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25t
ZW50Q291bnQ7Ci0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKLSAg
ICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MoYmFzZSwgcHJvcGVy
dHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0
YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgpKTsKLSAgICAgICAgICAgIGNvbnN1bWVPckZh
aWwoQ0xPU0VCUkFDS0VUKTsKLSAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3Vu
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgT1BFTlBBUkVO
OiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAg
ICAgIGlmIChuZXdDb3VudCkgewotICAgICAgICAgICAgICAgIG5ld0NvdW50LS07Ci0gICAgICAg
ICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgVHJlZUFyZ3Vt
ZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKLSAgICAgICAgICAgICAg
ICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9
IGNvbnRleHQuY3JlYXRlTmV3RXhwcihiYXNlLCBhcmd1bWVudHMsIHN0YXJ0LCBleHByRW5kLCBs
YXN0VG9rZW5FbmQoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIoYmFzZSwgc3RhcnQsIGxhc3RUb2tlbkVu
ZCgpKTsgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKLSAgICAgICAgICAgICAgICBpbnQg
ZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgICAgIFRyZWVBcmd1
bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCk7Ci0gICAgICAgICAgICAg
ICAgZmFpbElmRmFsc2UoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kKCkpOwotICAgICAgICAgICAgICAgIG1fbm9uTEhT
Q291bnQgPSBub25MSFNDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRE9UOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRv
a2VuRW5kKCk7Ci0gICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3Jl
UmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7Ci0gICAgICAg
ICAgICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVEb3RBY2Nlc3MoYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmQoKSk7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290
byBlbmRNZW1iZXJFeHByZXNzaW9uOwotICAgICAgICB9Ci0gICAgfQotZW5kTWVtYmVyRXhwcmVz
c2lvbjoKLSAgICB3aGlsZSAobmV3Q291bnQtLSkKLSAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlTmV3RXhwcihiYXNlLCBzdGFydCwgbGFzdFRva2VuRW5kKCkpOwotICAgIHJldHVybiBiYXNl
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIEpTUGFy
c2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICB0
eXBlbmFtZSBUcmVlQnVpbGRlcjo6VW5hcnlFeHByQ29udGV4dCB1bmFyeUV4cHJDb250ZXh0KGNv
bnRleHQpOwotICAgIEFsbG93SW5PdmVycmlkZSBhbGxvd0luT3ZlcnJpZGUodGhpcyk7Ci0gICAg
aW50IHRva2VuU3RhY2tEZXB0aCA9IDA7Ci0gICAgYm9vbCBtb2RpZmllc0V4cHIgPSBmYWxzZTsK
LSAgICBib29sIHJlcXVpcmVzTEV4cHIgPSBmYWxzZTsKLSAgICB3aGlsZSAoaXNVbmFyeU9wKG1f
dG9rZW4ubV90eXBlKSkgewotICAgICAgICBpZiAoc3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFBMVVNQTFVTOgot
ICAgICAgICAgICAgY2FzZSBNSU5VU01JTlVTOgotICAgICAgICAgICAgY2FzZSBBVVRPUExVU1BM
VVM6Ci0gICAgICAgICAgICBjYXNlIEFVVE9NSU5VU01JTlVTOgotICAgICAgICAgICAgICAgIGZh
aWxJZlRydWUocmVxdWlyZXNMRXhwcik7Ci0gICAgICAgICAgICAgICAgbW9kaWZpZXNFeHByID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZXF1aXJlc0xFeHByID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgREVMRVRFVE9LRU46Ci0gICAgICAgICAgICAg
ICAgZmFpbElmVHJ1ZShyZXF1aXJlc0xFeHByKTsKLSAgICAgICAgICAgICAgICByZXF1aXJlc0xF
eHByID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShyZXF1aXJlc0xFeHByKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX25vbkxIU0Nv
dW50Kys7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVwdGgs
IG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0KCkpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAg
IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgIH0KLSAgICBpbnQgc3ViRXhwclN0
YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZU1lbWJl
ckV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgYm9vbCBp
c0V2YWxPckFyZ3VtZW50cyA9IGZhbHNlOwotICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgIW1fc3lu
dGF4QWxyZWFkeVZhbGlkYXRlZCkgewotICAgICAgICBpZiAoY29udGV4dC5pc1Jlc29sdmUoZXhw
cikpIHsKLSAgICAgICAgICAgIGlzRXZhbE9yQXJndW1lbnRzID0gKm1fbGFzdElkZW50aWZpZXIg
PT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsIHx8ICptX2xhc3RJZGVudGlmaWVy
ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShpc0V2YWxPckFy
Z3VtZW50cyAmJiBtb2RpZmllc0V4cHIsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAi
JyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICBzd2l0Y2ggKG1fdG9r
ZW4ubV90eXBlKSB7Ci0gICAgY2FzZSBQTFVTUExVUzoKLSAgICAgICAgbV9ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50Kys7Ci0gICAgICAgIG1fbm9uTEhTQ291bnQrKzsKLSAgICAgICAgZXhwciA9
IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGV4cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJTdGFydCwg
bGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCkpOwotICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsr
OwotICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JB
cmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9k
aWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KHJlcXVp
cmVzTEV4cHIpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUlO
VVNNSU5VUzoKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAg
IG1fbm9uTEhTQ291bnQrKzsKLSAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBvc3RmaXhOb2Rl
KGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5F
bmQoKSk7Ci0gICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7Ci0gICAgICAgIGZhaWxJZlRydWVJ
ZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJ
ZGVudGlmaWVyLT5pbXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIp
OwotICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QocmVxdWlyZXNMRXhwcik7Ci0gICAgICAgIG5l
eHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotCi0gICAgaWYgKCFUcmVlQnVpbGRl
cjo6Q3JlYXRlc0FTVCAmJiAobV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkIHx8ICFzdHJpY3RNb2Rl
KCkpKQotICAgICAgICByZXR1cm4gZXhwcjsKLQotICAgIHdoaWxlICh0b2tlblN0YWNrRGVwdGgp
IHsKLSAgICAgICAgc3dpdGNoIChjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RUeXBlKHRva2Vu
U3RhY2tEZXB0aCkpIHsKLSAgICAgICAgY2FzZSBFWENMQU1BVElPTjoKLSAgICAgICAgICAgIGV4
cHIgPSBjb250ZXh0LmNyZWF0ZUxvZ2ljYWxOb3QoZXhwcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUSUxERToKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VCaXR3
aXNlTm90Tm9kZShleHByKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1JTlVT
OgotICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZU5lZ2F0ZU5vZGUoZXhwcik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTFVTOgotICAgICAgICAgICAgZXhwciA9IGNv
bnRleHQuY3JlYXRlVW5hcnlQbHVzKGV4cHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUExVU1BMVVM6Ci0gICAgICAgIGNhc2UgQVVUT1BMVVNQTFVTOgotICAgICAgICAgICAg
ZXhwciA9IGNvbnRleHQubWFrZVByZWZpeE5vZGUoZXhwciwgT3BQbHVzUGx1cywgY29udGV4dC51
bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsg
MSwgZW5kKTsKLSAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNSU5VU01JTlVTOgotICAgICAgICBjYXNlIEFVVE9NSU5VU01J
TlVTOgotICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVByZWZpeE5vZGUoZXhwciwgT3BN
aW51c01pbnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVw
dGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwotICAgICAgICAgICAgbV9hc3NpZ25tZW50Q291
bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRZUEVPRjoKLSAgICAgICAg
ICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VUeXBlT2ZOb2RlKGV4cHIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgVk9JRFRPS0VOOgotICAgICAgICAgICAgZXhwciA9IGNvbnRleHQu
Y3JlYXRlVm9pZChleHByKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERFTEVU
RVRPS0VOOgotICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdl
KGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpLCAiQ2Fubm90IGRlbGV0ZSB1bnF1YWxpZmllZCBwcm9w
ZXJ0eSIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7Ci0gICAg
ICAgICAgICBleHByID0gY29udGV4dC5tYWtlRGVsZXRlTm9kZShleHByLCBjb250ZXh0LnVuYXJ5
VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIElmIHdlIGdldCBo
ZXJlIHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSBob3JyaWJseSB3cm9uZwotICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBzdWJFeHByU3RhcnQgPSBjb250ZXh0LnVu
YXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpOwotICAgICAgICBjb250ZXh0
LnVuYXJ5VG9rZW5TdGFja1JlbW92ZUxhc3QodG9rZW5TdGFja0RlcHRoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGV4cHI7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdURgotewotICAgIHRlbXBsYXRlIDw+
IHN0cnVjdCBWZWN0b3JUcmFpdHM8SlNDOjpKU1BhcnNlcjo6U2NvcGU+IDogU2ltcGxlQ2xhc3NW
ZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0
aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIFNjb3BlIGRhdGEgbWVtYmVycyBpbml0aWFsaXpl
IHRvIDAuCi0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTUGFy
c2VyLmgJKHJldmlzaW9uIDk4NzMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBKU1BhcnNlcl9oCi0jZGVmaW5lIEpTUGFyc2VyX2gKLQotI2luY2x1ZGUgIlVTdHJp
bmcuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEZ1bmN0
aW9uUGFyYW1ldGVyczsKLWNsYXNzIElkZW50aWZpZXI7Ci1jbGFzcyBKU0dsb2JhbERhdGE7Ci1j
bGFzcyBTb3VyY2VDb2RlOwotCi1lbnVtIHsKLSAgICBVbmFyeU9wVG9rZW5GbGFnID0gNjQsCi0g
ICAgS2V5d29yZFRva2VuRmxhZyA9IDEyOCwKLSAgICBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZVNo
aWZ0ID0gOCwKLSAgICBCaW5hcnlPcFRva2VuQWxsb3dzSW5QcmVjZWRlbmNlQWRkaXRpb25hbFNo
aWZ0ID0gNCwKLSAgICBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1hc2sgPSAxNSA8PCBCaW5hcnlP
cFRva2VuUHJlY2VkZW5jZVNoaWZ0LAotfTsKLQotI2RlZmluZSBCSU5BUllfT1BfUFJFQ0VERU5D
RShwcmVjKSAoKChwcmVjKSA8PCBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZVNoaWZ0KSB8ICgocHJl
YykgPDwgKEJpbmFyeU9wVG9rZW5QcmVjZWRlbmNlU2hpZnQgKyBCaW5hcnlPcFRva2VuQWxsb3dz
SW5QcmVjZWRlbmNlQWRkaXRpb25hbFNoaWZ0KSkpCi0jZGVmaW5lIElOX09QX1BSRUNFREVOQ0Uo
cHJlYykgKChwcmVjKSA8PCAoQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCArIEJpbmFyeU9w
VG9rZW5BbGxvd3NJblByZWNlZGVuY2VBZGRpdGlvbmFsU2hpZnQpKQotCi1lbnVtIEpTVG9rZW5U
eXBlIHsKLSAgICBOVUxMVE9LRU4gPSBLZXl3b3JkVG9rZW5GbGFnLAotICAgIFRSVUVUT0tFTiwK
LSAgICBGQUxTRVRPS0VOLAotICAgIEJSRUFLLAotICAgIENBU0UsCi0gICAgREVGQVVMVCwKLSAg
ICBGT1IsCi0gICAgTkVXLAotICAgIFZBUiwKLSAgICBDT05TVFRPS0VOLAotICAgIENPTlRJTlVF
LAotICAgIEZVTkNUSU9OLAotICAgIFJFVFVSTiwKLSAgICBJRiwKLSAgICBUSElTVE9LRU4sCi0g
ICAgRE8sCi0gICAgV0hJTEUsCi0gICAgU1dJVENILAotICAgIFdJVEgsCi0gICAgUkVTRVJWRUQs
Ci0gICAgUkVTRVJWRURfSUZfU1RSSUNULAotICAgIFRIUk9XLAotICAgIFRSWSwKLSAgICBDQVRD
SCwKLSAgICBGSU5BTExZLAotICAgIERFQlVHR0VSLAotICAgIEVMU0UsCi0gICAgT1BFTkJSQUNF
ID0gMCwKLSAgICBDTE9TRUJSQUNFLAotICAgIE9QRU5QQVJFTiwKLSAgICBDTE9TRVBBUkVOLAot
ICAgIE9QRU5CUkFDS0VULAotICAgIENMT1NFQlJBQ0tFVCwKLSAgICBDT01NQSwKLSAgICBRVUVT
VElPTiwKLSAgICBOVU1CRVIsCi0gICAgSURFTlQsCi0gICAgU1RSSU5HLAotICAgIFNFTUlDT0xP
TiwKLSAgICBDT0xPTiwKLSAgICBET1QsCi0gICAgRVJST1JUT0ssCi0gICAgRU9GVE9LLAotICAg
IEVRVUFMLAotICAgIFBMVVNFUVVBTCwKLSAgICBNSU5VU0VRVUFMLAotICAgIE1VTFRFUVVBTCwK
LSAgICBESVZFUVVBTCwKLSAgICBMU0hJRlRFUVVBTCwKLSAgICBSU0hJRlRFUVVBTCwKLSAgICBV
UlNISUZURVFVQUwsCi0gICAgQU5ERVFVQUwsCi0gICAgTU9ERVFVQUwsCi0gICAgWE9SRVFVQUws
Ci0gICAgT1JFUVVBTCwKLSAgICBMYXN0VW50YWdnZWRUb2tlbiwKLQotICAgIC8vIEJlZ2luIHRh
Z2dlZCB0b2tlbnMKLSAgICBQTFVTUExVUyA9IDAgfCBVbmFyeU9wVG9rZW5GbGFnLAotICAgIE1J
TlVTTUlOVVMgPSAxIHwgVW5hcnlPcFRva2VuRmxhZywKLSAgICBFWENMQU1BVElPTiA9IDIgfCBV
bmFyeU9wVG9rZW5GbGFnLAotICAgIFRJTERFID0gMyB8IFVuYXJ5T3BUb2tlbkZsYWcsCi0gICAg
QVVUT1BMVVNQTFVTID0gNCB8IFVuYXJ5T3BUb2tlbkZsYWcsCi0gICAgQVVUT01JTlVTTUlOVVMg
PSA1IHwgVW5hcnlPcFRva2VuRmxhZywKLSAgICBUWVBFT0YgPSA2IHwgVW5hcnlPcFRva2VuRmxh
ZyB8IEtleXdvcmRUb2tlbkZsYWcsCi0gICAgVk9JRFRPS0VOID0gNyB8IFVuYXJ5T3BUb2tlbkZs
YWcgfCBLZXl3b3JkVG9rZW5GbGFnLAotICAgIERFTEVURVRPS0VOID0gOCB8IFVuYXJ5T3BUb2tl
bkZsYWcgfCBLZXl3b3JkVG9rZW5GbGFnLAotICAgIE9SID0gMCB8IEJJTkFSWV9PUF9QUkVDRURF
TkNFKDEpLAotICAgIEFORCA9IDEgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgyKSwKLSAgICBCSVRP
UiA9IDIgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgzKSwKLSAgICBCSVRYT1IgPSAzIHwgQklOQVJZ
X09QX1BSRUNFREVOQ0UoNCksCi0gICAgQklUQU5EID0gNCB8IEJJTkFSWV9PUF9QUkVDRURFTkNF
KDUpLAotICAgIEVRRVEgPSA1IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoNiksCi0gICAgTkUgPSA2
IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoNiksCi0gICAgU1RSRVEgPSA3IHwgQklOQVJZX09QX1BS
RUNFREVOQ0UoNiksCi0gICAgU1RSTkVRID0gOCB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAot
ICAgIExUID0gOSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAotICAgIEdUID0gMTAgfCBCSU5B
UllfT1BfUFJFQ0VERU5DRSg3KSwKLSAgICBMRSA9IDExIHwgQklOQVJZX09QX1BSRUNFREVOQ0Uo
NyksCi0gICAgR0UgPSAxMiB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAotICAgIElOU1RBTkNF
T0YgPSAxMyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpIHwgS2V5d29yZFRva2VuRmxhZywKLSAg
ICBJTlRPS0VOID0gMTQgfCBJTl9PUF9QUkVDRURFTkNFKDcpIHwgS2V5d29yZFRva2VuRmxhZywK
LSAgICBMU0hJRlQgPSAxNSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDgpLAotICAgIFJTSElGVCA9
IDE2IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoOCksCi0gICAgVVJTSElGVCA9IDE3IHwgQklOQVJZ
X09QX1BSRUNFREVOQ0UoOCksCi0gICAgUExVUyA9IDE4IHwgQklOQVJZX09QX1BSRUNFREVOQ0Uo
OSkgfCBVbmFyeU9wVG9rZW5GbGFnLAotICAgIE1JTlVTID0gMTkgfCBCSU5BUllfT1BfUFJFQ0VE
RU5DRSg5KSB8IFVuYXJ5T3BUb2tlbkZsYWcsCi0gICAgVElNRVMgPSAyMCB8IEJJTkFSWV9PUF9Q
UkVDRURFTkNFKDEwKSwKLSAgICBESVZJREUgPSAyMSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDEw
KSwKLSAgICBNT0QgPSAyMiB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDEwKQotfTsKLQotdW5pb24g
SlNUb2tlbkRhdGEgewotICAgIGludCBpbnRWYWx1ZTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7Ci19OwotCi1zdHJ1Y3QgSlNUb2tlbkluZm8g
ewotICAgIEpTVG9rZW5JbmZvKCkgOiBsaW5lKDApIHt9Ci0gICAgaW50IGxpbmU7Ci0gICAgaW50
IHN0YXJ0T2Zmc2V0OwotICAgIGludCBlbmRPZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgSlNUb2tlbiB7
Ci0gICAgSlNUb2tlblR5cGUgbV90eXBlOwotICAgIEpTVG9rZW5EYXRhIG1fZGF0YTsKLSAgICBK
U1Rva2VuSW5mbyBtX2luZm87Ci19OwotCi1lbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFy
c2VOb3JtYWwsIEpTUGFyc2VTdHJpY3QgfTsKLWVudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVBy
b2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2RlIH07Ci0KLVVTdHJpbmcganNQYXJzZShKU0ds
b2JhbERhdGEqLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBKU1BhcnNlclN0cmljdG5lc3MsIEpTUGFy
c2VyTW9kZSwgY29uc3QgU291cmNlQ29kZSopOwotfQotI2VuZGlmIC8vIEpTUGFyc2VyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiA5ODczMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMyArMzksMTcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3Bh
Y2UgVW5pY29kZTsKIAotI2luY2x1ZGUgIkpTUGFyc2VyLmgiCiAjaW5jbHVkZSAiS2V5d29yZExv
b2t1cC5oIgotI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIkxleGVyLmx1dC5oIgorI2lu
Y2x1ZGUgIlBhcnNlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorS2V5d29yZHM6OktleXdvcmRz
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgICwgbV9rZXl3b3JkVGFibGUoSlNDOjptYWluVGFibGUpCit7Cit9CiAKIGVudW0gQ2hh
cmFjdGVyVHlwZSB7CiAgICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3aXRjaApAQCAtMjI1LDEz
ICsyMjksMTEgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR5cGVzT2ZBU0NJSQogTGV4
ZXI6OkxleGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmco
ZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fa2V5d29yZFRh
YmxlKEpTQzo6bWFpblRhYmxlKQogewogfQogCiBMZXhlcjo6fkxleGVyKCkKIHsKLSAgICBtX2tl
eXdvcmRUYWJsZS5kZWxldGVUYWJsZSgpOwogfQogICAgIAogVVN0cmluZyBMZXhlcjo6Z2V0SW52
YWxpZENoYXJNZXNzYWdlKCkKQEAgLTI2Nyw5ICsyNjksOSBAQCBBTFdBWVNfSU5MSU5FIGludCBM
ZXhlcjo6Y3VycmVudE9mZnNldCgpCiAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIG1f
Y29kZVN0YXJ0OwogfQogCi12b2lkIExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgUGFyc2VyQXJlbmEmIGFyZW5hKQordm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIFBhcnNlckFyZW5hKiBhcmVuYSkKIHsKLSAgICBtX2FyZW5hID0gJmFy
ZW5hLmlkZW50aWZpZXJBcmVuYSgpOworICAgIG1fYXJlbmEgPSAmYXJlbmEtPmlkZW50aWZpZXJB
cmVuYSgpOwogCiAgICAgbV9saW5lTnVtYmVyID0gc291cmNlLmZpcnN0TGluZSgpOwogICAgIG1f
ZGVsaW1pdGVkID0gZmFsc2U7CkBAIC00OTAsNyArNDkyLDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRp
Zmllcik7CiAgICAgICAgIC8vIEtleXdvcmRzIG11c3Qgbm90IGJlIHJlY29nbml6ZWQgaWYgdGhl
cmUgd2FzIGFuIFx1WFhYWCBpbiB0aGUgaWRlbnRpZmllci4KICAgICAgICAgaWYgKHJlbWFpbmlu
ZyA8IG1heFRva2VuTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5
ID0gbV9rZXl3b3JkVGFibGUuZW50cnkobV9nbG9iYWxEYXRhLCAqaWRlbnQpOworICAgICAgICAg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMtPmdldEtl
eXdvcmQoKmlkZW50KTsKICAgICAgICAgICAgIEFTU0VSVCgocmVtYWluaW5nIDwgbWF4VG9rZW5M
ZW5ndGgpIHx8ICFlbnRyeSk7CiAgICAgICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAg
ICAgIHJldHVybiBJREVOVDsKQEAgLTUwNCwxMSArNTA2LDYgQEAgdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgIHJldHVybiBJREVOVDsKIH0KIAotYm9vbCBMZXhl
cjo6aXNLZXl3b3JkKGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAgIHJldHVybiBtX2tl
eXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsIGlkZW50KTsKLX0KLQogdGVtcGxhdGUgPGJv
b2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlU3Ry
aW5nKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKIHsKICAgICBpbnQg
c3RyaW5nUXVvdGVDaGFyYWN0ZXIgPSBtX2N1cnJlbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogI2lmbmRl
ZiBMZXhlcl9oCiAjZGVmaW5lIExleGVyX2gKIAotI2luY2x1ZGUgIkpTUGFyc2VyLmgiCiAjaW5j
bHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKKyNpbmNsdWRlICJQYXJz
ZXJUb2tlbnMuaCIKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC0zNSwyMDIgKzM1LDIy
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIFJlZ0V4cDsKLQotICAgIGNsYXNz
IExleGVyIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGV4ZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIENoYXJhY3RlciBtYW5pcHVs
YXRpb24gZnVuY3Rpb25zLgotICAgICAgICBzdGF0aWMgYm9vbCBpc1doaXRlU3BhY2UoaW50IGNo
YXJhY3Rlcik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGluZVRlcm1pbmF0b3IoaW50IGNoYXJh
Y3Rlcik7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnZlcnRIZXgoaW50IGMxLCBp
bnQgYzIpOwotICAgICAgICBzdGF0aWMgVUNoYXIgY29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQg
YzIsIGludCBjMywgaW50IGM0KTsKLQotICAgICAgICAvLyBGdW5jdGlvbnMgdG8gc2V0IHVwIHBh
cnNpbmcuCi0gICAgICAgIHZvaWQgc2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyQXJl
bmEmKTsKLSAgICAgICAgdm9pZCBzZXRJc1JlcGFyc2luZygpIHsgbV9pc1JlcGFyc2luZyA9IHRy
dWU7IH0KLSAgICAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBh
cnNpbmc7IH0KLQotICAgICAgICAvLyBGdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIgaXRzZWxmLgot
ICAgICAgICBlbnVtIExleFR5cGUgewotICAgICAgICAgICAgSWdub3JlUmVzZXJ2ZWRXb3JkcyA9
IDEsIAotICAgICAgICAgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCi0gICAgICAgICAgICBEb250
QnVpbGRLZXl3b3JkcyA9IDQKLSAgICAgICAgfTsKLSAgICAgICAgSlNUb2tlblR5cGUgbGV4KEpT
VG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKLSAg
ICAgICAgYm9vbCBuZXh0VG9rZW5Jc0NvbG9uKCk7Ci0gICAgICAgIGludCBsaW5lTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAgICAgIHZvaWQgc2V0TGFzdExpbmVO
dW1iZXIoaW50IGxhc3RMaW5lTnVtYmVyKSB7IG1fbGFzdExpbmVOdW1iZXIgPSBsYXN0TGluZU51
bWJlcjsgfQotICAgICAgICBpbnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RMaW5lTnVtYmVyOyB9Ci0gICAgICAgIGJvb2wgcHJldlRlcm1pbmF0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3Rlcm1pbmF0b3I7IH0KLSAgICAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlKGludCBv
cGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKTsKLSAgICAgICAgYm9vbCBz
Y2FuUmVnRXhwKGNvbnN0IElkZW50aWZpZXIqJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYg
ZmxhZ3MsIFVDaGFyIHBhdHRlcm5QcmVmaXggPSAwKTsKLSAgICAgICAgYm9vbCBza2lwUmVnRXhw
KCk7Ci0KLSAgICAgICAgLy8gRnVuY3Rpb25zIGZvciB1c2UgYWZ0ZXIgcGFyc2luZy4KLSAgICAg
ICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KLSAgICAgICAgVVN0
cmluZyBnZXRFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xleEVycm9yTWVzc2FnZTsg
fQotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIGludCBjdXJyZW50T2Zmc2V0KCkgeyBy
ZXR1cm4gbV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KLSAgICAgICAgdm9pZCBzZXRPZmZzZXQoaW50
IG9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9lcnJvciA9IDA7Ci0gICAgICAgICAg
ICBtX2xleEVycm9yTWVzc2FnZSA9IFVTdHJpbmcoKTsKLSAgICAgICAgICAgIG1fY29kZSA9IG1f
Y29kZVN0YXJ0ICsgb2Zmc2V0OwotICAgICAgICAgICAgbV9idWZmZXI4LnJlc2l6ZSgwKTsKLSAg
ICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwotICAgICAgICAgICAgLy8gRmFzdGVyIHRo
YW4gYW4gaWYtZWxzZSBzZXF1ZW5jZQotICAgICAgICAgICAgbV9jdXJyZW50ID0gLTE7Ci0gICAg
ICAgICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCi0gICAgICAgICAgICAgICAg
bV9jdXJyZW50ID0gKm1fY29kZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHNldExpbmVOdW1i
ZXIoaW50IGxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGluZU51bWJlciA9IGxpbmU7
Ci0gICAgICAgIH0KLQotICAgICAgICBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS0+cHJvdmlkZXIoKTsgfQotICAgICAgICAKLSAgICAgICAg
SlNUb2tlblR5cGUgbGV4RXhwZWN0SWRlbnRpZmllcihKU1Rva2VuRGF0YSosIEpTVG9rZW5JbmZv
KiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7Ci0KLSAgICAgICAgYm9vbCBpc0tleXdvcmQo
Y29uc3QgSWRlbnRpZmllciYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNz
IEpTR2xvYmFsRGF0YTsKLQotICAgICAgICBMZXhlcihKU0dsb2JhbERhdGEqKTsKLSAgICAgICAg
fkxleGVyKCk7Ci0KLSAgICAgICAgdm9pZCByZWNvcmQ4KGludCk7Ci0gICAgICAgIHZvaWQgcmVj
b3JkMTYoaW50KTsKLSAgICAgICAgdm9pZCByZWNvcmQxNihVQ2hhcik7Ci0KLSAgICAgICAgdm9p
ZCBjb3B5Q29kZVdpdGhvdXRCT01zKCk7Ci0KLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNo
aWZ0KCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHBlZWsoaW50IG9mZnNldCk7Ci0gICAg
ICAgIGludCBnZXRVbmljb2RlQ2hhcmFjdGVyKCk7Ci0gICAgICAgIHZvaWQgc2hpZnRMaW5lVGVy
bWluYXRvcigpOwotCi0gICAgICAgIFVTdHJpbmcgZ2V0SW52YWxpZENoYXJNZXNzYWdlKCk7Ci0g
ICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25z
dDsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgY3VycmVudE9mZnNldCgpIGNvbnN0OwotCi0g
ICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogbWFrZUlkZW50aWZpZXIoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwotCi0gICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdDsKLQotICAgICAgICBl
bnVtIFNoaWZ0VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRzQ2hlY2sgfTsKLSAgICAg
ICAgdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgU2hpZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNr
PiB2b2lkIGludGVybmFsU2hpZnQoKTsKLSAgICAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3Jl
YXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUtleXdvcmQoSlNU
b2tlbkRhdGEqKTsKLSAgICAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlmaWVy
cz4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEq
LCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKLSAgICAgICAgdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VTdHJpbmcoSlNUb2tlbkRh
dGEqLCBib29sIHN0cmljdE1vZGUpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFyc2VI
ZXgoZG91YmxlJiByZXR1cm5WYWx1ZSk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwYXJz
ZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cGFyc2VEZWNpbWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwotICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgpOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgcGFyc2VOdW1iZXJBZnRlckV4cG9uZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBwYXJzZU11bHRpbGluZUNvbW1lbnQoKTsKLQotICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkgPSAzMjsKLQotICAgICAg
ICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQgbV9sYXN0TGluZU51bWJlcjsKLQotICAg
ICAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI4OwotICAgICAgICBWZWN0b3I8VUNoYXI+IG1fYnVm
ZmVyMTY7Ci0gICAgICAgIGJvb2wgbV90ZXJtaW5hdG9yOwotICAgICAgICBib29sIG1fZGVsaW1p
dGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxpbWl0ZXIgbGlrZSAiJyIgYW5kICJ9IiBvbiBsYXN0IHJ1
bgotICAgICAgICBpbnQgbV9sYXN0VG9rZW47Ci0KLSAgICAgICAgY29uc3QgU291cmNlQ29kZSog
bV9zb3VyY2U7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NvZGU7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBtX2NvZGVTdGFydDsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY29kZUVuZDsKLSAgICAg
ICAgYm9vbCBtX2lzUmVwYXJzaW5nOwotICAgICAgICBib29sIG1fYXRMaW5lU3RhcnQ7Ci0gICAg
ICAgIGJvb2wgbV9lcnJvcjsKLSAgICAgICAgVVN0cmluZyBtX2xleEVycm9yTWVzc2FnZTsKLQot
ICAgICAgICAvLyBjdXJyZW50IGFuZCBmb2xsb3dpbmcgdW5pY29kZSBjaGFyYWN0ZXJzIChpbnQg
dG8gYWxsb3cgZm9yIC0xIGZvciBlbmQtb2YtZmlsZSBtYXJrZXIpCi0gICAgICAgIGludCBtX2N1
cnJlbnQ7Ci0KLSAgICAgICAgSWRlbnRpZmllckFyZW5hKiBtX2FyZW5hOwotCi0gICAgICAgIEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotCi0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tl
eXdvcmRUYWJsZTsKLSAgICB9OwotCi0gICAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjppc1do
aXRlU3BhY2UoaW50IGNoKQorY2xhc3MgS2V5d29yZHMgeworcHVibGljOgorICAgIGJvb2wgaXNL
ZXl3b3JkKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIGlzQVNDSUkoY2gpID8gKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09IDB4QiB8
fCBjaCA9PSAweEMpIDogKFdURjo6VW5pY29kZTo6aXNTZXBhcmF0b3JTcGFjZShjaCkgfHwgY2gg
PT0gMHhGRUZGKTsKKyAgICAgICAgcmV0dXJuIG1fa2V5d29yZFRhYmxlLmVudHJ5KG1fZ2xvYmFs
RGF0YSwgaWRlbnQpOwogICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6aXNM
aW5lVGVybWluYXRvcihpbnQgY2gpCi0gICAgewotICAgICAgICByZXR1cm4gY2ggPT0gJ1xyJyB8
fCBjaCA9PSAnXG4nIHx8IChjaCAmIH4xKSA9PSAweDIwMjg7Ci0gICAgfQotCi0gICAgaW5saW5l
IHVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpCisgICAgCisg
ICAgY29uc3QgSGFzaEVudHJ5KiBnZXRLZXl3b3JkKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICh0b0FTQ0lJSGV4VmFsdWUoYzEpIDw8IDQpIHwg
dG9BU0NJSUhleFZhbHVlKGMyKTsKKyAgICAgICAgcmV0dXJuIG1fa2V5d29yZFRhYmxlLmVudHJ5
KG1fZ2xvYmFsRGF0YSwgaWRlbnQpOwogICAgIH0KLQotICAgIGlubGluZSBVQ2hhciBMZXhlcjo6
Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQorICAgIAorcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIAorICAgIEtleXdvcmRz
KEpTR2xvYmFsRGF0YSopOworICAgIAorICAgIH5LZXl3b3JkcygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKGNvbnZlcnRIZXgoYzEsIGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKKyAg
ICAgICAgbV9rZXl3b3JkVGFibGUuZGVsZXRlVGFibGUoKTsKICAgICB9CiAgICAgCi0gICAgQUxX
QVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CisgICAgY29uc3QgSGFzaFRhYmxlIG1fa2V5d29yZFRhYmxlOworfTsKKworY2xh
c3MgUmVnRXhwOworCitjbGFzcyBMZXhlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGV4
ZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgTGV4ZXIo
SlNHbG9iYWxEYXRhKik7CisgICAgfkxleGVyKCk7CisKKyAgICAvLyBDaGFyYWN0ZXIgbWFuaXB1
bGF0aW9uIGZ1bmN0aW9ucy4KKyAgICBzdGF0aWMgYm9vbCBpc1doaXRlU3BhY2UoaW50IGNoYXJh
Y3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNMaW5lVGVybWluYXRvcihpbnQgY2hhcmFjdGVyKTsK
KyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKTsKKyAg
ICBzdGF0aWMgVUNoYXIgY29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50
IGM0KTsKKworICAgIC8vIEZ1bmN0aW9ucyB0byBzZXQgdXAgcGFyc2luZy4KKyAgICB2b2lkIHNl
dENvZGUoY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckFyZW5hKik7CisgICAgdm9pZCBzZXRJc1Jl
cGFyc2luZygpIHsgbV9pc1JlcGFyc2luZyA9IHRydWU7IH0KKyAgICBib29sIGlzUmVwYXJzaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGFyc2luZzsgfQorCisgICAgLy8gRnVuY3Rpb25zIGZv
ciB0aGUgcGFyc2VyIGl0c2VsZi4KKyAgICBlbnVtIExleFR5cGUgeworICAgICAgICBJZ25vcmVS
ZXNlcnZlZFdvcmRzID0gMSwgCisgICAgICAgIERvbnRCdWlsZFN0cmluZ3MgPSAyLAorICAgICAg
ICBEb250QnVpbGRLZXl3b3JkcyA9IDQKKyAgICB9OworICAgIEpTVG9rZW5UeXBlIGxleChKU1Rv
a2VuRGF0YSosIEpTVG9rZW5JbmZvKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisgICAg
Ym9vbCBuZXh0VG9rZW5Jc0NvbG9uKCk7CisgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBsYXN0
TGluZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KKyAgICBp
bnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lTnVtYmVyOyB9Cisg
ICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYXRvcjsgfQor
ICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwg
aW50IGZpcnN0TGluZSk7CisgICAgYm9vbCBzY2FuUmVnRXhwKGNvbnN0IElkZW50aWZpZXIqJiBw
YXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBhdHRlcm5QcmVmaXggPSAw
KTsKKyAgICBib29sIHNraXBSZWdFeHAoKTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgdXNlIGFm
dGVyIHBhcnNpbmcuCisgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7
IH0KKyAgICBVU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGV4RXJy
b3JNZXNzYWdlOyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIGludCBjdXJyZW50T2Zmc2V0KCkg
eyByZXR1cm4gbV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICB2b2lkIHNldE9mZnNldChpbnQg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9lcnJvciA9IDA7CisgICAgICAgIG1fbGV4RXJyb3JN
ZXNzYWdlID0gVVN0cmluZygpOworICAgICAgICBtX2NvZGUgPSBtX2NvZGVTdGFydCArIG9mZnNl
dDsKKyAgICAgICAgbV9idWZmZXI4LnJlc2l6ZSgwKTsKKyAgICAgICAgbV9idWZmZXIxNi5yZXNp
emUoMCk7CisgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKKyAgICAg
ICAgbV9jdXJyZW50ID0gLTE7CisgICAgICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9jb2RlRW5k
KSkKKyAgICAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CisgICAgfQorICAgIHZvaWQgc2V0
TGluZU51bWJlcihpbnQgbGluZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9hcmVuYS0+bWFr
ZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBt
X2xpbmVOdW1iZXIgPSBsaW5lOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI6OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNU
b2tlbkluZm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKChsZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwot
ICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX2NvZGU7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSBzdGFydDsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IG1fY29kZUVuZDsKLSAg
ICAgICAgaWYgKHB0ciA+PSBlbmQpIHsKLSAgICAgICAgICAgIEFTU0VSVChwdHIgPT0gZW5kKTsK
LSAgICAgICAgICAgIGdvdG8gc2xvd0Nhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFXVEY6
OmlzQVNDSUlBbHBoYSgqcHRyKSkKLSAgICAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CisgICAgU291
cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPnBy
b3ZpZGVyKCk7IH0KKyAgICAKKyAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpT
VG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworCisgICAgdm9pZCByZWNv
cmQ4KGludCk7CisgICAgdm9pZCByZWNvcmQxNihpbnQpOworICAgIHZvaWQgcmVjb3JkMTYoVUNo
YXIpOworCisgICAgdm9pZCBjb3B5Q29kZVdpdGhvdXRCT01zKCk7CisKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2hpZnQoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBwZWVrKGludCBvZmZzZXQp
OworICAgIGludCBnZXRVbmljb2RlQ2hhcmFjdGVyKCk7CisgICAgdm9pZCBzaGlmdExpbmVUZXJt
aW5hdG9yKCk7CisKKyAgICBVU3RyaW5nIGdldEludmFsaWRDaGFyTWVzc2FnZSgpOworICAgIEFM
V0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdDsKKyAgICBB
TFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3Q7CisKKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKTsKKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBsYXN0VG9rZW5X
YXNSZXN0cktleXdvcmQoKSBjb25zdDsKKworICAgIGVudW0gU2hpZnRUeXBlIHsgRG9Cb3VuZHND
aGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OworICAgIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQs
IFNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVjaz4gdm9pZCBpbnRlcm5hbFNoaWZ0KCk7CisgICAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rv
a2VuVHlwZSBwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRCdWlsZElkZW50aWZpZXJzPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIHBhcnNlSWRl
bnRpZmllcihKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIHRl
bXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIHBhcnNl
U3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RNb2RlKTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSBi
b29sIHBhcnNlT2N0YWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSBi
b29sIHBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVyblZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgpOworICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBwYXJzZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3IoKTsKKyAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgcGFyc2VNdWx0aWxpbmVDb21tZW50KCk7CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkgPSAzMjsKKworICAgIGludCBtX2xpbmVOdW1i
ZXI7CisgICAgaW50IG1fbGFzdExpbmVOdW1iZXI7CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZm
ZXI4OworICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXIxNjsKKyAgICBib29sIG1fdGVybWluYXRv
cjsKKyAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxpbWl0ZXIgbGlrZSAi
JyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgorICAgIGludCBtX2xhc3RUb2tlbjsKKworICAgIGNvbnN0
IFNvdXJjZUNvZGUqIG1fc291cmNlOworICAgIGNvbnN0IFVDaGFyKiBtX2NvZGU7CisgICAgY29u
c3QgVUNoYXIqIG1fY29kZVN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBtX2NvZGVFbmQ7CisgICAg
Ym9vbCBtX2lzUmVwYXJzaW5nOworICAgIGJvb2wgbV9hdExpbmVTdGFydDsKKyAgICBib29sIG1f
ZXJyb3I7CisgICAgVVN0cmluZyBtX2xleEVycm9yTWVzc2FnZTsKKworICAgIC8vIGN1cnJlbnQg
YW5kIGZvbGxvd2luZyB1bmljb2RlIGNoYXJhY3RlcnMgKGludCB0byBhbGxvdyBmb3IgLTEgZm9y
IGVuZC1vZi1maWxlIG1hcmtlcikKKyAgICBpbnQgbV9jdXJyZW50OworCisgICAgSWRlbnRpZmll
ckFyZW5hKiBtX2FyZW5hOworCisgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Cit9Owor
CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZShpbnQgY2gpCit7CisgICAg
cmV0dXJuIGlzQVNDSUkoY2gpID8gKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09IDB4
QiB8fCBjaCA9PSAweEMpIDogKFdURjo6VW5pY29kZTo6aXNTZXBhcmF0b3JTcGFjZShjaCkgfHwg
Y2ggPT0gMHhGRUZGKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIExleGVyOjppc0xpbmVUZXJt
aW5hdG9yKGludCBjaCkKK3sKKyAgICByZXR1cm4gY2ggPT0gJ1xyJyB8fCBjaCA9PSAnXG4nIHx8
IChjaCAmIH4xKSA9PSAweDIwMjg7Cit9CisKK2lubGluZSB1bnNpZ25lZCBjaGFyIExleGVyOjpj
b252ZXJ0SGV4KGludCBjMSwgaW50IGMyKQoreworICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVl
KGMxKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7Cit9CisKK2lubGluZSBVQ2hhciBMZXhl
cjo6Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQoreworICAg
IHJldHVybiAoY29udmVydEhleChjMSwgYzIpIDw8IDgpIHwgY29udmVydEhleChjMywgYzQpOwor
fQorCitBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyOjptYWtlSWRlbnRpZmll
cihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
Jm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3Ro
KTsKK30KKworQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6bGV4RXhwZWN0SWRlbnRp
ZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNp
Z25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit7CisgICAgQVNTRVJUKChsZXhUeXBlICYg
SWdub3JlUmVzZXJ2ZWRXb3JkcykpOworICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1fY29kZTsK
KyAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IG1f
Y29kZUVuZDsKKyAgICBpZiAocHRyID49IGVuZCkgeworICAgICAgICBBU1NFUlQocHRyID09IGVu
ZCk7CisgICAgICAgIGdvdG8gc2xvd0Nhc2U7CisgICAgfQorICAgIGlmICghV1RGOjppc0FTQ0lJ
QWxwaGEoKnB0cikpCisgICAgICAgIGdvdG8gc2xvd0Nhc2U7CisgICAgKytwdHI7CisgICAgd2hp
bGUgKHB0ciA8IGVuZCkgeworICAgICAgICBpZiAoIVdURjo6aXNBU0NJSUFscGhhbnVtZXJpYygq
cHRyKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3B0cjsKLSAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFXVEY6OmlzQVNDSUlBbHBoYW51bWVyaWMo
KnB0cikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK3B0cjsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEhlcmUncyB0aGUgc2hpZnQKLSAgICAgICAgaWYgKHB0ciA8IGVu
ZCkgewotICAgICAgICAgICAgaWYgKCghV1RGOjppc0FTQ0lJKCpwdHIpKSB8fCAoKnB0ciA9PSAn
XFwnKSB8fCAoKnB0ciA9PSAnXycpIHx8ICgqcHRyID09ICckJykpCi0gICAgICAgICAgICAgICAg
Z290byBzbG93Q2FzZTsKLSAgICAgICAgICAgIG1fY3VycmVudCA9ICpwdHI7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50ID0gLTE7Ci0KLSAgICAgICAgbV9jb2RlID0gcHRy
OwotCi0gICAgICAgIC8vIENyZWF0ZSB0aGUgaWRlbnRpZmllciBpZiBuZWVkZWQKLSAgICAgICAg
aWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKLSAgICAgICAgICAgIHRva2VuRGF0YS0+
aWRlbnQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0g
bWFrZUlkZW50aWZpZXIoc3RhcnQsIHB0ciAtIHN0YXJ0KTsKLSAgICAgICAgdG9rZW5JbmZvLT5s
aW5lID0gbV9saW5lTnVtYmVyOwotICAgICAgICB0b2tlbkluZm8tPnN0YXJ0T2Zmc2V0ID0gc3Rh
cnQgLSBtX2NvZGVTdGFydDsKLSAgICAgICAgdG9rZW5JbmZvLT5lbmRPZmZzZXQgPSBjdXJyZW50
T2Zmc2V0KCk7Ci0gICAgICAgIG1fbGFzdFRva2VuID0gSURFTlQ7Ci0gICAgICAgIHJldHVybiBJ
REVOVDsKLSAgICAgICAgCi0gICAgc2xvd0Nhc2U6Ci0gICAgICAgIHJldHVybiBsZXgodG9rZW5E
YXRhLCB0b2tlbkluZm8sIGxleFR5cGUsIHN0cmljdE1vZGUpOwogICAgIH0KIAorICAgIC8vIEhl
cmUncyB0aGUgc2hpZnQKKyAgICBpZiAocHRyIDwgZW5kKSB7CisgICAgICAgIGlmICgoIVdURjo6
aXNBU0NJSSgqcHRyKSkgfHwgKCpwdHIgPT0gJ1xcJykgfHwgKCpwdHIgPT0gJ18nKSB8fCAoKnB0
ciA9PSAnJCcpKQorICAgICAgICAgICAgZ290byBzbG93Q2FzZTsKKyAgICAgICAgbV9jdXJyZW50
ID0gKnB0cjsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50ID0gLTE7CisKKyAgICBtX2Nv
ZGUgPSBwdHI7CisKKyAgICAvLyBDcmVhdGUgdGhlIGlkZW50aWZpZXIgaWYgbmVlZGVkCisgICAg
aWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVu
dCA9IDA7CisgICAgZWxzZQorICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gbWFrZUlkZW50aWZp
ZXIoc3RhcnQsIHB0ciAtIHN0YXJ0KTsKKyAgICB0b2tlbkluZm8tPmxpbmUgPSBtX2xpbmVOdW1i
ZXI7CisgICAgdG9rZW5JbmZvLT5zdGFydE9mZnNldCA9IHN0YXJ0IC0gbV9jb2RlU3RhcnQ7Cisg
ICAgdG9rZW5JbmZvLT5lbmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgbV9sYXN0VG9r
ZW4gPSBJREVOVDsKKyAgICByZXR1cm4gSURFTlQ7CisgICAgCitzbG93Q2FzZToKKyAgICByZXR1
cm4gbGV4KHRva2VuRGF0YSwgdG9rZW5JbmZvLCBsZXhUeXBlLCBzdHJpY3RNb2RlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBMZXhlcl9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gOTg3
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksODYgKzI5LDg2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRnJlZWFibGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPnBhcnNlci0+YXJlbmEoKS5hbGxvY2F0ZUZyZWVhYmxlKHNpemUpOworICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRnJlZWFibGUoc2l6ZSk7CiAg
ICAgfQogCiAgICAgaW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBu
ZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5wYXJzZXItPmFyZW5hKCkuYWxsb2NhdGVEZWxldGFibGUoc2l6
ZSk7CisgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+YWxsb2NhdGVEZWxl
dGFibGUoc2l6ZSk7CiAgICAgfQogCiAgICAgaW5saW5lIFBhcnNlckFyZW5hUmVmQ291bnRlZDo6
UGFyc2VyQXJlbmFSZWZDb3VudGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICB7Ci0g
ICAgICAgIGdsb2JhbERhdGEtPnBhcnNlci0+YXJlbmEoKS5kZXJlZldpdGhBcmVuYShhZG9wdFJl
Zih0aGlzKSk7CisgICAgICAgIGdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5kZXJlZldpdGhBcmVu
YShhZG9wdFJlZih0aGlzKSk7CiAgICAgfQogCi0gICAgaW5saW5lIE5vZGU6Ok5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IG1fbGluZShnbG9iYWxEYXRhLT5sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSkKKyAgICBpbmxpbmUgTm9kZTo6Tm9kZShpbnQgbGluZU51bWJlcikK
KyAgICAgICAgOiBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIEV4cHJlc3Npb25Ob2RlOjpFeHByZXNzaW9uTm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFJlc3VsdFR5cGUgcmVzdWx0VHlwZSkKLSAgICAgICAgOiBOb2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIEV4cHJlc3Npb25Ob2RlOjpFeHByZXNzaW9uTm9kZShpbnQgbGluZU51bWJl
ciwgUmVzdWx0VHlwZSByZXN1bHRUeXBlKQorICAgICAgICA6IE5vZGUobGluZU51bWJlcikKICAg
ICAgICAgLCBtX3Jlc3VsdFR5cGUocmVzdWx0VHlwZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIFN0YXRlbWVudE5vZGU6OlN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQotICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgU3RhdGVtZW50Tm9kZTo6
U3RhdGVtZW50Tm9kZShpbnQgbGluZU51bWJlcikKKyAgICAgICAgOiBOb2RlKGxpbmVOdW1iZXIp
CiAgICAgICAgICwgbV9sYXN0TGluZSgtMSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIE51
bGxOb2RlOjpOdWxsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVsbFR5cGUoKSkKKyAgICBpbmxp
bmUgTnVsbE5vZGU6Ok51bGxOb2RlKGludCBsaW5lTnVtYmVyKQorICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bGxUeXBlKCkpCiAgICAgewogICAgIH0K
IAotICAgIGlubGluZSBCb29sZWFuTm9kZTo6Qm9vbGVhbk5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBib29sIHZhbHVlKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEs
IFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCkpCisgICAgaW5saW5lIEJvb2xlYW5Ob2RlOjpCb29s
ZWFuTm9kZShpbnQgbGluZU51bWJlciwgYm9vbCB2YWx1ZSkKKyAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpKQogICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBOdW1iZXJOb2RlOjpOdW1i
ZXJOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQotICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6Om51bWJlclR5cGUoKSkKKyAg
ICBpbmxpbmUgTnVtYmVyTm9kZTo6TnVtYmVyTm9kZShpbnQgbGluZU51bWJlciwgZG91YmxlIHZh
bHVlKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51
bWJlclR5cGUoKSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgU3RyaW5nTm9kZTo6U3RyaW5nTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IElkZW50aWZpZXImIHZhbHVlKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2Jh
bERhdGEsIFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSkKKyAgICBpbmxpbmUgU3RyaW5nTm9kZTo6
U3RyaW5nTm9kZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgdmFsdWUpCisgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgp
KQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBS
ZWdFeHBOb2RlOjpSZWdFeHBOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRl
bnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MpCi0gICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUmVnRXhwTm9kZTo6UmVnRXhwTm9k
ZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRp
ZmllciYgZmxhZ3MpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgVGhpc05vZGU6OlRoaXNOb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBUaGlzTm9kZTo6VGhpc05vZGUoaW50IGxpbmVOdW1iZXIpCisgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUobGluZU51bWJlcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFJlc29sdmVOb2Rl
OjpSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBpbnQgc3RhcnRPZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFs
RGF0YSkKKyAgICBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGludCBsaW5lTnVtYmVy
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHN0YXJ0T2Zmc2V0KQorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAg
ICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgRWxlbWVudE5vZGU6OkVsZW1lbnROb2RlKEpTR2xvYmFsRGF0YSosIGludCBlbGlzaW9uLCBF
eHByZXNzaW9uTm9kZSogbm9kZSkKKyAgICBpbmxpbmUgRWxlbWVudE5vZGU6OkVsZW1lbnROb2Rl
KGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9kZSkKICAgICAgICAgOiBtX25leHQoMCkK
ICAgICAgICAgLCBtX2VsaXNpb24oZWxpc2lvbikKICAgICAgICAgLCBtX25vZGUobm9kZSkKICAg
ICB7CiAgICAgfQogCi0gICAgaW5saW5lIEVsZW1lbnROb2RlOjpFbGVtZW50Tm9kZShKU0dsb2Jh
bERhdGEqLCBFbGVtZW50Tm9kZSogbCwgaW50IGVsaXNpb24sIEV4cHJlc3Npb25Ob2RlKiBub2Rl
KQorICAgIGlubGluZSBFbGVtZW50Tm9kZTo6RWxlbWVudE5vZGUoRWxlbWVudE5vZGUqIGwsIGlu
dCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9kZSkKICAgICAgICAgOiBtX25leHQoMCkKICAg
ICAgICAgLCBtX2VsaXNpb24oZWxpc2lvbikKICAgICAgICAgLCBtX25vZGUobm9kZSkKQEAgLTEx
NiwyNCArMTE2LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBsLT5tX25leHQgPSB0aGlz
OwogICAgIH0KIAotICAgIGlubGluZSBBcnJheU5vZGU6OkFycmF5Tm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGludCBlbGlzaW9uKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2Jh
bERhdGEpCisgICAgaW5saW5lIEFycmF5Tm9kZTo6QXJyYXlOb2RlKGludCBsaW5lTnVtYmVyLCBp
bnQgZWxpc2lvbikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAg
ICAsIG1fZWxlbWVudCgwKQogICAgICAgICAsIG1fZWxpc2lvbihlbGlzaW9uKQogICAgICAgICAs
IG1fb3B0aW9uYWwodHJ1ZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFycmF5Tm9kZTo6
QXJyYXlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRWxlbWVudE5vZGUqIGVsZW1lbnQp
Ci0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQXJyYXlO
b2RlOjpBcnJheU5vZGUoaW50IGxpbmVOdW1iZXIsIEVsZW1lbnROb2RlKiBlbGVtZW50KQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9lbGVtZW50KGVs
ZW1lbnQpCiAgICAgICAgICwgbV9lbGlzaW9uKDApCiAgICAgICAgICwgbV9vcHRpb25hbChmYWxz
ZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFycmF5Tm9kZTo6QXJyYXlOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGVsaXNpb24sIEVsZW1lbnROb2RlKiBlbGVtZW50KQot
ICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEFycmF5Tm9k
ZTo6QXJyYXlOb2RlKGludCBsaW5lTnVtYmVyLCBpbnQgZWxpc2lvbiwgRWxlbWVudE5vZGUqIGVs
ZW1lbnQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBt
X2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBtX2VsaXNpb24oZWxpc2lvbikKICAgICAgICAg
LCBtX29wdGlvbmFsKHRydWUpCkBAIC0xNDgsMTE4ICsxNDgsMTE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIH0KIAogICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBU
eXBlIHR5cGUpCi0gICAgICAgIDogbV9uYW1lKGdsb2JhbERhdGEtPnBhcnNlci0+YXJlbmEoKS5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSkp
CisgICAgICAgIDogbV9uYW1lKGdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSkpCiAgICAgICAgICwg
bV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgIHsKICAgICB9CiAK
LSAgICBpbmxpbmUgUHJvcGVydHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFByb3BlcnR5Tm9kZSogbm9kZSkKLSAgICAgICAgOiBOb2RlKGdsb2Jh
bERhdGEpCisgICAgaW5saW5lIFByb3BlcnR5TGlzdE5vZGU6OlByb3BlcnR5TGlzdE5vZGUoaW50
IGxpbmVOdW1iZXIsIFByb3BlcnR5Tm9kZSogbm9kZSkKKyAgICAgICAgOiBOb2RlKGxpbmVOdW1i
ZXIpCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBQcm9wZXJ0eUxpc3ROb2RlOjpQcm9wZXJ0eUxpc3ROb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUHJvcGVydHlOb2RlKiBub2RlLCBQcm9wZXJ0eUxpc3RO
b2RlKiBsaXN0KQotICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUHJvcGVy
dHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZShpbnQgbGluZU51bWJlciwgUHJvcGVydHlOb2Rl
KiBub2RlLCBQcm9wZXJ0eUxpc3ROb2RlKiBsaXN0KQorICAgICAgICA6IE5vZGUobGluZU51bWJl
cikKICAgICAgICAgLCBtX25vZGUobm9kZSkKICAgICAgICAgLCBtX25leHQoMCkKICAgICB7CiAg
ICAgICAgIGxpc3QtPm1fbmV4dCA9IHRoaXM7CiAgICAgfQogCi0gICAgaW5saW5lIE9iamVjdExp
dGVyYWxOb2RlOjpPYmplY3RMaXRlcmFsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0g
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgT2JqZWN0TGl0
ZXJhbE5vZGU6Ok9iamVjdExpdGVyYWxOb2RlKGludCBsaW5lTnVtYmVyKQorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9saXN0KDApCiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBPYmplY3RMaXRlcmFsTm9kZTo6T2JqZWN0TGl0ZXJhbE5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQcm9wZXJ0eUxpc3ROb2RlKiBsaXN0KQotICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIE9iamVjdExpdGVyYWxOb2Rl
OjpPYmplY3RMaXRlcmFsTm9kZShpbnQgbGluZU51bWJlciwgUHJvcGVydHlMaXN0Tm9kZSogbGlz
dCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fbGlz
dChsaXN0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQnJhY2tldEFjY2Vzc29yTm9kZTo6
QnJhY2tldEFjY2Vzc29yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBib29sIHN1YnNjcmlwdEhhc0Fz
c2lnbm1lbnRzKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5s
aW5lIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OkJyYWNrZXRBY2Nlc3Nvck5vZGUoaW50IGxpbmVOdW1i
ZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBib29s
IHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVO
dW1iZXIpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9zdWJzY3JpcHQoc3Vi
c2NyaXB0KQogICAgICAgICAsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMoc3Vic2NyaXB0SGFz
QXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBEb3RBY2Nlc3Nvck5vZGU6
OkRvdEFjY2Vzc29yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBEb3RBY2Nlc3Nvck5vZGU6OkRvdEFjY2Vzc29yTm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwg
bV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIEFyZ3VtZW50TGlzdE5vZGU6OkFyZ3VtZW50TGlzdE5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcikKLSAgICAgICAgOiBOb2RlKGdsb2Jh
bERhdGEpCisgICAgaW5saW5lIEFyZ3VtZW50TGlzdE5vZGU6OkFyZ3VtZW50TGlzdE5vZGUoaW50
IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IE5vZGUobGluZU51
bWJlcikKICAgICAgICAgLCBtX25leHQoMCkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIEFyZ3VtZW50TGlzdE5vZGU6OkFyZ3VtZW50TGlzdE5vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9kZSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBBcmd1bWVudExpc3ROb2RlOjpBcmd1bWVudExpc3ROb2RlKGludCBsaW5lTnVtYmVyLCBBcmd1
bWVudExpc3ROb2RlKiBsaXN0Tm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDog
Tm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fbmV4dCgwKQogICAgICAgICAsIG1fZXhwcihl
eHByKQogICAgIHsKICAgICAgICAgbGlzdE5vZGUtPm1fbmV4dCA9IHRoaXM7CiAgICAgfQogCi0g
ICAgaW5saW5lIEFyZ3VtZW50c05vZGU6OkFyZ3VtZW50c05vZGUoSlNHbG9iYWxEYXRhKikKKyAg
ICBpbmxpbmUgQXJndW1lbnRzTm9kZTo6QXJndW1lbnRzTm9kZSgpCiAgICAgICAgIDogbV9saXN0
Tm9kZSgwKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXJndW1lbnRzTm9kZTo6QXJndW1l
bnRzTm9kZShKU0dsb2JhbERhdGEqLCBBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9kZSkKKyAgICBp
bmxpbmUgQXJndW1lbnRzTm9kZTo6QXJndW1lbnRzTm9kZShBcmd1bWVudExpc3ROb2RlKiBsaXN0
Tm9kZSkKICAgICAgICAgOiBtX2xpc3ROb2RlKGxpc3ROb2RlKQogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgTmV3RXhwck5vZGU6Ok5ld0V4cHJOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFs
RGF0YSkKKyAgICBpbmxpbmUgTmV3RXhwck5vZGU6Ok5ld0V4cHJOb2RlKGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVt
YmVyKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncygwKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgTmV3RXhwck5vZGU6Ok5ld0V4cHJOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3Mp
Ci0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgTmV3RXhw
ck5vZGU6Ok5ld0V4cHJOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwg
QXJndW1lbnRzTm9kZSogYXJncykKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVy
KQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNh
bGxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQXJndW1lbnRzTm9kZSogYXJncywgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0g
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgRXZhbEZ1bmN0
aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNhbGxOb2RlKGludCBsaW5lTnVtYmVyLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAg
ICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
Ci0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgRnVuY3Rp
b25DYWxsVmFsdWVOb2RlOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
KGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fZXhwcihleHByKQog
ICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3Ms
IHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShpbnQgbGluZU51bWJl
ciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVz
c2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9pZGVu
dChpZGVudCkKICAgICAgICAgLCBtX2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6RnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZVN1YkV4
cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKQEAgLTI2Nyw4ICsy
NjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0
aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisg
ICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoaW50IGxp
bmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
QXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJl
cikKICAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50
KGlkZW50KQpAQCAtMjc2LDMxICsyNzYsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6
IEZ1bmN0aW9uQ2FsbERvdE5vZGUoZ2xvYmFsRGF0YSwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQorICAgIGlubGluZSBDYWxsRnVuY3Rpb25DYWxsRG90
Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
CisgICAgICAgIDogRnVuY3Rpb25DYWxsRG90Tm9kZShsaW5lTnVtYmVyLCBiYXNlLCBpZGVudCwg
YXJncywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgewogICAgIH0KIAotICAg
IGlubGluZSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogRnVuY3Rp
b25DYWxsRG90Tm9kZShnbG9iYWxEYXRhLCBiYXNlLCBpZGVudCwgYXJncywgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpCisgICAgaW5saW5lIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSog
YmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAg
ICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobGluZU51bWJlciwgYmFzZSwgaWRlbnQsIGFyZ3Ms
IGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgUHJlUG9zdFJlc29sdmVOb2RlOjpQcmVQb3N0UmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lv
bk5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVtYmVyVHlwZSgpKSAvLyBjb3VsZCBiZSBy
ZXVzYWJsZSBmb3IgcHJlPworICAgIGlubGluZSBQcmVQb3N0UmVzb2x2ZU5vZGU6OlByZVBvc3RS
ZXNvbHZlTm9kZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bWJlclR5cGUo
KSkgLy8gY291bGQgYmUgcmV1c2FibGUgZm9yIHByZT8KICAgICAgICAgLCBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2lk
ZW50KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUG9zdGZpeFJlc29sdmVOb2Rl
OjpQb3N0Zml4UmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogUHJlUG9zdFJlc29sdmVO
b2RlKGdsb2JhbERhdGEsIGlkZW50LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAg
ICBpbmxpbmUgUG9zdGZpeFJlc29sdmVOb2RlOjpQb3N0Zml4UmVzb2x2ZU5vZGUoaW50IGxpbmVO
dW1iZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAg
OiBQcmVQb3N0UmVzb2x2ZU5vZGUobGluZU51bWJlciwgaWRlbnQsIGRpdm90LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CiAgICAgfQog
Ci0gICAgaW5saW5lIFBvc3RmaXhCcmFja2V0Tm9kZTo6UG9zdGZpeEJyYWNrZXROb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2Rl
KiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGds
b2JhbERhdGEpCisgICAgaW5saW5lIFBvc3RmaXhCcmFja2V0Tm9kZTo6UG9zdGZpeEJyYWNrZXRO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGlu
ZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBt
X3N1YnNjcmlwdChzdWJzY3JpcHQpCkBAIC0zMDgsOCArMzA4LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQb3N0Zml4RG90Tm9kZTo6UG9zdGZpeERvdE5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFBvc3RmaXhEb3ROb2RlOjpQb3N0Zml4RG90Tm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVt
YmVyKQogICAgICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRl
bnQoaWRlbnQpCkBAIC0zMTcsNjkgKzMxNyw2OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhFcnJvck5vZGU6OlBvc3RmaXhFcnJvck5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3Bl
ciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUG9z
dGZpeEVycm9yTm9kZTo6UG9zdGZpeEVycm9yTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxp
bmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwg
bV9vcGVyYXRvcihvcGVyKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlUmVzb2x2
ZU5vZGU6OkRlbGV0ZVJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShpbnQgbGlu
ZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNz
aW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRh
KQorICAgIGlubGluZSBEZWxldGVCcmFja2V0Tm9kZTo6RGVsZXRlQnJhY2tldE5vZGUoaW50IGxp
bmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAg
ICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5s
aW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAg
ICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRl
VmFsdWVOb2RlOjpEZWxldGVWYWx1ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcikKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQor
ICAgIGlubGluZSBEZWxldGVWYWx1ZU5vZGU6OkRlbGV0ZVZhbHVlTm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51
bWJlcikKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IFZvaWROb2RlOjpWb2lkTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25O
b2RlKiBleHByKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5s
aW5lIFZvaWROb2RlOjpWb2lkTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2V4
cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFR5cGVPZlJlc29sdmVOb2RlOjpU
eXBlT2ZSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5
cGU6OnN0cmluZ1R5cGUoKSkKKyAgICBpbmxpbmUgVHlwZU9mUmVzb2x2ZU5vZGU6OlR5cGVPZlJl
c29sdmVOb2RlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpzdHJpbmdUeXBlKCkp
CiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFR5
cGVPZlZhbHVlTm9kZTo6VHlwZU9mVmFsdWVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0
YSwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKQorICAgIGlubGluZSBUeXBlT2ZWYWx1ZU5vZGU6
OlR5cGVPZlZhbHVlTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6c3RyaW5nVHlw
ZSgpKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
UHJlZml4UmVzb2x2ZU5vZGU6OlByZWZpeFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6
IFByZVBvc3RSZXNvbHZlTm9kZShnbG9iYWxEYXRhLCBpZGVudCwgZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpCisgICAgaW5saW5lIFByZWZpeFJlc29sdmVOb2RlOjpQcmVmaXhSZXNvbHZl
Tm9kZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9w
ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0KQorICAgICAgICA6IFByZVBvc3RSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCBpZGVudCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJlZml4QnJhY2tldE5vZGU6OlByZWZpeEJyYWNr
ZXROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFByZWZpeEJyYWNrZXROb2RlOjpQcmVm
aXhCcmFja2V0Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNz
aW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2Uo
YmFzZSkKICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCkBAIC0zODcsOCArMzg3LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQcmVmaXhEb3RO
b2RlOjpQcmVmaXhEb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5v
ZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBQcmVmaXhEb3ROb2Rl
OjpQcmVmaXhEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNz
aW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2Uo
YmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQpAQCAtMzk2LDQzICszOTYsNDMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQcmVmaXhFcnJvck5vZGU6
OlByZWZpeEVycm9yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxE
YXRhKQorICAgIGlubGluZSBQcmVmaXhFcnJvck5vZGU6OlByZWZpeEVycm9yTm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9leHByKGV4
cHIpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgVW5hcnlPcE5vZGU6OlVuYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVz
dWx0VHlwZSB0eXBlLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3Bjb2RlSUQgb3Bjb2RlSUQpCi0g
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSwgdHlwZSkKKyAgICBpbmxpbmUgVW5h
cnlPcE5vZGU6OlVuYXJ5T3BOb2RlKGludCBsaW5lTnVtYmVyLCBSZXN1bHRUeXBlIHR5cGUsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBPcGNvZGVJRCBvcGNvZGVJRCkKKyAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsaW5lTnVtYmVyLCB0eXBlKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAg
ICAsIG1fb3Bjb2RlSUQob3Bjb2RlSUQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBVbmFy
eVBsdXNOb2RlOjpVbmFyeVBsdXNOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogVW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0
VHlwZTo6bnVtYmVyVHlwZSgpLCBleHByLCBvcF90b19qc251bWJlcikKKyAgICBpbmxpbmUgVW5h
cnlQbHVzTm9kZTo6VW5hcnlQbHVzTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIpCisgICAgICAgIDogVW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6bnVt
YmVyVHlwZSgpLCBleHByLCBvcF90b19qc251bWJlcikKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIE5lZ2F0ZU5vZGU6Ok5lZ2F0ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcikKLSAgICAgICAgOiBVbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1
bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2UoKSwgZXhwciwgb3BfbmVnYXRlKQorICAgIGlubGlu
ZSBOZWdhdGVOb2RlOjpOZWdhdGVOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSog
ZXhwcikKKyAgICAgICAgOiBVbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpudW1i
ZXJUeXBlQ2FuUmV1c2UoKSwgZXhwciwgb3BfbmVnYXRlKQogICAgIHsKICAgICB9CiAKLSAgICBp
bmxpbmUgQml0d2lzZU5vdE5vZGU6OkJpdHdpc2VOb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogVW5hcnlPcE5vZGUoZ2xvYmFs
RGF0YSwgUmVzdWx0VHlwZTo6Zm9yQml0T3AoKSwgZXhwciwgb3BfYml0bm90KQorICAgIGlubGlu
ZSBCaXR3aXNlTm90Tm9kZTo6Qml0d2lzZU5vdE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBleHByKQorICAgICAgICA6IFVuYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5
cGU6OmZvckJpdE9wKCksIGV4cHIsIG9wX2JpdG5vdCkKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIExvZ2ljYWxOb3ROb2RlOjpMb2dpY2FsTm90Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4cHJlc3Npb25Ob2RlKiBleHByKQotICAgICAgICA6IFVuYXJ5T3BOb2RlKGdsb2JhbERh
dGEsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIsIG9wX25vdCkKKyAgICBpbmxpbmUg
TG9naWNhbE5vdE5vZGU6OkxvZ2ljYWxOb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9u
Tm9kZSogZXhwcikKKyAgICAgICAgOiBVbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBl
Ojpib29sZWFuVHlwZSgpLCBleHByLCBvcF9ub3QpCiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBCaW5hcnlPcE5vZGU6OkJpbmFyeU9wTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNvZGVJRCBvcGNv
ZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KGdsb2JhbERhdGEpCisgICAgaW5saW5lIEJpbmFyeU9wTm9kZTo6QmluYXJ5T3BOb2RlKGludCBs
aW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
T3Bjb2RlSUQgb3Bjb2RlSUQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBF
eHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fZXhwcjEoZXhwcjEpCiAgICAg
ICAgICwgbV9leHByMihleHByMikKICAgICAgICAgLCBtX29wY29kZUlEKG9wY29kZUlEKQpAQCAt
NDQwLDggKzQ0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgQmluYXJ5T3BOb2RlOjpCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBS
ZXN1bHRUeXBlIHR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBPcGNvZGVJRCBvcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIHR5cGUpCisgICAgaW5saW5lIEJpbmFyeU9w
Tm9kZTo6QmluYXJ5T3BOb2RlKGludCBsaW5lTnVtYmVyLCBSZXN1bHRUeXBlIHR5cGUsIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNvZGVJRCBvcGNvZGVJ
RCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxp
bmVOdW1iZXIsIHR5cGUpCiAgICAgICAgICwgbV9leHByMShleHByMSkKICAgICAgICAgLCBtX2V4
cHIyKGV4cHIyKQogICAgICAgICAsIG1fb3Bjb2RlSUQob3Bjb2RlSUQpCkBAIC00NDksMTQwICs0
NDksMTQwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgTXVs
dE5vZGU6Ok11bHROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykK
LSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVtYmVyVHlw
ZUNhblJldXNlKCksIGV4cHIxLCBleHByMiwgb3BfbXVsLCByaWdodEhhc0Fzc2lnbm1lbnRzKQor
ICAgIGlubGluZSBNdWx0Tm9kZTo6TXVsdE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25O
b2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bWJl
clR5cGVDYW5SZXVzZSgpLCBleHByMSwgZXhwcjIsIG9wX211bCwgcmlnaHRIYXNBc3NpZ25tZW50
cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERpdk5vZGU6OkRpdk5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShn
bG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2UoKSwgZXhwcjEsIGV4cHIy
LCBvcF9kaXYsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIERpdk5vZGU6OkRpdk5v
ZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2Rl
KGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bWJlclR5cGVDYW5SZXVzZSgpLCBleHByMSwgZXhw
cjIsIG9wX2RpdiwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCiAKLSAgICBp
bmxpbmUgTW9kTm9kZTo6TW9kTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6Om51
bWJlclR5cGVDYW5SZXVzZSgpLCBleHByMSwgZXhwcjIsIG9wX21vZCwgcmlnaHRIYXNBc3NpZ25t
ZW50cykKKyAgICBpbmxpbmUgTW9kTm9kZTo6TW9kTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6
bnVtYmVyVHlwZUNhblJldXNlKCksIGV4cHIxLCBleHByMiwgb3BfbW9kLCByaWdodEhhc0Fzc2ln
bm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQWRkTm9kZTo6QWRkTm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BO
b2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmZvckFkZChleHByMS0+cmVzdWx0RGVzY3JpcHRv
cigpLCBleHByMi0+cmVzdWx0RGVzY3JpcHRvcigpKSwgZXhwcjEsIGV4cHIyLCBvcF9hZGQsIHJp
Z2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEFkZE5vZGU6OkFkZE5vZGUoaW50IGxpbmVO
dW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIs
IFJlc3VsdFR5cGU6OmZvckFkZChleHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLCBleHByMi0+cmVz
dWx0RGVzY3JpcHRvcigpKSwgZXhwcjEsIGV4cHIyLCBvcF9hZGQsIHJpZ2h0SGFzQXNzaWdubWVu
dHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBTdWJOb2RlOjpTdWJOb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUo
Z2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVtYmVyVHlwZUNhblJldXNlKCksIGV4cHIxLCBleHBy
Miwgb3Bfc3ViLCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBTdWJOb2RlOjpTdWJO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9k
ZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2UoKSwgZXhwcjEsIGV4
cHIyLCBvcF9zdWIsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBMZWZ0U2hpZnROb2RlOjpMZWZ0U2hpZnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVz
dWx0VHlwZTo6Zm9yQml0T3AoKSwgZXhwcjEsIGV4cHIyLCBvcF9sc2hpZnQsIHJpZ2h0SGFzQXNz
aWdubWVudHMpCisgICAgaW5saW5lIExlZnRTaGlmdE5vZGU6OkxlZnRTaGlmdE5vZGUoaW50IGxp
bmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1i
ZXIsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCksIGV4cHIxLCBleHByMiwgb3BfbHNoaWZ0LCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmlnaHRTaGlmdE5v
ZGU6OlJpZ2h0U2hpZnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Zm9yQml0
T3AoKSwgZXhwcjEsIGV4cHIyLCBvcF9yc2hpZnQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAg
aW5saW5lIFJpZ2h0U2hpZnROb2RlOjpSaWdodFNoaWZ0Tm9kZShpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlw
ZTo6Zm9yQml0T3AoKSwgZXhwcjEsIGV4cHIyLCBvcF9yc2hpZnQsIHJpZ2h0SGFzQXNzaWdubWVu
dHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpV
bnNpZ25lZFJpZ2h0U2hpZnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVt
YmVyVHlwZUNhblJldXNlKCksIGV4cHIxLCBleHByMiwgb3BfdXJzaGlmdCwgcmlnaHRIYXNBc3Np
Z25tZW50cykKKyAgICBpbmxpbmUgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6VW5zaWduZWRSaWdo
dFNoaWZ0Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5h
cnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6bnVtYmVyVHlwZUNhblJldXNlKCksIGV4
cHIxLCBleHByMiwgb3BfdXJzaGlmdCwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAg
fQogCi0gICAgaW5saW5lIExlc3NOb2RlOjpMZXNzTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJl
c3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwgb3BfbGVzcywgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICBpbmxpbmUgTGVzc05vZGU6Okxlc3NOb2RlKGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1
bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2xlc3MsIHJpZ2h0SGFzQXNz
aWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBHcmVhdGVyTm9kZTo6R3JlYXRl
ck5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6
IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHBy
MSwgZXhwcjIsIG9wX2dyZWF0ZXIsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEdy
ZWF0ZXJOb2RlOjpHcmVhdGVyTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAg
ICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUo
KSwgZXhwcjEsIGV4cHIyLCBvcF9ncmVhdGVyLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgTGVzc0VxTm9kZTo6TGVzc0VxTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2Jh
bERhdGEsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwgb3BfbGVzc2Vx
LCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBMZXNzRXFOb2RlOjpMZXNzRXFOb2Rl
KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShs
aW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2xl
c3NlcSwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEdy
ZWF0ZXJFcU5vZGU6OkdyZWF0ZXJFcU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBl
Ojpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2dyZWF0ZXJlcSwgcmlnaHRIYXNBc3Np
Z25tZW50cykKKyAgICBpbmxpbmUgR3JlYXRlckVxTm9kZTo6R3JlYXRlckVxTm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJl
ciwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9ncmVhdGVyZXEs
IHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBUaHJvd2Fi
bGVCaW5hcnlPcE5vZGU6OlRocm93YWJsZUJpbmFyeU9wTm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFJlc3VsdFR5cGUgdHlwZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIE9wY29kZUlEIG9wY29kZUlELCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
Ci0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIHR5cGUsIGV4cHIxLCBleHByMiwg
b3Bjb2RlSUQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIFRocm93YWJsZUJpbmFy
eU9wTm9kZTo6VGhyb3dhYmxlQmluYXJ5T3BOb2RlKGludCBsaW5lTnVtYmVyLCBSZXN1bHRUeXBl
IHR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNv
ZGVJRCBvcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFy
eU9wTm9kZShsaW5lTnVtYmVyLCB0eXBlLCBleHByMSwgZXhwcjIsIG9wY29kZUlELCByaWdodEhh
c0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVGhyb3dhYmxlQmluYXJ5
T3BOb2RlOjpUaHJvd2FibGVCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bj
b2RlSUQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUo
Z2xvYmFsRGF0YSwgZXhwcjEsIGV4cHIyLCBvcGNvZGVJRCwgcmlnaHRIYXNBc3NpZ25tZW50cykK
KyAgICBpbmxpbmUgVGhyb3dhYmxlQmluYXJ5T3BOb2RlOjpUaHJvd2FibGVCaW5hcnlPcE5vZGUo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBPcGNvZGVJRCBvcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAg
ICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIG9wY29kZUlELCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgSW5zdGFuY2VPZk5v
ZGU6Okluc3RhbmNlT2ZOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKLSAgICAgICAgOiBUaHJvd2FibGVCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlw
ZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9pbnN0YW5jZW9mLCByaWdodEhhc0Fz
c2lnbm1lbnRzKQorICAgIGlubGluZSBJbnN0YW5jZU9mTm9kZTo6SW5zdGFuY2VPZk5vZGUoaW50
IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogVGhyb3dhYmxlQmluYXJ5T3BO
b2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwg
b3BfaW5zdGFuY2VvZiwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIEluTm9kZTo6SW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKLSAgICAgICAgOiBUaHJvd2FibGVCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgZXhwcjEs
IGV4cHIyLCBvcF9pbiwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICBpbmxpbmUgSW5Ob2RlOjpJ
bk5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogVGhyb3dhYmxl
QmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIGV4cHIxLCBleHByMiwgb3BfaW4sIHJpZ2h0SGFzQXNz
aWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBFcXVhbE5vZGU6OkVxdWFsTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmlu
YXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBl
eHByMiwgb3BfZXEsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEVxdWFsTm9kZTo6
RXF1YWxOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFy
eU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhw
cjIsIG9wX2VxLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgTm90RXF1YWxOb2RlOjpOb3RFcXVhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRU
eXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX25lcSwgcmlnaHRIYXNBc3NpZ25t
ZW50cykKKyAgICBpbmxpbmUgTm90RXF1YWxOb2RlOjpOb3RFcXVhbE5vZGUoaW50IGxpbmVOdW1i
ZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJl
c3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwgb3BfbmVxLCByaWdodEhhc0Fz
c2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RyaWN0RXF1YWxOb2RlOjpT
dHJpY3RFcXVhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQot
ICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpib29sZWFuVHlw
ZSgpLCBleHByMSwgZXhwcjIsIG9wX3N0cmljdGVxLCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAg
IGlubGluZSBTdHJpY3RFcXVhbE5vZGU6OlN0cmljdEVxdWFsTm9kZShpbnQgbGluZU51bWJlciwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0
VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9zdHJpY3RlcSwgcmlnaHRIYXNB
c3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIE5vdFN0cmljdEVxdWFsTm9k
ZTo6Tm90U3RyaWN0RXF1YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9v
bGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9uc3RyaWN0ZXEsIHJpZ2h0SGFzQXNzaWdubWVu
dHMpCisgICAgaW5saW5lIE5vdFN0cmljdEVxdWFsTm9kZTo6Tm90U3RyaWN0RXF1YWxOb2RlKGlu
dCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5l
TnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX25zdHJp
Y3RlcSwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEJp
dEFuZE5vZGU6OkJpdEFuZE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpmb3JC
aXRPcCgpLCBleHByMSwgZXhwcjIsIG9wX2JpdGFuZCwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAg
ICBpbmxpbmUgQml0QW5kTm9kZTo6Qml0QW5kTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6Zm9y
Qml0T3AoKSwgZXhwcjEsIGV4cHIyLCBvcF9iaXRhbmQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAg
ICAgewogICAgIH0KIAotICAgIGlubGluZSBCaXRPck5vZGU6OkJpdE9yTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGds
b2JhbERhdGEsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCksIGV4cHIxLCBleHByMiwgb3BfYml0b3Is
IHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEJpdE9yTm9kZTo6Qml0T3JOb2RlKGlu
dCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5l
TnVtYmVyLCBSZXN1bHRUeXBlOjpmb3JCaXRPcCgpLCBleHByMSwgZXhwcjIsIG9wX2JpdG9yLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQml0WE9yTm9k
ZTo6Qml0WE9yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0g
ICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCks
IGV4cHIxLCBleHByMiwgb3BfYml0eG9yLCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGlu
ZSBCaXRYT3JOb2RlOjpCaXRYT3JOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQor
ICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpmb3JCaXRPcCgp
LCBleHByMSwgZXhwcjIsIG9wX2JpdHhvciwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIExvZ2ljYWxPcE5vZGU6OkxvZ2ljYWxPcE5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgTG9naWNhbE9wZXJhdG9yIG9wZXIpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xv
YmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSkKKyAgICBpbmxpbmUgTG9naWNhbE9w
Tm9kZTo6TG9naWNhbE9wTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIExvZ2ljYWxPcGVyYXRvciBvcGVyKQorICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCkpCiAg
ICAgICAgICwgbV9leHByMShleHByMSkKICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAgICAg
ICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENvbmRpdGlv
bmFsTm9kZTo6Q29uZGl0aW9uYWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVz
c2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5l
IENvbmRpdGlvbmFsTm9kZTo6Q29uZGl0aW9uYWxOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNz
aW9uTm9kZSogbG9naWNhbCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBt
X2xvZ2ljYWwobG9naWNhbCkKICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQogICAgICAgICAsIG1f
ZXhwcjIoZXhwcjIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGU6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogIHJp
Z2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KGdsb2JhbERhdGEpCisgICAgaW5saW5lIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6UmVhZE1vZGlm
eVJlc29sdmVOb2RlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3Bl
cmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAg
ICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU5MSwx
NiArNTkxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
QXNzaWduUmVzb2x2ZU5vZGU6OkFzc2lnblJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERh
dGEpCisgICAgaW5saW5lIEFzc2lnblJlc29sdmVOb2RlOjpBc3NpZ25SZXNvbHZlTm9kZShpbnQg
bGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxp
bmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX3JpZ2h0KHJp
Z2h0KQogICAgICAgICAsIG1fcmlnaHRIYXNBc3NpZ25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRz
KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpSZWFk
TW9kaWZ5QnJhY2tldE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhwcmVz
c2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisg
ICAgaW5saW5lIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6UmVhZE1vZGlmeUJyYWNrZXROb2RlKGlu
dCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlw
dEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9iYXNlKGJh
c2UpCiAgICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQpAQCAtNjExLDggKzYxMSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduQnJhY2tl
dE5vZGU6OkFzc2lnbkJyYWNrZXROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBBc3NpZ25CcmFja2V0Tm9kZTo6QXNzaWduQnJhY2tldE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9u
Tm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3Jp
cHQpCkBAIC02MjIsOCArNjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBBc3NpZ25Eb3ROb2RlOjpBc3NpZ25Eb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBF
eHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAg
IDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6
QXNzaWduRG90Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQpAQCAt
NjMyLDggKzYzMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgUmVhZE1vZGlmeURvdE5vZGU6OlJlYWRNb2RpZnlEb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBP
cGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUg
UmVhZE1vZGlmeURvdE5vZGU6OlJlYWRNb2RpZnlEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHBy
ZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIs
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZVN1YkV4
cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCkBAIC02NDMsOCArNjQzLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25FcnJvck5v
ZGU6OkFzc2lnbkVycm9yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25O
b2RlKiBsZWZ0LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEFzc2lnbkVycm9yTm9k
ZTo6QXNzaWduRXJyb3JOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogbGVmdCwg
T3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRp
dm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fbGVmdChsZWZ0KQogICAg
ICAgICAsIG1fb3BlcmF0b3Iob3BlcikKQEAgLTY1Miw3NCArNjUyLDc0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQ29tbWFOb2RlOjpDb21tYU5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMikKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlu
bGluZSBDb21tYU5vZGU6OkNvbW1hTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bGluZU51bWJlcikKICAgICB7CiAgICAgICAgIG1fZXhwcmVzc2lvbnMuYXBwZW5kKGV4cHIxKTsK
ICAgICAgICAgbV9leHByZXNzaW9ucy5hcHBlbmQoZXhwcjIpOwogICAgIH0KIAotICAgIGlubGlu
ZSBDb25zdFN0YXRlbWVudE5vZGU6OkNvbnN0U3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvbnN0RGVjbE5vZGUqIG5leHQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShn
bG9iYWxEYXRhKQorICAgIGlubGluZSBDb25zdFN0YXRlbWVudE5vZGU6OkNvbnN0U3RhdGVtZW50
Tm9kZShpbnQgbGluZU51bWJlciwgQ29uc3REZWNsTm9kZSogbmV4dCkKKyAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9uZXh0KG5leHQpCiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBTb3VyY2VFbGVtZW50czo6U291cmNlRWxlbWVudHMoSlNHbG9iYWxE
YXRhKikKKyAgICBpbmxpbmUgU291cmNlRWxlbWVudHM6OlNvdXJjZUVsZW1lbnRzKCkKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIEVtcHR5U3RhdGVtZW50Tm9kZTo6RW1wdHlTdGF0ZW1lbnRO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGds
b2JhbERhdGEpCisgICAgaW5saW5lIEVtcHR5U3RhdGVtZW50Tm9kZTo6RW1wdHlTdGF0ZW1lbnRO
b2RlKGludCBsaW5lTnVtYmVyKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6RGVidWdn
ZXJTdGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIERlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6
RGVidWdnZXJTdGF0ZW1lbnROb2RlKGludCBsaW5lTnVtYmVyKQorICAgICAgICA6IFN0YXRlbWVu
dE5vZGUobGluZU51bWJlcikKICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGluZSBFeHByU3Rh
dGVtZW50Tm9kZTo6RXhwclN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eHByZXNzaW9uTm9kZSogZXhwcikKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIEV4cHJTdGF0ZW1lbnROb2RlOjpFeHByU3RhdGVtZW50Tm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShs
aW5lTnVtYmVyKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgIHsKICAgICB9CiAKLSAgICBp
bmxpbmUgVmFyU3RhdGVtZW50Tm9kZTo6VmFyU3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUo
Z2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgVmFyU3RhdGVtZW50Tm9kZTo6VmFyU3RhdGVtZW50Tm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDogU3RhdGVt
ZW50Tm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgIHsKICAgICB9
CiAgICAgCi0gICAgaW5saW5lIElmTm9kZTo6SWZOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogaWZCbG9jaykKLSAg
ICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIElmTm9kZTo6SWZO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnRO
b2RlKiBpZkJsb2NrKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pCiAgICAgICAgICwgbV9pZkJsb2NrKGlmQmxvY2sp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBJZkVsc2VOb2RlOjpJZkVsc2VOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50
Tm9kZSogaWZCbG9jaywgU3RhdGVtZW50Tm9kZSogZWxzZUJsb2NrKQotICAgICAgICA6IElmTm9k
ZShnbG9iYWxEYXRhLCBjb25kaXRpb24sIGlmQmxvY2spCisgICAgaW5saW5lIElmRWxzZU5vZGU6
OklmRWxzZU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0
YXRlbWVudE5vZGUqIGlmQmxvY2ssIFN0YXRlbWVudE5vZGUqIGVsc2VCbG9jaykKKyAgICAgICAg
OiBJZk5vZGUobGluZU51bWJlciwgY29uZGl0aW9uLCBpZkJsb2NrKQogICAgICAgICAsIG1fZWxz
ZUJsb2NrKGVsc2VCbG9jaykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERvV2hpbGVOb2Rl
OjpEb1doaWxlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShn
bG9iYWxEYXRhKQorICAgIGlubGluZSBEb1doaWxlTm9kZTo6RG9XaGlsZU5vZGUoaW50IGxpbmVO
dW1iZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisg
ICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fc3RhdGVtZW50
KHN0YXRlbWVudCkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIFdoaWxlTm9kZTo6V2hpbGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKLSAgICAgICAgOiBT
dGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFdoaWxlTm9kZTo6V2hpbGVOb2Rl
KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3Rh
dGVtZW50KQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBt
X2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBGb3JOb2RlOjpGb3JOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIEV4cHJlc3Np
b25Ob2RlKiBleHByMywgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBib29sIGV4cHIxV2FzVmFy
RGVjbCkKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEZv
ck5vZGU6OkZvck5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBFeHByZXNzaW9uTm9kZSogZXhwcjMsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudCwgYm9vbCBleHByMVdhc1ZhckRlY2wpCisgICAgICAgIDogU3RhdGVtZW50Tm9k
ZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICwgbV9leHBy
MihleHByMikKICAgICAgICAgLCBtX2V4cHIzKGV4cHIzKQpAQCAtNzI5LDM4ICs3MjksMzggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogICAgIH0KIAotICAg
IGlubGluZSBDb250aW51ZU5vZGU6OkNvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBDb250
aW51ZU5vZGU6OkNvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5l
TnVtYmVyKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBt
X2lkZW50KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgQ29udGludWVOb2RlOjpDb250aW51ZU5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIENvbnRpbnVlTm9kZTo6Q29udGludWVO
b2RlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAgICAgOiBT
dGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7
CiAgICAgfQogICAgIAotICAgIGlubGluZSBCcmVha05vZGU6OkJyZWFrTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAg
IGlubGluZSBCcmVha05vZGU6OkJyZWFrTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGlu
dCBsaW5lTnVtYmVyKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBtX2lkZW50KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyKQog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQnJlYWtOb2RlOjpCcmVha05vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEJyZWFrTm9kZTo6QnJlYWtOb2RlKGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAgICAgOiBTdGF0ZW1l
bnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7CiAgICAg
fQogICAgIAotICAgIGlubGluZSBSZXR1cm5Ob2RlOjpSZXR1cm5Ob2RlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKQotICAgICAgICA6IFN0YXRlbWVudE5v
ZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUmV0dXJuTm9kZTo6UmV0dXJuTm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUo
bGluZU51bWJlcikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgV2l0aE5vZGU6OldpdGhOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdWludDMyX3QgZGl2
b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShn
bG9iYWxEYXRhKQorICAgIGlubGluZSBXaXRoTm9kZTo6V2l0aE5vZGUoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIHVpbnQzMl90
IGRpdm90LCB1aW50MzJfdCBleHByZXNzaW9uTGVuZ3RoKQorICAgICAgICA6IFN0YXRlbWVudE5v
ZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0YXRl
bWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9kaXZvdChkaXZvdCkKQEAgLTc2OCwyMSArNzY4
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgTGFiZWxO
b2RlOjpMYWJlbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9k
ZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBMYWJlbE5vZGU6OkxhYmVsTm9kZShpbnQgbGluZU51
bWJlciwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50KQor
ICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX25hbWUobmFt
ZSkKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewogICAgIH0KIAotICAg
IGlubGluZSBUaHJvd05vZGU6OlRocm93Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
cHJlc3Npb25Ob2RlKiBleHByKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkK
KyAgICBpbmxpbmUgVGhyb3dOb2RlOjpUaHJvd05vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBleHByKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFRyeU5vZGU6OlRy
eU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywg
Y29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRlbnQsIGJvb2wgY2F0Y2hIYXNFdmFsLCBTdGF0
ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCi0gICAg
ICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBUcnlOb2RlOjpUcnlO
b2RlKGludCBsaW5lTnVtYmVyLCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRp
ZmllciYgZXhjZXB0aW9uSWRlbnQsIGJvb2wgY2F0Y2hIYXNFdmFsLCBTdGF0ZW1lbnROb2RlKiBj
YXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCisgICAgICAgIDogU3RhdGVt
ZW50Tm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fdHJ5QmxvY2sodHJ5QmxvY2spCiAgICAg
ICAgICwgbV9leGNlcHRpb25JZGVudChleGNlcHRpb25JZGVudCkKICAgICAgICAgLCBtX2NhdGNo
QmxvY2soY2F0Y2hCbG9jaykKQEAgLTc5MSw4MiArNzkxLDgyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUGFyYW1ldGVyTm9kZTo6UGFyYW1ldGVyTm9kZShK
U0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICBpbmxpbmUgUGFyYW1l
dGVyTm9kZTo6UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKICAgICAgICAg
OiBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgUGFyYW1ldGVyTm9kZTo6UGFyYW1ldGVyTm9kZShKU0dsb2JhbERhdGEqLCBQYXJh
bWV0ZXJOb2RlKiBsLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICBpbmxpbmUgUGFyYW1l
dGVyTm9kZTo6UGFyYW1ldGVyTm9kZShQYXJhbWV0ZXJOb2RlKiBsLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKICAgICAgICAgOiBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fbmV4dCgwKQog
ICAgIHsKICAgICAgICAgbC0+bV9uZXh0ID0gdGhpczsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVu
Y0V4cHJOb2RlOjpGdW5jRXhwck5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIpCi0gICAgICAgIDogRXhwcmVzc2lv
bk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgRnVuY0V4cHJOb2RlOjpGdW5jRXhwck5vZGUo
aW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRl
cikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fYm9k
eShib2R5KQogICAgIHsKICAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFy
YW1ldGVyLCBpZGVudCk7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmNEZWNsTm9kZTo6RnVuY0Rl
Y2xOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1l
dGVyTm9kZSogcGFyYW1ldGVyKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkK
KyAgICBpbmxpbmUgRnVuY0RlY2xOb2RlOjpGdW5jRGVjbE5vZGUoaW50IGxpbmVOdW1iZXIsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlcikKKyAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9ib2R5KGJvZHkpCiAgICAgewogICAg
ICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBwYXJhbWV0ZXIsIGlkZW50KTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgQ2FzZUNsYXVzZU5vZGU6OkNhc2VDbGF1c2VOb2RlKEpTR2xvYmFs
RGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykK
KyAgICBpbmxpbmUgQ2FzZUNsYXVzZU5vZGU6OkNhc2VDbGF1c2VOb2RlKEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykKICAgICAgICAgOiBtX2V4cHIoZXhw
cikKICAgICAgICAgLCBtX3N0YXRlbWVudHMoc3RhdGVtZW50cykKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIENsYXVzZUxpc3ROb2RlOjpDbGF1c2VMaXN0Tm9kZShKU0dsb2JhbERhdGEqLCBD
YXNlQ2xhdXNlTm9kZSogY2xhdXNlKQorICAgIGlubGluZSBDbGF1c2VMaXN0Tm9kZTo6Q2xhdXNl
TGlzdE5vZGUoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkKICAgICAgICAgOiBtX2NsYXVzZShjbGF1
c2UpCiAgICAgICAgICwgbV9uZXh0KDApCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDbGF1
c2VMaXN0Tm9kZTo6Q2xhdXNlTGlzdE5vZGUoSlNHbG9iYWxEYXRhKiwgQ2xhdXNlTGlzdE5vZGUq
IGNsYXVzZUxpc3QsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpCisgICAgaW5saW5lIENsYXVzZUxp
c3ROb2RlOjpDbGF1c2VMaXN0Tm9kZShDbGF1c2VMaXN0Tm9kZSogY2xhdXNlTGlzdCwgQ2FzZUNs
YXVzZU5vZGUqIGNsYXVzZSkKICAgICAgICAgOiBtX2NsYXVzZShjbGF1c2UpCiAgICAgICAgICwg
bV9uZXh0KDApCiAgICAgewogICAgICAgICBjbGF1c2VMaXN0LT5tX25leHQgPSB0aGlzOwogICAg
IH0KIAotICAgIGlubGluZSBDYXNlQmxvY2tOb2RlOjpDYXNlQmxvY2tOb2RlKEpTR2xvYmFsRGF0
YSosIENsYXVzZUxpc3ROb2RlKiBsaXN0MSwgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2Us
IENsYXVzZUxpc3ROb2RlKiBsaXN0MikKKyAgICBpbmxpbmUgQ2FzZUJsb2NrTm9kZTo6Q2FzZUJs
b2NrTm9kZShDbGF1c2VMaXN0Tm9kZSogbGlzdDEsIENhc2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xh
dXNlLCBDbGF1c2VMaXN0Tm9kZSogbGlzdDIpCiAgICAgICAgIDogbV9saXN0MShsaXN0MSkKICAg
ICAgICAgLCBtX2RlZmF1bHRDbGF1c2UoZGVmYXVsdENsYXVzZSkKICAgICAgICAgLCBtX2xpc3Qy
KGxpc3QyKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgU3dpdGNoTm9kZTo6U3dpdGNoTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBDYXNlQmxv
Y2tOb2RlKiBibG9jaykKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAg
aW5saW5lIFN3aXRjaE5vZGU6OlN3aXRjaE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25O
b2RlKiBleHByLCBDYXNlQmxvY2tOb2RlKiBibG9jaykKKyAgICAgICAgOiBTdGF0ZW1lbnROb2Rl
KGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9ibG9jayhi
bG9jaykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVj
bE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
RXhwcmVzc2lvbk5vZGUqIGluaXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0
YSkKKyAgICBpbmxpbmUgQ29uc3REZWNsTm9kZTo6Q29uc3REZWNsTm9kZShpbnQgbGluZU51bWJl
ciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0KQorICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkK
ICAgICAgICAgLCBtX25leHQoMCkKICAgICAgICAgLCBtX2luaXQoaW5pdCkKICAgICB7CiAgICAg
fQogCi0gICAgaW5saW5lIEJsb2NrTm9kZTo6QmxvY2tOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgU291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpCi0gICAgICAgIDogU3RhdGVtZW50Tm9k
ZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBCbG9ja05vZGU6OkJsb2NrTm9kZShpbnQgbGluZU51
bWJlciwgU291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpCisgICAgICAgIDogU3RhdGVtZW50Tm9k
ZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fc3RhdGVtZW50cyhzdGF0ZW1lbnRzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogbCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRl
bWVudE5vZGUqIHN0YXRlbWVudCkKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBsLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50KQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGlu
ZU51bWJlcikKICAgICAgICAgLCBtX2lkZW50KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51
bGxJZGVudGlmaWVyKQogICAgICAgICAsIG1faW5pdCgwKQogICAgICAgICAsIG1fbGV4cHIobCkK
QEAgLTg3NiwxNyArODc2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluLCBFeHByZXNzaW9uTm9k
ZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgZGl2b3QsIGludCBzdGFydE9m
ZnNldCwgaW50IGVuZE9mZnNldCkKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9k
ZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGlu
dCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQorICAgICAgICA6IFN0YXRl
bWVudE5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAs
IG1faW5pdCgwKQotICAgICAgICAsIG1fbGV4cHIobmV3IChnbG9iYWxEYXRhKSBSZXNvbHZlTm9k
ZShnbG9iYWxEYXRhLCBpZGVudCwgZGl2b3QgLSBzdGFydE9mZnNldCkpCisgICAgICAgICwgbV9s
ZXhwcihuZXcgKGdsb2JhbERhdGEpIFJlc29sdmVOb2RlKGxpbmVOdW1iZXIsIGlkZW50LCBkaXZv
dCAtIHN0YXJ0T2Zmc2V0KSkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0
YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9pZGVudElzVmFyRGVjbCh0cnVlKQogICAg
IHsKICAgICAgICAgaWYgKGluKSB7Ci0gICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9k
ZSA9IG5ldyAoZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUoZ2xvYmFsRGF0YSwgaWRlbnQs
IGluLCB0cnVlKTsKKyAgICAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3IChn
bG9iYWxEYXRhKSBBc3NpZ25SZXNvbHZlTm9kZShsaW5lTnVtYmVyLCBpZGVudCwgaW4sIHRydWUp
OwogICAgICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3Qg
LSBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gZGl2b3QpOwogICAgICAgICAgICAgbV9pbml0ID0g
bm9kZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUlu
Zm8uaAkocmV2aXNpb24gOTg3MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgTm9kZUlu
Zm9faAogCiAjaW5jbHVkZSAiTm9kZXMuaCIKLSNpbmNsdWRlICJQYXJzZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShy
ZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lk
IFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiB7Ci0g
ICAgbV9saW5lID0gZmlyc3RMaW5lOworICAgIG1fbGluZU51bWJlciA9IGZpcnN0TGluZTsKICAg
ICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiB9CiAKQEAgLTg5LDE3ICs4OSwxNyBAQCBTY29wZU5v
ZGVEYXRhOjpTY29wZU5vZGVEYXRhKFBhcnNlckFyZW5hCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
U2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGluU3Ry
aWN0Q29udGV4dCkKLSAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKK1Njb3BlTm9kZTo6
U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGJvb2wg
aW5TdHJpY3RDb250ZXh0KQorICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKQogICAgICwg
UGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCiAgICAgLCBtX2ZlYXR1cmVzKGluU3Ry
aWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogTm9GZWF0dXJlcykKIHsKIH0KIAotU2Nv
cGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNr
LCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFi
bGVzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTdGF0
ZW1lbnROb2RlKGdsb2JhbERhdGEpCitTY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
KiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVO
dW1iZXIpCiAgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKLSAgICAsIG1f
ZGF0YShhZG9wdFB0cihuZXcgU2NvcGVOb2RlRGF0YShnbG9iYWxEYXRhLT5wYXJzZXItPmFyZW5h
KCksIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgbnVt
Q29uc3RhbnRzKSkpCisgICAgLCBtX2RhdGEoYWRvcHRQdHIobmV3IFNjb3BlTm9kZURhdGEoKmds
b2JhbERhdGEtPnBhcnNlckFyZW5hLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2Fw
dHVyZWRWYXJpYWJsZXMsIG51bUNvbnN0YW50cykpKQogICAgICwgbV9mZWF0dXJlcyhmZWF0dXJl
cykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKIHsKQEAgLTExMiwxNCArMTEyLDE0IEBAIFN0YXRl
bWVudE5vZGUqIFNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW4KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLWlubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc291cmNlLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFu
dHMpCitpbmxpbmUgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sq
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5l
TnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZh
cmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
KiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykK
K1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNl
dCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxQcm9ncmFtTm9k
ZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ss
IGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0
YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKGds
b2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2Fw
dHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBB
U1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5k
YXRhKCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgUGFzc1Jl
ZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
aW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJj
ZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBm
dW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAg
ICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGlu
ZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51
bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwg
Y2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJl
cywgbnVtQ29uc3RhbnRzKQogewogfQogCi1QYXNzUmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6
Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmll
clNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxFdmFsTm9kZT4g
RXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVy
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25T
dGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKGdsb2JhbERh
dGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUg
PSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNr
LCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25z
dGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9k
ZSk7CiAgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTE1NCwxMyAr
MTU0LDEzIEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6RnVuY3Rpb25QYXJhbWV0ZXJzKFAKICAgICAg
ICAgYXBwZW5kKHBhcmFtZXRlci0+aWRlbnQoKSk7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlO
b2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpblN0
cmljdENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgaW5TdHJpY3RDb250ZXh0
KQoraW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAg
OiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KQogewog
fQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0
YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
aWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc291cmNl
Q29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBm
ZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9u
Qm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykK
KyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2VDb2RlLCBjaGls
ZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBu
dW1Db25zdGFudHMpCiB7CiB9CiAKQEAgLTE3NywxNCArMTc3LDE0IEBAIHZvaWQgRnVuY3Rpb25C
b2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMKICAgICBtX2lkZW50ID0gaWRlbnQ7CiB9CiAKLUZ1
bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rp
b25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1i
ZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5
Tm9kZShnbG9iYWxEYXRhLCBpblN0cmljdENvbnRleHQpOworICAgIHJldHVybiBuZXcgRnVuY3Rp
b25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBpblN0cmljdENvbnRleHQpOwogfQog
Ci1QYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3Rh
Y2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNh
cHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGlu
dCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2Rl
ID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlv
bkJvZHlOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0
YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2Rl
KTsKICAgICBub2RlLT5kYXRhKCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gOTg3MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qs
IEpTR2xvYmFsRGF0YSopOwogICAgIH07CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg
ICBzdHJ1Y3QgUGFyc2VyQXJlbmFEYXRhIDogUGFyc2VyQXJlbmFEZWxldGFibGUgeworICAgICAg
ICBUIGRhdGE7CisgICAgfTsKKwogICAgIGNsYXNzIFBhcnNlckFyZW5hUmVmQ291bnRlZCA6IHB1
YmxpYyBSZWZDb3VudGVkPFBhcnNlckFyZW5hUmVmQ291bnRlZD4gewogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgUGFyc2VyQXJlbmFSZWZDb3VudGVkKEpTR2xvYmFsRGF0YSopOwpAQCAtMTI4LDIy
ICsxMzMsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOb2RlIDogcHVibGljIFBh
cnNlckFyZW5hRnJlZWFibGUgewogICAgIHByb3RlY3RlZDoKLSAgICAgICAgTm9kZShKU0dsb2Jh
bERhdGEqKTsKKyAgICAgICAgTm9kZShpbnQpOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIH5Ob2RlKCkgeyB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkZXN0aW5hdGlvbiA9IDApID0gMDsK
IAotICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lOyB9CisgICAgICAg
IGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgaW50IG1fbGluZTsKKyAgICAgICAgaW50IG1fbGluZU51bWJlcjsKICAg
ICB9OwogCiAgICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgICAgcHJv
dGVjdGVkOgotICAgICAgICBFeHByZXNzaW9uTm9kZShKU0dsb2JhbERhdGEqLCBSZXN1bHRUeXBl
ID0gUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSk7CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKGlu
dCwgUmVzdWx0VHlwZSA9IFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCkpOwogCiAgICAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQpAQCAtMTczLDcgKzE3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU3RhdGVt
ZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFN0YXRlbWVu
dE5vZGUoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIFN0YXRlbWVudE5vZGUoaW50KTsKIAogICAg
IHB1YmxpYzoKICAgICAgICAgdm9pZCBzZXRMb2MoaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5l
KTsKQEAgLTE5Miw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE51bGxO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE51bGxO
b2RlKEpTR2xvYmFsRGF0YSopOworICAgICAgICBOdWxsTm9kZShpbnQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMjAyLDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgQm9vbGVhbk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQm9vbGVhbk5vZGUoSlNHbG9iYWxEYXRhKiwgYm9vbCB2YWx1
ZSk7CisgICAgICAgIEJvb2xlYW5Ob2RlKGludCwgYm9vbCB2YWx1ZSk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0yMTQsNyArMjE5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIE51bWJlck5vZGUoSlNHbG9iYWxEYXRhKiwgZG91YmxlIHZhbHVl
KTsKKyAgICAgICAgTnVtYmVyTm9kZShpbnQsIGRvdWJsZSB2YWx1ZSk7CiAKICAgICAgICAgZG91
YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgICAgICB2b2lkIHNldFZh
bHVlKGRvdWJsZSB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KQEAgLTIzMCw3ICsyMzUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0cmluZ05vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaW5nTm9kZShKU0dsb2JhbERhdGEq
LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFN0cmluZ05vZGUoaW50LCBjb25zdCBJZGVu
dGlmaWVyJik7CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CiAKQEAgLTM0MCw3ICszNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFJlZ0V4cE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBSZWdFeHBOb2RlKEpTR2xvYmFs
RGF0YSosIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdz
KTsKKyAgICAgICAgUmVnRXhwTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNv
bnN0IElkZW50aWZpZXImIGZsYWdzKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTM1MSw3ICszNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFRo
aXNOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRo
aXNOb2RlKEpTR2xvYmFsRGF0YSopOworICAgICAgICBUaGlzTm9kZShpbnQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMzU5LDcgKzM2NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3Qg
SWRlbnRpZmllciYsIGludCBzdGFydE9mZnNldCk7CisgICAgICAgIFJlc29sdmVOb2RlKGludCwg
Y29uc3QgSWRlbnRpZmllciYsIGludCBzdGFydE9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KIApAQCAtMzc2
LDggKzM4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRWxlbWVudE5vZGUgOiBw
dWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBFbGVtZW50
Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQgZWxpc2lvbiwgRXhwcmVzc2lvbk5vZGUqKTsKLSAgICAg
ICAgRWxlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiwgRWxlbWVudE5vZGUqLCBpbnQgZWxpc2lvbiwg
RXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAgRWxlbWVudE5vZGUoaW50IGVsaXNpb24sIEV4cHJl
c3Npb25Ob2RlKik7CisgICAgICAgIEVsZW1lbnROb2RlKEVsZW1lbnROb2RlKiwgaW50IGVsaXNp
b24sIEV4cHJlc3Npb25Ob2RlKik7CiAKICAgICAgICAgaW50IGVsaXNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2VsaXNpb247IH0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKCkgeyByZXR1
cm4gbV9ub2RlOyB9CkBAIC0zOTEsMTEgKzM5NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFycmF5Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgot
ICAgICAgICBBcnJheU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50IGVsaXNpb24pOwotICAgICAgICBB
cnJheU5vZGUoSlNHbG9iYWxEYXRhKiwgRWxlbWVudE5vZGUqKTsKLSAgICAgICAgQXJyYXlOb2Rl
KEpTR2xvYmFsRGF0YSosIGludCBlbGlzaW9uLCBFbGVtZW50Tm9kZSopOworICAgICAgICBBcnJh
eU5vZGUoaW50LCBpbnQgZWxpc2lvbik7CisgICAgICAgIEFycmF5Tm9kZShpbnQsIEVsZW1lbnRO
b2RlKik7CisgICAgICAgIEFycmF5Tm9kZShpbnQsIGludCBlbGlzaW9uLCBFbGVtZW50Tm9kZSop
OwogCi0gICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRvQXJndW1lbnRMaXN0KEpTR2xvYmFsRGF0
YSopIGNvbnN0OworICAgICAgICBBcmd1bWVudExpc3ROb2RlKiB0b0FyZ3VtZW50TGlzdChKU0ds
b2JhbERhdGEqLCBpbnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApOwpAQCAtNDExLDggKzQxNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0ZXIgPSA0IH07
CiAKLSAgICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIEV4cHJlc3Npb25Ob2RlKiB2YWx1ZSwgVHlwZSk7Ci0gICAgICAgIFByb3BlcnR5Tm9k
ZShKU0dsb2JhbERhdGEqLCBkb3VibGUgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIHZhbHVlLCBUeXBl
KTsKKyAgICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXIm
LCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoSlNHbG9iYWxE
YXRhKiwgZG91YmxlLCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOwogCiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAgICAgVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC00MjYsOCArNDMxLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlIDogcHVibGljIE5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShKU0dsb2JhbERhdGEqLCBQcm9w
ZXJ0eU5vZGUqKTsKLSAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShKU0dsb2JhbERhdGEqLCBQcm9w
ZXJ0eU5vZGUqLCBQcm9wZXJ0eUxpc3ROb2RlKik7CisgICAgICAgIFByb3BlcnR5TGlzdE5vZGUo
aW50LCBQcm9wZXJ0eU5vZGUqKTsKKyAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShpbnQsIFByb3Bl
cnR5Tm9kZSosIFByb3BlcnR5TGlzdE5vZGUqKTsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAK
QEAgLTQzOCw4ICs0NDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE9iamVjdExp
dGVyYWxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE9iamVjdExpdGVyYWxOb2RlKEpTR2xvYmFsRGF0YSopOwotICAgICAgICBPYmplY3RMaXRlcmFs
Tm9kZShKU0dsb2JhbERhdGEqLCBQcm9wZXJ0eUxpc3ROb2RlKik7CisgICAgICAgIE9iamVjdExp
dGVyYWxOb2RlKGludCk7CisgICAgICAgIE9iamVjdExpdGVyYWxOb2RlKGludCwgUHJvcGVydHlM
aXN0Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNDQ5
LDcgKzQ1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEJyYWNrZXRBY2Nl
c3Nvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKEpTR2xv
YmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgQnJhY2tldEFjY2Vzc29y
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zdWJzY3JpcHQ7IH0KQEAgLTQ2Nyw3ICs0
NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERvdEFjY2Vzc29yTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIERvdEFjY2Vzc29yTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBEb3RBY2Nlc3Nvck5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAg
ICAgIEV4cHJlc3Npb25Ob2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
OyB9CkBAIC00ODQsOCArNDg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmd1
bWVudExpc3ROb2RlIDogcHVibGljIE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJndW1l
bnRMaXN0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOwotICAgICAgICBBcmd1
bWVudExpc3ROb2RlKEpTR2xvYmFsRGF0YSosIEFyZ3VtZW50TGlzdE5vZGUqLCBFeHByZXNzaW9u
Tm9kZSopOworICAgICAgICBBcmd1bWVudExpc3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsK
KyAgICAgICAgQXJndW1lbnRMaXN0Tm9kZShpbnQsIEFyZ3VtZW50TGlzdE5vZGUqLCBFeHByZXNz
aW9uTm9kZSopOwogCiAgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIG1fbmV4dDsKICAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKQEAgLTQ5NiwxNiArNTAxLDE2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgQXJndW1lbnRzTm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVh
YmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFyZ3VtZW50c05vZGUoSlNHbG9iYWxEYXRhKik7
Ci0gICAgICAgIEFyZ3VtZW50c05vZGUoSlNHbG9iYWxEYXRhKiwgQXJndW1lbnRMaXN0Tm9kZSop
OworICAgICAgICBBcmd1bWVudHNOb2RlKCk7CisgICAgICAgIEFyZ3VtZW50c05vZGUoQXJndW1l
bnRMaXN0Tm9kZSopOwogCiAgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIG1fbGlzdE5vZGU7CiAg
ICAgfTsKIAogICAgIGNsYXNzIE5ld0V4cHJOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBw
dWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgTmV3
RXhwck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsKLSAgICAgICAgTmV3RXhw
ck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqLCBBcmd1bWVudHNOb2RlKik7Cisg
ICAgICAgIE5ld0V4cHJOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAgTmV3RXhw
ck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSosIEFyZ3VtZW50c05vZGUqKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTUxNiw3ICs1MjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIEV2YWxGdW5jdGlvbkNhbGxOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUoSlNHbG9iYWxEYXRhKiwgQXJndW1lbnRzTm9kZSos
IHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KTsKKyAgICAgICAgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUoaW50LCBBcmd1bWVudHNOb2RlKiwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTI2LDcgKzUzMSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKEpTR2xvYmFsRGF0YSosIEV4
cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsVmFs
dWVOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTM3LDcgKzU0Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGlj
OgotICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsUmVzb2x2
ZU5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTU1MCw3ICs1NTUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKEpTR2xvYmFsRGF0YSos
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVu
dHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShpbnQsIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTYyLDcgKzU2Nyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoSlNHbG9iYWxEYXRhKiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OworICAgICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTc1LDcgKzU4MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRnVuY3Rpb25DYWxs
RG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShK
U0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEFy
Z3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CisgICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTgzLDcgKzU4OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIEFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlm
aWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTU5MSw3ICs1OTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFBy
ZVBvc3RSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByZVBvc3RSZXNvbHZlTm9k
ZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBQcmVQb3N0UmVz
b2x2ZU5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50OwpAQCAtNTk5LDcgKzYwNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgUG9zdGZpeFJlc29sdmVOb2RlIDogcHVibGljIFByZVBv
c3RSZXNvbHZlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBQb3N0Zml4UmVzb2x2ZU5vZGUo
SlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIFBv
c3RmaXhSZXNvbHZlTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjA5LDcgKzYxNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUG9zdGZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgUG9zdGZpeEJyYWNrZXROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBPcGVyYXRvciwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAg
ICAgICBQb3N0Zml4QnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVz
c2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKTsKQEAgLTYyMSw3ICs2MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFBvc3RmaXhEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdGZpeERv
dE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpOworICAgICAgICBQb3N0Zml4RG90Tm9kZShpbnQsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTYzMyw3ICs2MzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIFBvc3RmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAg
ICBQb3N0Zml4RXJyb3JOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0
b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0KTsKKyAgICAgICAgUG9zdGZpeEVycm9yTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiwgT3Bl
cmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY0NCw3
ICs2NDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZVJlc29sdmVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwg
Y29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoaW50LCBjb25z
dCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtNjU0LDcgKzY1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRlQnJh
Y2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVCcmFja2V0Tm9kZShKU0dsb2Jh
bERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OworICAgICAgICBEZWxldGVCcmFja2V0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02NjUsNyArNjcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBEZWxldGVEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlRG90Tm9kZShKU0ds
b2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAg
ICAgICAgRGVsZXRlRG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjc2
LDcgKzY4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRlVmFsdWVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZVZh
bHVlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBEZWxldGVW
YWx1ZU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwpAQCAtNjg2LDcgKzY5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgVm9pZE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgVm9pZE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAg
Vm9pZE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwpAQCAtNjk2LDcgKzcwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgVHlwZU9mUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgVHlwZU9mUmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRl
bnRpZmllciYpOworICAgICAgICBUeXBlT2ZSZXNvbHZlTm9kZShpbnQsIGNvbnN0IElkZW50aWZp
ZXImKTsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudDsgfQogCkBAIC03MDgsNyArNzEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBUeXBlT2ZWYWx1ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgVHlwZU9mVmFsdWVOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Np
b25Ob2RlKik7CisgICAgICAgIFR5cGVPZlZhbHVlTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03MTgsNyArNzIzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcmVmaXhSZXNvbHZlTm9kZSA6IHB1Ymxp
YyBQcmVQb3N0UmVzb2x2ZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJlZml4UmVzb2x2
ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAg
ICAgIFByZWZpeFJlc29sdmVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1
bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03MjgsNyArNzMzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcmVmaXhCcmFja2V0Tm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRh
dGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJlZml4QnJhY2tldE5vZGUoSlNHbG9iYWxEYXRh
KiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJh
dG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCk7CisgICAgICAgIFByZWZpeEJyYWNrZXROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03NDAsNyArNzQ1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBQcmVmaXhEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBw
dWJsaWMgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgot
ICAgICAgICBQcmVmaXhEb3ROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUHJlZml4RG90Tm9kZShp
bnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTc1Miw3ICs3NTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByZWZpeEVycm9yTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFByZWZpeEVycm9yTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9k
ZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CisgICAgICAgIFByZWZpeEVycm9yTm9kZShpbnQsIEV4cHJlc3Npb25O
b2RlKiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTc2Myw3ICs3NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFVuYXJ5T3BO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFVuYXJ5
T3BOb2RlKEpTR2xvYmFsRGF0YSosIFJlc3VsdFR5cGUsIEV4cHJlc3Npb25Ob2RlKiwgT3Bjb2Rl
SUQpOworICAgICAgICBVbmFyeU9wTm9kZShpbnQsIFJlc3VsdFR5cGUsIEV4cHJlc3Npb25Ob2Rl
KiwgT3Bjb2RlSUQpOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBFeHByZXNzaW9uTm9kZSog
ZXhwcigpIHsgcmV0dXJuIG1fZXhwcjsgfQpAQCAtNzgwLDcgKzc4NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgVW5hcnlQbHVzTm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBVbmFyeVBsdXNOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Np
b25Ob2RlKik7CisgICAgICAgIFVuYXJ5UGx1c05vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBFeHByZXNzaW9uTm9kZSogc3RyaXBVbmFy
eVBsdXMoKSB7IHJldHVybiBleHByKCk7IH0KQEAgLTc4OCwxNyArNzkzLDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgTmVnYXRlTm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBOZWdhdGVOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25O
b2RlKik7CisgICAgICAgIE5lZ2F0ZU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogICAgIH07
CiAKICAgICBjbGFzcyBCaXR3aXNlTm90Tm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7CiAgICAg
cHVibGljOgotICAgICAgICBCaXR3aXNlTm90Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9u
Tm9kZSopOworICAgICAgICBCaXR3aXNlTm90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CiAg
ICAgfTsKIAogICAgIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIFVuYXJ5T3BOb2RlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIExvZ2ljYWxOb3ROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJl
c3Npb25Ob2RlKik7CisgICAgICAgIExvZ2ljYWxOb3ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUq
KTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VU
YXJnZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFuc1RydWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSBjb25zdCB7IHJldHVybiBleHByKCktPmhhc0Nv
bmRpdGlvbkNvbnRleHRDb2RlZ2VuKCk7IH0KQEAgLTgwNiw4ICs4MTEsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIEJpbmFyeU9wTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgICAgcHVibGljOgotICAgICAgICBCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlELCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpOwotICAgICAgICBCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiwg
UmVzdWx0VHlwZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IE9wY29kZUlELCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBCaW5hcnlPcE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bj
b2RlSUQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIEJpbmFyeU9wTm9kZShp
bnQsIFJlc3VsdFR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBPcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0U3RyY2F0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRlc3RpbmF0aW9uLCBSZWdpc3RlcklEKiBsaHMgPSAwLCBSZWFkTW9kaWZ5UmVzb2x2ZU5v
ZGUqIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lID0gMCk7CiAKQEAgLTgzMSw3MiArODM2LDcyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTXVsdE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BO
b2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE11bHROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpOworICAgICAgICBNdWx0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07
CiAKICAgICBjbGFzcyBEaXZOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBEaXZOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAg
ICBEaXZOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIE1vZE5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1vZE5vZGUo
SlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIE1vZE5vZGUoaW50LCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAgY2xhc3MgQWRkTm9kZSA6IHB1YmxpYyBCaW5hcnlP
cE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQWRkTm9kZShKU0dsb2JhbERhdGEqLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICAgICAgQWRkTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0FkZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB9Owog
CiAgICAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU3ViTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAg
U3ViTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1
YnRyYWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIH07CiAKICAgICBjbGFzcyBMZWZ0
U2hpZnROb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBM
ZWZ0U2hpZnROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBMZWZ0
U2hpZnROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIFJpZ2h0
U2hpZnROb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBS
aWdodFNoaWZ0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgUmln
aHRTaGlmdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAgY2xhc3MgVW5z
aWduZWRSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKKyAgICAgICAgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
OwogICAgIH07CiAKICAgICBjbGFzcyBMZXNzTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgTGVzc05vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cyk7CisgICAgICAgIExlc3NOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAg
IGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgot
ICAgICAgICBHcmVhdGVyTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAg
ICAgR3JlYXRlck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAgY2xhc3Mg
TGVzc0VxTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
TGVzc0VxTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgTGVzc0Vx
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBHcmVhdGVyRXFO
b2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBHcmVhdGVy
RXFOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBHcmVhdGVyRXFO
b2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIFRocm93YWJsZUJp
bmFyeU9wTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBUaHJvd2FibGVCaW5hcnlPcE5vZGUoSlNH
bG9iYWxEYXRhKiwgUmVzdWx0VHlwZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIE9wY29kZUlELCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwotICAgICAg
ICBUaHJvd2FibGVCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlELCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOworICAgICAgICBUaHJvd2FibGVCaW5hcnlPcE5vZGUoaW50LCBSZXN1bHRUeXBlLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIFRocm93YWJsZUJpbmFyeU9wTm9kZShp
bnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNvZGVJ
RCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKQEAgLTkwNCw3ICs5MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAg
ICBjbGFzcyBJbnN0YW5jZU9mTm9kZSA6IHB1YmxpYyBUaHJvd2FibGVCaW5hcnlPcE5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgSW5zdGFuY2VPZk5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CisgICAgICAgIEluc3RhbmNlT2ZOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC05MTIsMTIgKzkxNywxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEluTm9kZSA6IHB1YmxpYyBUaHJvd2FibGVC
aW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgSW5Ob2RlKEpTR2xvYmFsRGF0YSos
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworICAgICAgICBJbk5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhw
cjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAg
ICB9OwogCiAgICAgY2xhc3MgRXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAg
cHVibGljOgotICAgICAgICBFcXVhbE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CisgICAgICAgIEVxdWFsTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTI1LDEyICs5MzAsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBOb3RFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIE5vdEVxdWFsTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKKyAgICAgICAgTm90RXF1YWxOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsK
IAogICAgIGNsYXNzIFN0cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgU3RyaWN0RXF1YWxOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOworICAgICAgICBTdHJpY3RFcXVhbE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhw
cjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTkzOCwyOCArOTQzLDI4IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTm90U3RyaWN0RXF1YWxOb2RlIDogcHVibGlj
IEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBOb3RTdHJpY3RFcXVhbE5vZGUo
SlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIE5vdFN0cmljdEVxdWFsTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBCaXRBbmROb2RlIDog
cHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBCaXRBbmROb2RlKEpT
R2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBCaXRBbmROb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIEJpdE9yTm9kZSA6IHB1YmxpYyBCaW5h
cnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQml0T3JOb2RlKEpTR2xvYmFsRGF0YSos
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworICAgICAgICBCaXRPck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
ICAgICB9OwogCiAgICAgY2xhc3MgQml0WE9yTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQml0WE9yTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKKyAgICAgICAgQml0WE9yTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07CiAK
ICAgICAvLyBtX2V4cHIxICYmIG1fZXhwcjIsIG1fZXhwcjEgfHwgbV9leHByMgogICAgIGNsYXNz
IExvZ2ljYWxPcE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgTG9naWNhbE9wTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgTG9naWNhbE9wZXJhdG9yKTsKKyAgICAgICAgTG9naWNh
bE9wTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBMb2dpY2FsT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
OwpAQCAtOTc0LDcgKzk3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIFRoZSB0ZXJuYXJ5
IG9wZXJhdG9yLCAibV9sb2dpY2FsID8gbV9leHByMSA6IG1fZXhwcjIiCiAgICAgY2xhc3MgQ29u
ZGl0aW9uYWxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIENvbmRpdGlvbmFsTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogbG9naWNh
bCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOworICAgICAg
ICBDb25kaXRpb25hbE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogbG9naWNhbCwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTg2LDcgKzk5MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgUmVhZE1vZGlmeVJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
LCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAg
UmVhZE1vZGlmeVJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImLCBP
cGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCk7CisgICAgICAgIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXIm
LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDAwLDcg
KzEwMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFzc2lnblJlc29sdmVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwg
Y29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUoaW50LCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAxMyw3ICsxMDE4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tldE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7
CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUoSlNHbG9iYWxEYXRh
KiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJh
dG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
T3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25t
ZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMDI4LDcgKzEwMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWdu
QnJhY2tldE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Np
b25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRI
YXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIEFzc2ln
bkJyYWNrZXROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBz
dWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25t
ZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMDQyLDcgKzEwNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEFzc2lnbkRvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NpZ25Eb3RO
b2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
JiwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAg
ICAgICAgQXNzaWduRG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMs
IHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwNTUsNyArMTA2
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeURvdE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7
CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5RG90Tm9kZShKU0dsb2JhbERhdGEqLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHByZXNz
aW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBSZWFk
TW9kaWZ5RG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
JiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDY5LDcg
KzEwNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFzc2lnbkVycm9yTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2lnbkVycm9yTm9kZShKU0dsb2JhbERhdGEqLCBFeHBy
ZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAg
ICAgICBBc3NpZ25FcnJvck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3Is
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtMTA4Myw3ICsxMDg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBDb21tYU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBQYXJzZXJBcmVuYURl
bGV0YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBDb21tYU5vZGUoSlNHbG9iYWxEYXRhKiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOworICAgICAgICBD
b21tYU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
Mik7CiAKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldzsK
IApAQCAtMTA5OCw3ICsxMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3Mg
Q29uc3REZWNsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBDb25zdERlY2xOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImLCBFeHBy
ZXNzaW9uTm9kZSopOworICAgICAgICBDb25zdERlY2xOb2RlKGludCwgY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25Ob2RlKik7CiAKICAgICAgICAgYm9vbCBoYXNJbml0aWFsaXplcigpIGNv
bnN0IHsgcmV0dXJuIG1faW5pdDsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgp
IHsgcmV0dXJuIG1faWRlbnQ7IH0KQEAgLTExMTgsNyArMTEyMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQ29uc3RTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgQ29uc3RTdGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0YSos
IENvbnN0RGVjbE5vZGUqIG5leHQpOworICAgICAgICBDb25zdFN0YXRlbWVudE5vZGUoaW50LCBD
b25zdERlY2xOb2RlKiBuZXh0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KTsKQEAgLTExMjgsNyArMTEzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU291
cmNlRWxlbWVudHMgOiBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU291cmNlRWxlbWVudHMoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIFNvdXJjZUVs
ZW1lbnRzKCk7CiAKICAgICAgICAgdm9pZCBhcHBlbmQoU3RhdGVtZW50Tm9kZSopOwogCkBAIC0x
MTQzLDcgKzExNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJsb2NrTm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJsb2NrTm9kZShK
U0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyogPSAwKTsKKyAgICAgICAgQmxvY2tOb2RlKGlu
dCwgU291cmNlRWxlbWVudHMqID0gMCk7CiAKICAgICAgICAgU3RhdGVtZW50Tm9kZSogc2luZ2xl
U3RhdGVtZW50KCkgY29uc3Q7CiAgICAgICAgIFN0YXRlbWVudE5vZGUqIGxhc3RTdGF0ZW1lbnQo
KSBjb25zdDsKQEAgLTExNTgsNyArMTE2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgRW1wdHlTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgRW1wdHlTdGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0YSopOworICAgICAgICBF
bXB0eVN0YXRlbWVudE5vZGUoaW50KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTExNjgsNyArMTE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNs
YXNzIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqKTsKKyAg
ICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKGludCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTExNzYsNyArMTE4MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgRXhwclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9k
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBFeHByU3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEq
LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBFeHByU3RhdGVtZW50Tm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKik7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJl
dHVybiBtX2V4cHI7IH0KIApAQCAtMTE5MCw3ICsxMTk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgVmFyU3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNz
aW9uTm9kZSopOyAgICAgICAgCisgICAgICAgIFZhclN0YXRlbWVudE5vZGUoaW50LCBFeHByZXNz
aW9uTm9kZSopOyAgICAgICAgCiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC0xMjAwLDcgKzEyMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElmTm9k
ZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIElmTm9kZShK
U0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiBp
ZkJsb2NrKTsKKyAgICAgICAgSWZOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwg
U3RhdGVtZW50Tm9kZSogaWZCbG9jayk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTEyMTEsNyArMTIxNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgSWZFbHNlTm9kZSA6IHB1YmxpYyBJZk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgSWZF
bHNlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1l
bnROb2RlKiBpZkJsb2NrLCBTdGF0ZW1lbnROb2RlKiBlbHNlQmxvY2spOworICAgICAgICBJZkVs
c2VOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogaWZC
bG9jaywgU3RhdGVtZW50Tm9kZSogZWxzZUJsb2NrKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKTsKQEAgLTEyMjEsNyArMTIyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgRG9XaGlsZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBEb1doaWxlTm9kZShKU0dsb2JhbERhdGEqLCBTdGF0ZW1lbnROb2RlKiBzdGF0
ZW1lbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIERvV2hpbGVOb2RlKGludCwgU3RhdGVt
ZW50Tm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC0xMjMyLDcgKzEyMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFdoaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFdoaWxlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5v
ZGUqIHN0YXRlbWVudCk7CisgICAgICAgIFdoaWxlTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiwg
U3RhdGVtZW50Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTI0Myw3ICsxMjQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGb3JOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRm9yTm9kZShK
U0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIzLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGJvb2wg
ZXhwcjFXYXNWYXJEZWNsKTsKKyAgICAgICAgRm9yTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBFeHByZXNzaW9uTm9kZSogZXhwcjMsIFN0YXRl
bWVudE5vZGUqLCBib29sIGV4cHIxV2FzVmFyRGVjbCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMjU3LDggKzEyNjIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRm9ySW5Ob2RlKEpTR2xv
YmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2Rl
Kik7Ci0gICAgICAgIEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwg
RXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBpbnQgZGl2
b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgICAgIEZvckluTm9kZShK
U0dsb2JhbERhdGEqLCBpbnQsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0
ZW1lbnROb2RlKik7CisgICAgICAgIEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIGNvbnN0
IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50
Tm9kZSosIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyNzMsOCArMTI3OCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29udGludWVOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAg
ICAgICBDb250aW51ZU5vZGUoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIENvbnRpbnVlTm9kZShK
U0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIENvbnRpbnVlTm9kZShK
U0dsb2JhbERhdGEqLCBpbnQpOworICAgICAgICBDb250aW51ZU5vZGUoaW50LCBjb25zdCBJZGVu
dGlmaWVyJik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTEyODQsOCArMTI4OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQnJlYWtO
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YSB7CiAgICAgcHVibGljOgotICAgICAgICBCcmVha05vZGUoSlNHbG9iYWxEYXRhKik7Ci0gICAg
ICAgIEJyZWFrTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAg
IEJyZWFrTm9kZShKU0dsb2JhbERhdGEqLCBpbnQpOworICAgICAgICBCcmVha05vZGUoaW50LCBj
b25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTEyOTUsNyArMTMwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgUmV0dXJuTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmV0dXJuTm9kZShKU0dsb2JhbERh
dGEqLCBFeHByZXNzaW9uTm9kZSogdmFsdWUpOworICAgICAgICBSZXR1cm5Ob2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIHZhbHVlKTsKIAogICAgICAgICBFeHByZXNzaW9uTm9kZSogdmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlOyB9CiAKQEAgLTEzMDksNyArMTMxNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBXaXRoTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSosIFN0
YXRlbWVudE5vZGUqLCB1aW50MzJfdCBkaXZvdCwgdWludDMyX3QgZXhwcmVzc2lvbkxlbmd0aCk7
CisgICAgICAgIFdpdGhOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwg
dWludDMyX3QgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTMyMiw3ICsxMzI3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBMYWJlbE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVi
bGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExhYmVs
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBTdGF0ZW1lbnROb2Rl
Kik7CisgICAgICAgIExhYmVsTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFN0YXRl
bWVudE5vZGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEz
MzMsNyArMTMzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVGhyb3dOb2RlIDog
cHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAg
ICAgcHVibGljOgotICAgICAgICBUaHJvd05vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5v
ZGUqKTsKKyAgICAgICAgVGhyb3dOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEzNDMsNyArMTM0OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgVHJ5Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFRyeU5vZGUoSlNHbG9iYWxEYXRhKiwgU3RhdGVtZW50Tm9k
ZSogdHJ5QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGV4Y2VwdGlvbklkZW50LCBib29sIGNhdGNo
SGFzRXZhbCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxs
eUJsb2NrKTsKKyAgICAgICAgVHJ5Tm9kZShpbnQsIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBj
b25zdCBJZGVudGlmaWVyJiBleGNlcHRpb25JZGVudCwgYm9vbCBjYXRjaEhhc0V2YWwsIFN0YXRl
bWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMzU3LDggKzEzNjIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBwdWJsaWMgUGFyc2Vy
QXJlbmFGcmVlYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBQYXJhbWV0ZXJOb2RlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUGFyYW1ldGVyTm9kZShKU0ds
b2JhbERhdGEqLCBQYXJhbWV0ZXJOb2RlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBQ
YXJhbWV0ZXJOb2RlKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgUGFyYW1ldGVyTm9kZShQ
YXJhbWV0ZXJOb2RlKiwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQogICAgICAgICBQYXJhbWV0
ZXJOb2RlKiBuZXh0UGFyYW0oKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KQEAgLTEzODksOCAr
MTM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3Rh
Y2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNjb3BlTm9kZShKU0ds
b2JhbERhdGEqLCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgYm9vbCBpblN0
cmljdENvbnRleHQpOworICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBjb25z
dCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sq
LCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAg
ICAgICB1c2luZyBQYXJzZXJBcmVuYVJlZkNvdW50ZWQ6Om9wZXJhdG9yIG5ldzsKIApAQCAtMTQ0
MiwxMiArMTQ0NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBQcm9ncmFtTm9kZSA6
IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJv
Z3JhbU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNr
KiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UHJvZ3JhbU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwg
VmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFs
RGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJ
ZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDU1LDEyICsx
NDYwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNj
b3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0
aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3Jl
YXRlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0
YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3Jl
YXRlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0
aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJ
c0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShKU0ds
b2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgRXZhbE5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CiAgICAgfTsKQEAgLTE0NzcsOCArMTQ4Miw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gdHJ1ZTsK
LSAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBi
b29sIGlzU3RyaWN0TW9kZSk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9k
eU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5v
ZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIGJvb2wgaXNTdHJpY3RNb2RlKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0
YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9CkBAIC0xNDkzLDgg
KzE0OTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Nv
cGVJc0Z1bmN0aW9uID0gdHJ1ZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uQm9k
eU5vZGUoSlNHbG9iYWxEYXRhKiwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBGdW5j
dGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBG
dW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xv
YmFsRGF0YSosIGludCwgYm9vbCBpblN0cmljdENvbnRleHQpOworICAgICAgICBGdW5jdGlvbkJv
ZHlOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1
bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50Owog
ICAgICAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CkBAIC0xNTAy
LDcgKzE1MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmNFeHByTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jRXhwck5v
ZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqIGJv
ZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVyID0g
MCk7CisgICAgICAgIEZ1bmNFeHByTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlv
bkJvZHlOb2RlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqID0gMCk7CiAKICAg
ICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSgpIHsgcmV0dXJuIG1fYm9keTsgfQogCkBAIC0x
NTE2LDcgKzE1MjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmNEZWNsTm9k
ZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmNEZWNs
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSos
IGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKiA9IDApOworICAgICAgICBGdW5jRGVj
bE5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKiA9IDApOwogCiAgICAgICAgIEZ1bmN0aW9uQm9keU5v
ZGUqIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KIApAQCAtMTUyOCw3ICsxNTMzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDYXNlQ2xhdXNlTm9kZSA6IHB1YmxpYyBQYXJzZXJB
cmVuYUZyZWVhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENhc2VDbGF1c2VOb2RlKEpTR2xv
YmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiwgU291cmNlRWxlbWVudHMqID0gMCk7CisgICAgICAg
IENhc2VDbGF1c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiwgU291cmNlRWxlbWVudHMqID0gMCk7CiAK
ICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0K
IApAQCAtMTU0MSw4ICsxNTQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDbGF1
c2VMaXN0Tm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIENsYXVzZUxpc3ROb2RlKEpTR2xvYmFsRGF0YSosIENhc2VDbGF1c2VOb2RlKik7Ci0g
ICAgICAgIENsYXVzZUxpc3ROb2RlKEpTR2xvYmFsRGF0YSosIENsYXVzZUxpc3ROb2RlKiwgQ2Fz
ZUNsYXVzZU5vZGUqKTsKKyAgICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2FzZUNsYXVzZU5vZGUqKTsK
KyAgICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlzdE5vZGUqLCBDYXNlQ2xhdXNlTm9kZSop
OwogCiAgICAgICAgIENhc2VDbGF1c2VOb2RlKiBnZXRDbGF1c2UoKSBjb25zdCB7IHJldHVybiBt
X2NsYXVzZTsgfQogICAgICAgICBDbGF1c2VMaXN0Tm9kZSogZ2V0TmV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fbmV4dDsgfQpAQCAtMTU1NCw3ICsxNTU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBDYXNlQmxvY2tOb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgQ2FzZUJsb2NrTm9kZShKU0dsb2JhbERhdGEqLCBDbGF1c2VMaXN0
Tm9kZSogbGlzdDEsIENhc2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9k
ZSogbGlzdDIpOworICAgICAgICBDYXNlQmxvY2tOb2RlKENsYXVzZUxpc3ROb2RlKiBsaXN0MSwg
Q2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2UsIENsYXVzZUxpc3ROb2RlKiBsaXN0Mik7CiAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlRm9yQmxvY2soQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiBpbnB1dCwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwogCkBAIC0x
NTY3LDcgKzE1NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN3aXRjaE5vZGUg
OiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBTd2l0Y2hOb2Rl
KEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiwgQ2FzZUJsb2NrTm9kZSopOworICAgICAg
ICBTd2l0Y2hOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqLCBDYXNlQmxvY2tOb2RlKik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDMgKzIzLDkx
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAKKyNpbmNsdWRl
ICJBU1RCdWlsZGVyLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGVidWdn
ZXIuaCIKLSNpbmNsdWRlICJKU1BhcnNlci5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgog
I2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTm9kZUluZm8uaCIKKyNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgiCisjaW5j
bHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorCit1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBQYXJzZXI6OnBhcnNlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBK
U1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIG1vZGUsIGludCogZXJy
TGluZSwgVVN0cmluZyogZXJyTXNnKQorUGFyc2VyOjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFy
YW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3NvdXJjZSgm
c291cmNlKQorICAgICwgbV9zdGFjayhnbG9iYWxEYXRhLT5zdGFjaygpKQorICAgICwgbV9lcnJv
cihmYWxzZSkKKyAgICAsIG1fZXJyb3JNZXNzYWdlKCJQYXJzZSBlcnJvciIpCisgICAgLCBtX2Fs
bG93c0luKHRydWUpCisgICAgLCBtX2xhc3RMaW5lKDApCisgICAgLCBtX2xhc3RUb2tlbkVuZCgw
KQorICAgICwgbV9hc3NpZ25tZW50Q291bnQoMCkKKyAgICAsIG1fbm9uTEhTQ291bnQoMCkKKyAg
ICAsIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZChzb3VyY2UucHJvdmlkZXIoKS0+aXNWYWxpZCgp
KQorICAgICwgbV9zdGF0ZW1lbnREZXB0aCgwKQorICAgICwgbV9ub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50KDApCisgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCisgICAgLCBtX3NvdXJjZUVsZW1l
bnRzKDApCiB7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEpOwotICAgIG1fc291cmNlRWxlbWVudHMg
PSAwOwotCi0gICAgaW50IGRlZmF1bHRFcnJMaW5lOwotICAgIFVTdHJpbmcgZGVmYXVsdEVyck1z
ZzsKKyAgICBtX2xleGVyID0gbmV3IExleGVyKGdsb2JhbERhdGEpOworICAgIG1fYXJlbmEgPSBt
X2dsb2JhbERhdGEtPnBhcnNlckFyZW5hOworICAgIG1fbGV4ZXItPnNldENvZGUoc291cmNlLCBt
X2FyZW5hKTsKIAotICAgIGlmICghZXJyTGluZSkKLSAgICAgICAgZXJyTGluZSA9ICZkZWZhdWx0
RXJyTGluZTsKLSAgICBpZiAoIWVyck1zZykKLSAgICAgICAgZXJyTXNnID0gJmRlZmF1bHRFcnJN
c2c7Ci0KLSAgICAqZXJyTGluZSA9IC0xOwotICAgICplcnJNc2cgPSBVU3RyaW5nKCk7Ci0KLSAg
ICBMZXhlciYgbGV4ZXIgPSAqZ2xvYmFsRGF0YS0+bGV4ZXI7Ci0gICAgbGV4ZXIuc2V0Q29kZSgq
bV9zb3VyY2UsIG1fYXJlbmEpOwotCi0gICAgVVN0cmluZyBwYXJzZUVycm9yID0ganNQYXJzZShn
bG9iYWxEYXRhLCBwYXJhbWV0ZXJzLCBzdHJpY3RuZXNzLCBtb2RlLCBtX3NvdXJjZSk7Ci0gICAg
aW50IGxpbmVOdW1iZXIgPSBsZXhlci5saW5lTnVtYmVyKCk7Ci0gICAgYm9vbCBsZXhFcnJvciA9
IGxleGVyLnNhd0Vycm9yKCk7Ci0gICAgVVN0cmluZyBsZXhFcnJvck1lc3NhZ2UgPSBsZXhFcnJv
ciA/IGxleGVyLmdldEVycm9yTWVzc2FnZSgpIDogVVN0cmluZygpOwotICAgIEFTU0VSVChsZXhF
cnJvck1lc3NhZ2UuaXNOdWxsKCkgIT0gbGV4RXJyb3IpOwotICAgIGxleGVyLmNsZWFyKCk7Ci0K
LSAgICBpZiAoIXBhcnNlRXJyb3IuaXNOdWxsKCkgfHwgbGV4RXJyb3IpIHsKLSAgICAgICAgKmVy
ckxpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICAqZXJyTXNnID0gIWxleEVycm9yTWVzc2FnZS5p
c051bGwoKSA/IGxleEVycm9yTWVzc2FnZSA6IHBhcnNlRXJyb3I7Ci0gICAgICAgIG1fc291cmNl
RWxlbWVudHMgPSAwOworICAgIG1fZnVuY3Rpb25DYWNoZSA9IHNvdXJjZS5wcm92aWRlcigpLT5j
YWNoZSgpOworICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CisgICAgaWYgKHBhcnNl
ck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKKyAgICAgICAgc2NvcGUtPnNldElzRnVuY3Rp
b24oKTsKKyAgICBpZiAoc3RyaWN0bmVzcyA9PSBKU1BhcnNlU3RyaWN0KQorICAgICAgICBzY29w
ZS0+c2V0U3RyaWN0TW9kZSgpOworICAgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykKKyAgICAgICAgICAg
IHNjb3BlLT5kZWNsYXJlUGFyYW1ldGVyKCZwYXJhbWV0ZXJzLT5hdChpKSk7CiAgICAgfQorICAg
IG5leHQoKTsKKyAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcih0b2tlbkxpbmUoKSk7Cit9
CisKK1BhcnNlcjo6flBhcnNlcigpCit7Cit9CisKKworVVN0cmluZyBQYXJzZXI6OnBhcnNlSW5u
ZXIoKQoreworICAgIFVTdHJpbmcgcGFyc2VFcnJvciA9IFVTdHJpbmcoKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBvbGRGdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVuY3Rp
b25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7CisgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nh
c3Q8SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4o
bV9zb3VyY2UpKTsKKyAgICBpZiAobV9sZXhlci0+aXNSZXBhcnNpbmcoKSkKKyAgICAgICAgbV9z
dGF0ZW1lbnREZXB0aC0tOworICAgIFNjb3BlUmVmIHNjb3BlID0gY3VycmVudFNjb3BlKCk7Cisg
ICAgU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50czxD
aGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQpOworICAgIGlmICghc291cmNlRWxlbWVudHMgfHwg
IWNvbnN1bWUoRU9GVE9LKSkKKyAgICAgICAgcGFyc2VFcnJvciA9IG1fZXJyb3JNZXNzYWdlOwor
CisgICAgSWRlbnRpZmllclNldCBjYXB0dXJlZFZhcmlhYmxlczsKKyAgICBzY29wZS0+Z2V0Q2Fw
dHVyZWRWYXJpYWJsZXMoY2FwdHVyZWRWYXJpYWJsZXMpOworICAgIENvZGVGZWF0dXJlcyBmZWF0
dXJlcyA9IGNvbnRleHQuZmVhdHVyZXMoKTsKKyAgICBpZiAoc2NvcGUtPnN0cmljdE1vZGUoKSkK
KyAgICAgICAgZmVhdHVyZXMgfD0gU3RyaWN0TW9kZUZlYXR1cmU7CisgICAgaWYgKHNjb3BlLT5z
aGFkb3dzQXJndW1lbnRzKCkpCisgICAgICAgIGZlYXR1cmVzIHw9IFNoYWRvd3NBcmd1bWVudHNG
ZWF0dXJlOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uQ2FjaGVTaXplID0gbV9mdW5jdGlvbkNhY2hl
ID8gbV9mdW5jdGlvbkNhY2hlLT5ieXRlU2l6ZSgpIDogMDsKKyAgICBpZiAoZnVuY3Rpb25DYWNo
ZVNpemUgIT0gb2xkRnVuY3Rpb25DYWNoZVNpemUpCisgICAgICAgIG1fbGV4ZXItPnNvdXJjZVBy
b3ZpZGVyKCktPm5vdGlmeUNhY2hlU2l6ZUNoYW5nZWQoZnVuY3Rpb25DYWNoZVNpemUgLSBvbGRG
dW5jdGlvbkNhY2hlU2l6ZSk7CisKKyAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRz
LCBjb250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwg
ZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNv
bnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcyk7CisKKyAgICByZXR1cm4gcGFyc2VFcnJvcjsK
IH0KIAogdm9pZCBQYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJj
ZUVsZW1lbnRzLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiog
dmFyU3RhY2ssIApAQCAtNzQsNCArMTIyLDE0OTkgQEAgdm9pZCBQYXJzZXI6OmRpZEZpbmlzaFBh
cnNpbmcoU291cmNlRWxlbQogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOwogfQog
Citib29sIFBhcnNlcjo6YWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQoreworICAgIHJldHVybiBt
YXRjaChDTE9TRUJSQUNFKSB8fCBtYXRjaChFT0ZUT0spIHx8IG1fbGV4ZXItPnByZXZUZXJtaW5h
dG9yKCk7Cit9CisKK3RlbXBsYXRlIDxQYXJzZXI6OlNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjo6cGFyc2VTb3VyY2VF
bGVtZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBUcmVlU291cmNlRWxlbWVudHMg
c291cmNlRWxlbWVudHMgPSBjb250ZXh0LmNyZWF0ZVNvdXJjZUVsZW1lbnRzKCk7CisgICAgYm9v
bCBzZWVuTm9uRGlyZWN0aXZlID0gZmFsc2U7CisgICAgY29uc3QgSWRlbnRpZmllciogZGlyZWN0
aXZlID0gMDsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1fdG9rZW4ubV9pbmZvLnN0YXJ0
T2Zmc2V0OworICAgIHVuc2lnbmVkIG9sZExhc3RMaW5lTnVtYmVyID0gbV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKTsKKyAgICB1bnNpZ25lZCBvbGRMaW5lTnVtYmVyID0gbV9sZXhlci0+bGluZU51
bWJlcigpOworICAgIGJvb2wgaGFzU2V0U3RyaWN0ID0gZmFsc2U7CisgICAgd2hpbGUgKFRyZWVT
dGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgZGlyZWN0aXZlKSkg
eworICAgICAgICBpZiAobW9kZSA9PSBDaGVja0ZvclN0cmljdE1vZGUgJiYgIXNlZW5Ob25EaXJl
Y3RpdmUpIHsKKyAgICAgICAgICAgIGlmIChkaXJlY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWhhc1NldFN0cmljdCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVzZVN0cmlj
dElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICBzZXRTdHJp
Y3RNb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGhhc1NldFN0cmljdCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlzVmFsaWRTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXItPnNldExhc3RM
aW5lTnVtYmVyKG9sZExhc3RMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sZXhl
ci0+c2V0TGluZU51bWJlcihvbGRMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgZmFp
bElmVHJ1ZShtX2Vycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2Vlbk5vbkRp
cmVjdGl2ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5hcHBlbmRTdGF0ZW1l
bnQoc291cmNlRWxlbWVudHMsIHN0YXRlbWVudCk7CisgICAgfQorICAgIAorICAgIGlmIChtX2Vy
cm9yKQorICAgICAgICBmYWlsKCk7CisgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOworfQorCit0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVZh
ckRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChW
QVIpKTsKKyAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKKyAgICBpbnQgZW5kID0gMDsKKyAg
ICBpbnQgc2NyYXRjaDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBzY3JhdGNoMSA9IDA7CisgICAg
VHJlZUV4cHJlc3Npb24gc2NyYXRjaDIgPSAwOworICAgIGludCBzY3JhdGNoMyA9IDA7CisgICAg
VHJlZUV4cHJlc3Npb24gdmFyRGVjbHMgPSBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChjb250ZXh0
LCBzY3JhdGNoLCBzY3JhdGNoMSwgc2NyYXRjaDIsIHNjcmF0Y2gzLCBzY3JhdGNoMywgc2NyYXRj
aDMpOworICAgIGZhaWxJZlRydWUobV9lcnJvcik7CisgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlD
b2xvbigpKTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVWYXJTdGF0ZW1lbnQobV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdmFyRGVjbHMsIHN0YXJ0LCBlbmQpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUNvbnN0
RGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKENP
TlNUVE9LRU4pKTsKKyAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKKyAgICBpbnQgZW5kID0g
MDsKKyAgICBUcmVlQ29uc3REZWNsTGlzdCBjb25zdERlY2xzID0gcGFyc2VDb25zdERlY2xhcmF0
aW9uTGlzdChjb250ZXh0KTsKKyAgICBmYWlsSWZUcnVlKG1fZXJyb3IpOworICAgIGZhaWxJZkZh
bHNlKGF1dG9TZW1pQ29sb24oKSk7CisgICAgCisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29u
c3RTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY29uc3REZWNscywgc3RhcnQs
IGVuZCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQ
YXJzZXI6OnBhcnNlRG9XaGlsZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAg
ICBBU1NFUlQobWF0Y2goRE8pKTsKKyAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Cisg
ICAgbmV4dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgc3RhcnRM
b29wKCk7CisgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250
ZXh0LCB1bnVzZWQpOworICAgIGVuZExvb3AoKTsKKyAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQp
OworICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgY29uc3VtZU9yRmFpbChXSElM
RSk7CisgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgIFRyZWVFeHByZXNzaW9uIGV4
cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UoZXhwcik7Cisg
ICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKKyAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkK
KyAgICAgICAgbmV4dCgpOyAvLyBBbHdheXMgcGVyZm9ybXMgYXV0b21hdGljIHNlbWljb2xvbiBp
bnNlcnRpb24uCisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRG9XaGlsZVN0YXRlbWVudChtX2xl
eGVyLT5sYXN0TGluZU51bWJlcigpLCBzdGF0ZW1lbnQsIGV4cHIsIHN0YXJ0TGluZSwgZW5kTGlu
ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJz
ZXI6OnBhcnNlV2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNT
RVJUKG1hdGNoKFdISUxFKSk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAg
IG5leHQoKTsKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7CisgICAgVHJlZUV4cHJlc3Np
b24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShleHBy
KTsKKyAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOworICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VQQVJFTik7CisgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKKyAgICBzdGFydExv
b3AoKTsKKyAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRl
eHQsIHVudXNlZCk7CisgICAgZW5kTG9vcCgpOworICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7
CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlV2hpbGVTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSwgZXhwciwgc3RhdGVtZW50LCBzdGFydExpbmUsIGVuZExpbmUpOworfQorCit0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VW
YXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25z
LCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRp
YWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpCit7
CisgICAgVHJlZUV4cHJlc3Npb24gdmFyRGVjbHMgPSAwOworICAgIGRvIHsKKyAgICAgICAgZGVj
bGFyYXRpb25zKys7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQp
OworICAgICAgICAKKyAgICAgICAgaW50IHZhclN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAg
ICBpZGVudFN0YXJ0ID0gdmFyU3RhcnQ7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUg
PSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbGFzdElkZW50ID0gbmFtZTsKKyAgICAg
ICAgbmV4dCgpOworICAgICAgICBib29sIGhhc0luaXRpYWxpemVyID0gbWF0Y2goRVFVQUwpOwor
ICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVWYXJp
YWJsZShuYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQiLCBuYW1lLT5pbXBs
KCksICJpbiBzdHJpY3QgbW9kZS4iKTsKKyAgICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgKGhh
c0luaXRpYWxpemVyIHx8ICghbV9hbGxvd3NJbiAmJiBtYXRjaChJTlRPS0VOKSkpID8gRGVjbGFy
YXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyIDogMCk7CisgICAgICAgIGlmIChoYXNJbml0aWFs
aXplcikgeworICAgICAgICAgICAgaW50IHZhckRpdm90ID0gdG9rZW5TdGFydCgpICsgMTsKKyAg
ICAgICAgICAgIGluaXRTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgICAgIG5leHQoVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOyAvLyBjb25zdW1lICc9JworICAgICAgICAgICAg
aW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50OworICAgICAgICAgICAg
VHJlZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNv
bnRleHQpOworICAgICAgICAgICAgaW5pdEVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgICAgICAg
ICAgbGFzdEluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CisgICAgICAgICAgICBmYWlsSWZGYWxz
ZShpbml0aWFsaXplcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9u
IG5vZGUgPSBjb250ZXh0LmNyZWF0ZUFzc2lnblJlc29sdmUobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgKm5hbWUsIGluaXRpYWxpemVyLCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25t
ZW50Q291bnQsIHZhclN0YXJ0LCB2YXJEaXZvdCwgbGFzdFRva2VuRW5kKCkpOworICAgICAgICAg
ICAgaWYgKCF2YXJEZWNscykKKyAgICAgICAgICAgICAgICB2YXJEZWNscyA9IG5vZGU7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFyRGVjbHMgPSBjb250ZXh0LmNvbWJpbmVD
b21tYU5vZGVzKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHZhckRlY2xzLCBub2RlKTsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKG1hdGNoKENPTU1BKSk7CisgICAgcmV0dXJuIHZhckRlY2xz
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBh
cnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sK
KyAgICBmYWlsSWZUcnVlKHN0cmljdE1vZGUoKSk7CisgICAgVHJlZUNvbnN0RGVjbExpc3QgY29u
c3REZWNscyA9IDA7CisgICAgVHJlZUNvbnN0RGVjbExpc3QgdGFpbCA9IDA7CisgICAgZG8gewor
ICAgICAgICBuZXh0KCk7CisgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICAgICAgY29u
c3QgSWRlbnRpZmllciogbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBuZXh0
KCk7CisgICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIgPSBtYXRjaChFUVVBTCk7CisgICAgICAg
IGRlY2xhcmVWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgRGVj
bGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQgfCAoaGFzSW5pdGlhbGl6ZXIgPyBEZWNsYXJhdGlv
blN0YWNrczo6SGFzSW5pdGlhbGl6ZXIgOiAwKSk7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIGlu
aXRpYWxpemVyID0gMDsKKyAgICAgICAgaWYgKGhhc0luaXRpYWxpemVyKSB7CisgICAgICAgICAg
ICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsgLy8gY29uc3VtZSAnPScKKyAg
ICAgICAgICAgIGluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICB0YWlsID0gY29udGV4dC5hcHBlbmRDb25zdERlY2wobV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdGFpbCwgbmFtZSwgaW5pdGlhbGl6ZXIpOworICAgICAg
ICBpZiAoIWNvbnN0RGVjbHMpCisgICAgICAgICAgICBjb25zdERlY2xzID0gdGFpbDsKKyAgICB9
IHdoaWxlIChtYXRjaChDT01NQSkpOworICAgIHJldHVybiBjb25zdERlY2xzOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUZvclN0
YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goRk9SKSk7
CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIG5leHQoKTsKKyAgICBjb25z
dW1lT3JGYWlsKE9QRU5QQVJFTik7CisgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3Vu
dDsKKyAgICBpbnQgZGVjbGFyYXRpb25zID0gMDsKKyAgICBpbnQgZGVjbHNTdGFydCA9IDA7Cisg
ICAgaW50IGRlY2xzRW5kID0gMDsKKyAgICBUcmVlRXhwcmVzc2lvbiBkZWNscyA9IDA7CisgICAg
Ym9vbCBoYXNEZWNsYXJhdGlvbiA9IGZhbHNlOworICAgIGlmIChtYXRjaChWQVIpKSB7CisgICAg
ICAgIC8qCisgICAgICAgICBmb3IgKHZhciBJREVOVCBpbiBleHByZXNzaW9uKSBzdGF0ZW1lbnQK
KyAgICAgICAgIGZvciAodmFyIElERU5UID0gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9uKSBzdGF0
ZW1lbnQKKyAgICAgICAgIGZvciAodmFyIHZhckRlY2xhcmF0aW9uTGlzdDsgZXhwcmVzc2lvbk9w
dDsgZXhwcmVzc2lvbk9wdCkKKyAgICAgICAgICovCisgICAgICAgIGhhc0RlY2xhcmF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogZm9ySW5UYXJnZXQgPSAwOworICAgICAg
ICBUcmVlRXhwcmVzc2lvbiBmb3JJbkluaXRpYWxpemVyID0gMDsKKyAgICAgICAgbV9hbGxvd3NJ
biA9IGZhbHNlOworICAgICAgICBpbnQgaW5pdFN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGluaXRF
bmQgPSAwOworICAgICAgICBkZWNscyA9IHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQs
IGRlY2xhcmF0aW9ucywgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGRlY2xzU3RhcnQs
IGluaXRTdGFydCwgaW5pdEVuZCk7CisgICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOworICAgICAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFJlbWFpbmRlciBvZiBhIHN0YW5kYXJkIGZvciBsb29wIGlzIGhhbmRsZWQgaWRlbnRpY2FsbHkK
KyAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpCisgICAgICAgICAgICBnb3RvIHN0YW5kYXJk
Rm9yTG9vcDsKKyAgICAgICAgCisgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmF0aW9ucyA9PSAx
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFyYXRp
b24KKyAgICAgICAgaW50IGluTG9jYXRpb24gPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIGNvbnN1
bWVPckZhaWwoSU5UT0tFTik7CisgICAgICAgIAorICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHBy
ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShleHByKTsK
KyAgICAgICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgCisgICAgICAg
IGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQ
QVJFTik7CisgICAgICAgIAorICAgICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwor
ICAgICAgICBzdGFydExvb3AoKTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBw
YXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOworICAgICAgICBlbmRMb29wKCk7CisgICAg
ICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGb3JJbkxvb3AobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZm9ySW5UYXJn
ZXQsIGZvckluSW5pdGlhbGl6ZXIsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgaW5Mb2Nh
dGlvbiwgZXhwckVuZCwgaW5pdFN0YXJ0LCBpbml0RW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIW1hdGNoKFNFTUlDT0xPTikpIHsKKyAgICAgICAgbV9hbGxv
d3NJbiA9IGZhbHNlOworICAgICAgICBkZWNsc1N0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAg
ICBkZWNscyA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgZGVjbHNFbmQgPSBs
YXN0VG9rZW5FbmQoKTsKKyAgICAgICAgbV9hbGxvd3NJbiA9IHRydWU7CisgICAgICAgIGZhaWxJ
ZkZhbHNlKGRlY2xzKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpIHsK
KyAgICBzdGFuZGFyZEZvckxvb3A6CisgICAgICAgIC8vIFN0YW5kYXJkIGZvciBsb29wCisgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gY29uZGl0aW9uID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGlmICghbWF0Y2goU0VNSUNPTE9OKSkgeworICAgICAgICAgICAgY29uZGl0
aW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgZmFpbElmRmFsc2Uo
Y29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdW1lT3JGYWlsKFNFTUlDT0xPTik7
CisgICAgICAgIAorICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbmNyZW1lbnQgPSAwOworICAgICAg
ICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7CisgICAgICAgICAgICBpbmNyZW1lbnQgPSBwYXJz
ZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgICAgICBmYWlsSWZGYWxzZShpbmNyZW1lbnQp
OworICAgICAgICB9CisgICAgICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgICAg
IGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHVu
dXNlZCA9IDA7CisgICAgICAgIHN0YXJ0TG9vcCgpOworICAgICAgICBUcmVlU3RhdGVtZW50IHN0
YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CisgICAgICAgIGVuZExv
b3AoKTsKKyAgICAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9yTG9vcChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBkZWNscywgY29u
ZGl0aW9uLCBpbmNyZW1lbnQsIHN0YXRlbWVudCwgaGFzRGVjbGFyYXRpb24sIHN0YXJ0TGluZSwg
ZW5kTGluZSk7CisgICAgfQorICAgIAorICAgIC8vIEZvci1pbiBsb29wCisgICAgZmFpbElmRmFs
c2Uobm9uTEhTQ291bnQgPT0gbV9ub25MSFNDb3VudCk7CisgICAgY29uc3VtZU9yRmFpbChJTlRP
S0VOKTsKKyAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQp
OworICAgIGZhaWxJZkZhbHNlKGV4cHIpOworICAgIGludCBleHByRW5kID0gbGFzdFRva2VuRW5k
KCk7CisgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBjb25zdW1lT3JGYWlsKENM
T1NFUEFSRU4pOworICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgc3RhcnRM
b29wKCk7CisgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250
ZXh0LCB1bnVzZWQpOworICAgIGVuZExvb3AoKTsKKyAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQp
OworICAgIAorICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBkZWNsc0Vu
ZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VCcmVha1N0YXRlbWVudChUcmVl
QnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goQlJFQUspKTsKKyAgICBpbnQg
c3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7CisgICAgaW50IGVuZENvbCA9IHRva2VuRW5kKCk7Cisg
ICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGludCBlbmRMaW5lID0gdG9rZW5M
aW5lKCk7CisgICAgbmV4dCgpOworICAgIAorICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKKyAg
ICAgICAgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShicmVha0lzVmFsaWQoKSwgIidicmVhaycgaXMg
b25seSB2YWxpZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9vcCBzdGF0ZW1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKKyAgICB9CisgICAg
bWF0Y2hPckZhaWwoSURFTlQpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tl
bi5tX2RhdGEuaWRlbnQ7CisgICAgZmFpbElmRmFsc2VXaXRoTmFtZUFuZE1lc3NhZ2UoZ2V0TGFi
ZWwoaWRlbnQpLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgpLCAiaXMgbm90IGRlZmluZWQiKTsKKyAg
ICBlbmRDb2wgPSB0b2tlbkVuZCgpOworICAgIGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBu
ZXh0KCk7CisgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKKyAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBpZGVu
dCwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VDb250aW51ZVN0
YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goQ09OVElO
VUUpKTsKKyAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7CisgICAgaW50IGVuZENvbCA9
IHRva2VuRW5kKCk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGludCBl
bmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIAorICAgIGlmIChhdXRvU2Vt
aUNvbG9uKCkpIHsKKyAgICAgICAgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShjb250aW51ZUlzVmFs
aWQoKSwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29wIHN0YXRlbWVudCIp
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0YXRlbWVudChtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUp
OworICAgIH0KKyAgICBtYXRjaE9yRmFpbChJREVOVCk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICBTY29wZUxhYmVsSW5mbyogbGFiZWwg
PSBnZXRMYWJlbChpZGVudCk7CisgICAgZmFpbElmRmFsc2VXaXRoTmFtZUFuZE1lc3NhZ2UobGFi
ZWwsICJMYWJlbCIsIGlkZW50LT5pbXBsKCksICJpcyBub3QgZGVmaW5lZCIpOworICAgIGZhaWxJ
ZkZhbHNlV2l0aE1lc3NhZ2UobGFiZWwtPm1faXNMb29wLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZh
bGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7CisgICAgZW5kQ29sID0gdG9rZW5FbmQoKTsK
KyAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIGZhaWxJZkZhbHNl
KGF1dG9TZW1pQ29sb24oKSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0
ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2ws
IHN0YXJ0TGluZSwgZW5kTGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBj
b250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChSRVRVUk4pKTsKKyAgICBmYWlsSWZGYWxzZShj
dXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpKTsKKyAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5M
aW5lKCk7CisgICAgaW50IGVuZExpbmUgPSBzdGFydExpbmU7CisgICAgaW50IHN0YXJ0ID0gdG9r
ZW5TdGFydCgpOworICAgIGludCBlbmQgPSB0b2tlbkVuZCgpOworICAgIG5leHQoKTsKKyAgICAv
LyBXZSBkbyB0aGUgYXV0byBzZW1pY29sb24gY2hlY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcGFy
c2UgYW4gZXhwcmVzc2lvbgorICAgIC8vIGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBhIGxpbmUg
YnJlYWsgYWZ0ZXIgdGhlIHJldHVybiBjb3JyZWN0bHkgdGVybWluYXRlcworICAgIC8vIHRoZSBz
dGF0ZW1lbnQKKyAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKKyAgICAgICAgZW5kTGluZSAgPSB0
b2tlbkxpbmUoKTsKKyAgICBpZiAoYXV0b1NlbWlDb2xvbigpKQorICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgMCwg
c3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKKyAgICBUcmVlRXhwcmVzc2lvbiBleHBy
ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGV4cHIpOworICAg
IGVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQorICAgICAg
ICBlbmRMaW5lICA9IHRva2VuTGluZSgpOworICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24o
KSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBh
cnNlVGhyb3dTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1h
dGNoKFRIUk9XKSk7CisgICAgaW50IGVTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICBpbnQgc3Rh
cnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIAorICAgIGZhaWxJZlRydWUo
YXV0b1NlbWlDb2xvbigpKTsKKyAgICAKKyAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGV4cHIpOworICAgIGludCBlRW5k
ID0gbGFzdFRva2VuRW5kKCk7CisgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBm
YWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOworICAgIAorICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZVRocm93U3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIGVTdGFy
dCwgZUVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VXaXRoU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChXSVRIKSk7CisgICAgZmFpbElmVHJ1
ZVdpdGhNZXNzYWdlKHN0cmljdE1vZGUoKSwgIid3aXRoJyBzdGF0ZW1lbnRzIGFyZSBub3QgdmFs
aWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICBjdXJyZW50U2NvcGUoKS0+c2V0TmVlZHNGdWxsQWN0
aXZhdGlvbigpOworICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBuZXh0KCk7
CisgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgIGludCBzdGFydCA9IHRva2VuU3Rh
cnQoKTsKKyAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQp
OworICAgIGZhaWxJZkZhbHNlKGV4cHIpOworICAgIGludCBlbmQgPSBsYXN0VG9rZW5FbmQoKTsK
KyAgICAKKyAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOworICAgIGNvbnN1bWVPckZhaWwo
Q0xPU0VQQVJFTik7CisgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKKyAgICBUcmVl
U3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Cisg
ICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVXaXRoU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXRlbWVu
dCwgc3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKFNXSVRDSCkpOworICAg
IGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBuZXh0KCk7CisgICAgY29uc3VtZU9y
RmFpbChPUEVOUEFSRU4pOworICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Np
b24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UoZXhwcik7CisgICAgaW50IGVuZExpbmUgPSB0
b2tlbkxpbmUoKTsKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOworICAgIGNvbnN1bWVP
ckZhaWwoT1BFTkJSQUNFKTsKKyAgICBzdGFydFN3aXRjaCgpOworICAgIFRyZWVDbGF1c2VMaXN0
IGZpcnN0Q2xhdXNlcyA9IHBhcnNlU3dpdGNoQ2xhdXNlcyhjb250ZXh0KTsKKyAgICBmYWlsSWZU
cnVlKG1fZXJyb3IpOworICAgIAorICAgIFRyZWVDbGF1c2UgZGVmYXVsdENsYXVzZSA9IHBhcnNl
U3dpdGNoRGVmYXVsdENsYXVzZShjb250ZXh0KTsKKyAgICBmYWlsSWZUcnVlKG1fZXJyb3IpOwor
ICAgIAorICAgIFRyZWVDbGF1c2VMaXN0IHNlY29uZENsYXVzZXMgPSBwYXJzZVN3aXRjaENsYXVz
ZXMoY29udGV4dCk7CisgICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKKyAgICBlbmRTd2l0Y2goKTsK
KyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0UpOworICAgIAorICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZVN3aXRjaFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBm
aXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMsIHN0YXJ0TGluZSwgZW5k
TGluZSk7CisgICAgCit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVz
ZUxpc3QgUGFyc2VyOjpwYXJzZVN3aXRjaENsYXVzZXMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7
CisgICAgaWYgKCFtYXRjaChDQVNFKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgbmV4dCgpOwor
ICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsK
KyAgICBmYWlsSWZGYWxzZShjb25kaXRpb24pOworICAgIGNvbnN1bWVPckZhaWwoQ09MT04pOwor
ICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzdGF0ZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50czxE
b250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShzdGF0ZW1l
bnRzKTsKKyAgICBUcmVlQ2xhdXNlIGNsYXVzZSA9IGNvbnRleHQuY3JlYXRlQ2xhdXNlKGNvbmRp
dGlvbiwgc3RhdGVtZW50cyk7CisgICAgVHJlZUNsYXVzZUxpc3QgY2xhdXNlTGlzdCA9IGNvbnRl
eHQuY3JlYXRlQ2xhdXNlTGlzdChjbGF1c2UpOworICAgIFRyZWVDbGF1c2VMaXN0IHRhaWwgPSBj
bGF1c2VMaXN0OworICAgIAorICAgIHdoaWxlIChtYXRjaChDQVNFKSkgeworICAgICAgICBuZXh0
KCk7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UoY29uZGl0aW9uKTsKKyAgICAgICAgY29uc3Vt
ZU9yRmFpbChDT0xPTik7CisgICAgICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzdGF0ZW1lbnRzID0g
cGFyc2VTb3VyY2VFbGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKKyAg
ICAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50cyk7CisgICAgICAgIGNsYXVzZSA9IGNvbnRleHQu
Y3JlYXRlQ2xhdXNlKGNvbmRpdGlvbiwgc3RhdGVtZW50cyk7CisgICAgICAgIHRhaWwgPSBjb250
ZXh0LmNyZWF0ZUNsYXVzZUxpc3QodGFpbCwgY2xhdXNlKTsKKyAgICB9CisgICAgcmV0dXJuIGNs
YXVzZUxpc3Q7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSBQ
YXJzZXI6OnBhcnNlU3dpdGNoRGVmYXVsdENsYXVzZShUcmVlQnVpbGRlciYgY29udGV4dCkKK3sK
KyAgICBpZiAoIW1hdGNoKERFRkFVTFQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBuZXh0KCk7
CisgICAgY29uc3VtZU9yRmFpbChDT0xPTik7CisgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHN0YXRl
bWVudHMgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRDaGVja0ZvclN0cmljdE1vZGU+KGNvbnRl
eHQpOworICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudHMpOworICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUNsYXVzZSgwLCBzdGF0ZW1lbnRzKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VUcnlTdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKFRSWSkpOworICAgIFRyZWVTdGF0ZW1lbnQg
dHJ5QmxvY2sgPSAwOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJm1fZ2xvYmFsRGF0
YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgYm9vbCBjYXRjaEhhc0V2YWwg
PSBmYWxzZTsKKyAgICBUcmVlU3RhdGVtZW50IGNhdGNoQmxvY2sgPSAwOworICAgIFRyZWVTdGF0
ZW1lbnQgZmluYWxseUJsb2NrID0gMDsKKyAgICBpbnQgZmlyc3RMaW5lID0gdG9rZW5MaW5lKCk7
CisgICAgbmV4dCgpOworICAgIG1hdGNoT3JGYWlsKE9QRU5CUkFDRSk7CisgICAgCisgICAgdHJ5
QmxvY2sgPSBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKHRy
eUJsb2NrKTsKKyAgICBpbnQgbGFzdExpbmUgPSBtX2xhc3RMaW5lOworICAgIAorICAgIGlmICht
YXRjaChDQVRDSCkpIHsKKyAgICAgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFjdGl2
YXRpb24oKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJF
Tik7CisgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICAgICAgaWRlbnQgPSBtX3Rva2Vu
Lm1fZGF0YS5pZGVudDsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBBdXRvUG9wU2NvcGVSZWYg
Y2F0Y2hTY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CisgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJp
Y3RXaXRoTmFtZUFuZE1lc3NhZ2UoY2F0Y2hTY29wZS0+ZGVjbGFyZVZhcmlhYmxlKGlkZW50KSwg
IkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQiLCBpZGVudC0+aW1wbCgpLCAiaW4gc3Ry
aWN0IG1vZGUiKTsKKyAgICAgICAgY2F0Y2hTY29wZS0+cHJldmVudE5ld0RlY2xzKCk7CisgICAg
ICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CisgICAgICAgIG1hdGNoT3JGYWlsKE9QRU5C
UkFDRSk7CisgICAgICAgIGludCBpbml0aWFsRXZhbENvdW50ID0gY29udGV4dC5ldmFsQ291bnQo
KTsKKyAgICAgICAgY2F0Y2hCbG9jayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Cisg
ICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY2F0Y2hCbG9jaywgIid0cnknIG11c3QgaGF2
ZSBhIGNhdGNoIG9yIGZpbmFsbHkgYmxvY2siKTsKKyAgICAgICAgY2F0Y2hIYXNFdmFsID0gaW5p
dGlhbEV2YWxDb3VudCAhPSBjb250ZXh0LmV2YWxDb3VudCgpOworICAgICAgICBmYWlsSWZGYWxz
ZShwb3BTY29wZShjYXRjaFNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZv
KSk7CisgICAgfQorICAgIAorICAgIGlmIChtYXRjaChGSU5BTExZKSkgeworICAgICAgICBuZXh0
KCk7CisgICAgICAgIG1hdGNoT3JGYWlsKE9QRU5CUkFDRSk7CisgICAgICAgIGZpbmFsbHlCbG9j
ayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGZp
bmFsbHlCbG9jayk7CisgICAgfQorICAgIGZhaWxJZkZhbHNlKGNhdGNoQmxvY2sgfHwgZmluYWxs
eUJsb2NrKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUcnlTdGF0ZW1lbnQobV9sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSwgdHJ5QmxvY2ssIGlkZW50LCBjYXRjaEhhc0V2YWwsIGNhdGNoQmxv
Y2ssIGZpbmFsbHlCbG9jaywgZmlyc3RMaW5lLCBsYXN0TGluZSk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlRGVidWdnZXJTdGF0
ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKERFQlVHR0VS
KSk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGludCBlbmRMaW5lID0g
c3RhcnRMaW5lOworICAgIG5leHQoKTsKKyAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKKyAgICAg
ICAgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xv
bigpKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVEZWJ1Z2dlcihtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBzdGFydExpbmUsIGVuZExpbmUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUJsb2NrU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChPUEVOQlJBQ0UpKTsKKyAgICBp
bnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKKyAgICBuZXh0KCk7CisgICAgaWYgKG1hdGNoKENMT1NF
QlJBQ0UpKSB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
QmxvY2tTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgMCwgc3RhcnQsIG1fbGFz
dExpbmUpOworICAgIH0KKyAgICBUcmVlU291cmNlRWxlbWVudHMgc3VidHJlZSA9IHBhcnNlU291
cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0TW9kZT4oY29udGV4dCk7CisgICAgZmFpbElm
RmFsc2Uoc3VidHJlZSk7CisgICAgbWF0Y2hPckZhaWwoQ0xPU0VCUkFDRSk7CisgICAgbmV4dCgp
OworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RM
aW5lTnVtYmVyKCksIHN1YnRyZWUsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKK30KKwordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUpCit7Cisg
ICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKKyAgICBt
X3N0YXRlbWVudERlcHRoKys7CisgICAgZGlyZWN0aXZlID0gMDsKKyAgICBpbnQgbm9uVHJpdmlh
bEV4cHJlc3Npb25Db3VudCA9IDA7CisgICAgZmFpbElmU3RhY2tPdmVyZmxvdygpOworICAgIHN3
aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKKyAgICBjYXNlIE9QRU5CUkFDRToKKyAgICAgICAgcmV0
dXJuIHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBWQVI6CisgICAgICAg
IHJldHVybiBwYXJzZVZhckRlY2xhcmF0aW9uKGNvbnRleHQpOworICAgIGNhc2UgQ09OU1RUT0tF
TjoKKyAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3REZWNsYXJhdGlvbihjb250ZXh0KTsKKyAgICBj
YXNlIEZVTkNUSU9OOgorICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9z
dGF0ZW1lbnREZXB0aCA9PSAxLCAiRnVuY3Rpb25zIGNhbm5vdCBiZSBkZWNsYXJlZCBpbiBhIG5l
c3RlZCBibG9jayBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uKGNvbnRleHQpOworICAgIGNhc2UgU0VNSUNPTE9OOgorICAgICAgICBuZXh0
KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUVtcHR5U3RhdGVtZW50KG1fbGV4ZXIt
Pmxhc3RMaW5lTnVtYmVyKCkpOworICAgIGNhc2UgSUY6CisgICAgICAgIHJldHVybiBwYXJzZUlm
U3RhdGVtZW50KGNvbnRleHQpOworICAgIGNhc2UgRE86CisgICAgICAgIHJldHVybiBwYXJzZURv
V2hpbGVTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBXSElMRToKKyAgICAgICAgcmV0dXJu
IHBhcnNlV2hpbGVTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBGT1I6CisgICAgICAgIHJl
dHVybiBwYXJzZUZvclN0YXRlbWVudChjb250ZXh0KTsKKyAgICBjYXNlIENPTlRJTlVFOgorICAg
ICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICBjYXNlIEJS
RUFLOgorICAgICAgICByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudChjb250ZXh0KTsKKyAgICBj
YXNlIFJFVFVSTjoKKyAgICAgICAgcmV0dXJuIHBhcnNlUmV0dXJuU3RhdGVtZW50KGNvbnRleHQp
OworICAgIGNhc2UgV0lUSDoKKyAgICAgICAgcmV0dXJuIHBhcnNlV2l0aFN0YXRlbWVudChjb250
ZXh0KTsKKyAgICBjYXNlIFNXSVRDSDoKKyAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVt
ZW50KGNvbnRleHQpOworICAgIGNhc2UgVEhST1c6CisgICAgICAgIHJldHVybiBwYXJzZVRocm93
U3RhdGVtZW50KGNvbnRleHQpOworICAgIGNhc2UgVFJZOgorICAgICAgICByZXR1cm4gcGFyc2VU
cnlTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBERUJVR0dFUjoKKyAgICAgICAgcmV0dXJu
IHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBFT0ZUT0s6CisgICAg
Y2FzZSBDQVNFOgorICAgIGNhc2UgQ0xPU0VCUkFDRToKKyAgICBjYXNlIERFRkFVTFQ6CisgICAg
ICAgIC8vIFRoZXNlIHRva2VucyBpbXBseSB0aGUgZW5kIG9mIGEgc2V0IG9mIHNvdXJjZSBlbGVt
ZW50cworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIElERU5UOgorICAgICAgICByZXR1cm4g
cGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChjb250ZXh0KTsKKyAgICBjYXNlIFNUUklO
RzoKKyAgICAgICAgZGlyZWN0aXZlID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgIG5v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQgPSBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgVHJlZVN0YXRlbWVudCBleHByU3RhdGVtZW50ID0gcGFyc2VF
eHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICBpZiAoZGlyZWN0aXZlICYmIG5v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQgIT0gbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50KQor
ICAgICAgICAgICAgZGlyZWN0aXZlID0gMDsKKyAgICAgICAgcmV0dXJuIGV4cHJTdGF0ZW1lbnQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJh
bWV0ZXJMaXN0IFBhcnNlcjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiBjb250
ZXh0KQoreworICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICBmYWlsSWZGYWxzZUlmU3RyaWN0
V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVQYXJhbWV0ZXIobV90b2tlbi5tX2RhdGEuaWRlbnQp
LCAiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQiLCBtX3Rva2VuLm1fZGF0YS5pZGVu
dC0+aW1wbCgpLCAiIGluIHN0cmljdCBtb2RlIik7CisgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxp
c3QgbGlzdCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgqbV90b2tlbi5tX2Rh
dGEuaWRlbnQpOworICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHRhaWwgPSBsaXN0OworICAg
IG5leHQoKTsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0
aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVQYXJhbWV0ZXIoaWRlbnQpLCAiQ2Fubm90IGRlY2xhcmUg
YSBwYXJhbWV0ZXIgbmFtZWQiLCBpZGVudC0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUiKTsKKyAg
ICAgICAgbmV4dCgpOworICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0
ZXJMaXN0KHRhaWwsICppZGVudCk7CisgICAgfQorICAgIHJldHVybiBsaXN0OworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBpZiAobWF0Y2goQ0xPU0VC
UkFDRSkpCisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCBzdHJpY3RNb2RlKCkpOworICAgIERlcHRoTWFuYWdlciBzdGF0
ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CisgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7
CisgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxk
ZXIoY29uc3RfY2FzdDxKU0dsb2JhbERhdGEqPihtX2dsb2JhbERhdGEpLCBtX2xleGVyKTsKKyAg
ICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9k
eUJ1aWxkZXIpKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhl
ci0+bGFzdExpbmVOdW1iZXIoKSwgc3RyaWN0TW9kZSgpKTsKK30KKwordGVtcGxhdGUgPFBhcnNl
cjo6RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29udGFp
bmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI6OnBhcnNlRnVuY3Rpb25J
bmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgbmFtZSwgVHJlZUZv
cm1hbFBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsIFRyZWVGdW5jdGlvbkJvZHkmIGJvZHksIGlu
dCYgb3BlbkJyYWNlUG9zLCBpbnQmIGNsb3NlQnJhY2VQb3MsIGludCYgYm9keVN0YXJ0TGluZSkK
K3sKKyAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7
CisgICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigpOworICAgIGlmIChtYXRjaChJREVO
VCkpIHsKKyAgICAgICAgbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBmYWls
SWZUcnVlV2l0aE1lc3NhZ2UoKm5hbWUgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT51
bmRlcnNjb3JlUHJvdG8sICJDYW5ub3QgbmFtZSBhIGZ1bmN0aW9uIF9fcHJvdG9fXyIpOworICAg
ICAgICBuZXh0KCk7CisgICAgICAgIGlmICghbmFtZUlzSW5Db250YWluaW5nU2NvcGUpCisgICAg
ICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJs
ZShuYW1lKSk7CisgICAgfSBlbHNlIGlmIChyZXF1aXJlbWVudHMgPT0gRnVuY3Rpb25OZWVkc05h
bWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7
CisgICAgaWYgKCFtYXRjaChDTE9TRVBBUkVOKSkgeworICAgICAgICBwYXJhbWV0ZXJzID0gcGFy
c2VGb3JtYWxQYXJhbWV0ZXJzKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0
ZXJzKTsKKyAgICB9CisgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKKyAgICBtYXRjaE9y
RmFpbChPUEVOQlJBQ0UpOworICAgIAorICAgIG9wZW5CcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRh
LmludFZhbHVlOworICAgIGJvZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICAKKyAgICAv
LyBJZiB3ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVzZSB0aGUg
Y2FjaGVkIGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlv
bi4KKyAgICBpZiAoY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGNhY2hlZEluZm8gPSBU
cmVlQnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8o
b3BlbkJyYWNlUG9zKSA6IDApIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBzdHJpY3QgY29u
dGV4dCwgdGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIG11c3Qgc2F5IGl0IHdhcyBzdHJpY3QgdG9v
LgorICAgICAgICBBU1NFUlQoIXN0cmljdE1vZGUoKSB8fCBjYWNoZWRJbmZvLT5zdHJpY3RNb2Rl
KTsKKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOworICAgICAgICAKKyAgICAg
ICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0aW9uSW5mbyhjYWNoZWRJbmZvKTsKKyAgICAg
ICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRz
RnJlZVZhcmlhYmxlSW5mbykpOworICAgICAgICAKKyAgICAgICAgY2xvc2VCcmFjZVBvcyA9IGNh
Y2hlZEluZm8tPmNsb3NlQnJhY2VQb3M7CisgICAgICAgIG1fdG9rZW4gPSBjYWNoZWRJbmZvLT5j
bG9zZUJyYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KG1fdG9rZW4ubV9p
bmZvLmVuZE9mZnNldCk7CisgICAgICAgIG1fbGV4ZXItPnNldExpbmVOdW1iZXIobV90b2tlbi5t
X2luZm8ubGluZSk7CisgICAgICAgIAorICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBuZXh0KCk7CisgICAgCisgICAgYm9keSA9IHBhcnNlRnVu
Y3Rpb25Cb2R5KGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGJvZHkpOworICAgIGlmIChmdW5j
dGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgbmFtZSkgeworICAgICAgICBmYWlsSWZUcnVlV2l0
aE5hbWVBbmRNZXNzYWdlKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09
ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlzIG5vdCB2YWxpZCBpbiBz
dHJpY3QgbW9kZSIpOworICAgICAgICBmYWlsSWZUcnVlV2l0aE5hbWVBbmRNZXNzYWdlKG1fZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSwgIkZ1bmN0aW9uIG5hbWUiLCBu
YW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICB9CisgICAg
Y2xvc2VCcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOworICAgIAorICAgIC8vIENh
Y2hlIHRoZSB0b2tlbml6ZXIgc3RhdGUgYW5kIHRoZSBmdW5jdGlvbiBzY29wZSB0aGUgZmlyc3Qg
dGltZSB0aGUgZnVuY3Rpb24gaXMgcGFyc2VkLgorICAgIC8vIEFueSBmdXR1cmUgcmVwYXJzaW5n
IGNhbiB0aGVuIHNraXAgdGhlIGZ1bmN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSA9IDY0OworICAgIE93blB0cjxTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbT4gbmV3SW5mbzsKKyAgICBpbnQgZnVuY3Rpb25MZW5ndGggPSBjbG9zZUJyYWNlUG9z
IC0gb3BlbkJyYWNlUG9zOworICAgIGlmIChUcmVlQnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNo
ZSAmJiBtX2Z1bmN0aW9uQ2FjaGUgJiYgZnVuY3Rpb25MZW5ndGggPiBtaW5pbXVtRnVuY3Rpb25M
ZW5ndGhUb0NhY2hlKSB7CisgICAgICAgIG5ld0luZm8gPSBhZG9wdFB0cihuZXcgU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0obV90b2tlbi5tX2luZm8ubGluZSwgY2xvc2VCcmFjZVBvcykpOworICAg
ICAgICBmdW5jdGlvblNjb3BlLT5zYXZlRnVuY3Rpb25JbmZvKG5ld0luZm8uZ2V0KCkpOworICAg
IH0KKyAgICAKKyAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVp
bGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSk7CisgICAgbWF0Y2hPckZhaWwoQ0xPU0VCUkFD
RSk7CisgICAgCisgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgdW5zaWduZWQgYXBwcm94aW1h
dGVCeXRlU2l6ZSA9IG5ld0luZm8tPmFwcHJveGltYXRlQnl0ZVNpemUoKTsKKyAgICAgICAgbV9m
dW5jdGlvbkNhY2hlLT5hZGQob3BlbkJyYWNlUG9zLCBuZXdJbmZvLnJlbGVhc2UoKSwgYXBwcm94
aW1hdGVCeXRlU2l6ZSk7CisgICAgfQorICAgIAorICAgIG5leHQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNl
cjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAg
IEFTU0VSVChtYXRjaChGVU5DVElPTikpOworICAgIG5leHQoKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBuYW1lID0gMDsKKyAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0g
MDsKKyAgICBUcmVlRnVuY3Rpb25Cb2R5IGJvZHkgPSAwOworICAgIGludCBvcGVuQnJhY2VQb3Mg
PSAwOworICAgIGludCBjbG9zZUJyYWNlUG9zID0gMDsKKyAgICBpbnQgYm9keVN0YXJ0TGluZSA9
IDA7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTmVlZHNOYW1l
LCB0cnVlPihjb250ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNs
b3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpKSk7CisgICAgZmFpbElmRmFsc2UobmFtZSk7Cisg
ICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSkpOworICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVy
KCksIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywg
Ym9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSk7Cit9CisKK3N0cnVjdCBMYWJlbEluZm8geworICAg
IExhYmVsSW5mbyhjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQor
ICAgIDogbV9pZGVudChpZGVudCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2VuZChl
bmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBJZGVudGlmaWVyKiBtX2lkZW50Owor
ICAgIGludCBtX3N0YXJ0OworICAgIGludCBtX2VuZDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbk9yTGFiZWxT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgCisgICAgLyogRXhwcmVzc2lv
biBhbmQgTGFiZWwgc3RhdGVtZW50cyBhcmUgYW1iaWd1b3VzIGF0IExMKDEpLCBzbyB3ZSBoYXZl
IGEKKyAgICAgKiBzcGVjaWFsIGNhc2UgdGhhdCBsb29rcyBmb3IgYSBjb2xvbiBhcyB0aGUgbmV4
dCBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LgorICAgICAqLworICAgIFZlY3RvcjxMYWJlbEluZm8+
IGxhYmVsczsKKyAgICAKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQo
KTsKKyAgICAgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgICAgICBpZiAoIW5l
eHRUb2tlbklzQ29sb24oKSkgeworICAgICAgICAgICAgLy8gSWYgd2UgaGl0IHRoaXMgcGF0aCB3
ZSdyZSBtYWtpbmcgYSBleHByZXNzaW9uIHN0YXRlbWVudCwgd2hpY2gKKyAgICAgICAgICAgIC8v
IGJ5IGRlZmluaXRpb24gY2FuJ3QgbWFrZSB1c2Ugb2YgY29udGludWUvYnJlYWsgc28gd2UgY2Fu
IGp1c3QKKyAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbGFiZWxzIHdlIG1pZ2h0IGhhdmUgYWNj
dW11bGF0ZWQuCisgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoZXhwcmVzc2lvbik7
CisgICAgICAgICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJl
cigpLCBleHByZXNzaW9uLCBzdGFydExpbmUsIG1fbGFzdExpbmUpOworICAgICAgICB9CisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAg
ICAgIGludCBlbmQgPSB0b2tlbkVuZCgpOworICAgICAgICBuZXh0KCk7CisgICAgICAgIGNvbnN1
bWVPckZhaWwoQ09MT04pOworICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkg
eworICAgICAgICAgICAgLy8gVGhpcyBpcyBPKE5eMikgb3ZlciB0aGUgY3VycmVudCBsaXN0IG9m
IGNvbnNlY3V0aXZlIGxhYmVscywgYnV0IEkKKyAgICAgICAgICAgIC8vIGhhdmUgbmV2ZXIgc2Vl
biBtb3JlIHRoYW4gb25lIGxhYmVsIGluIGEgcm93IGluIHRoZSByZWFsIHdvcmxkLgorICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspCisgICAgICAg
ICAgICAgICAgZmFpbElmVHJ1ZShpZGVudC0+aW1wbCgpID09IGxhYmVsc1tpXS5tX2lkZW50LT5p
bXBsKCkpOworICAgICAgICAgICAgZmFpbElmVHJ1ZShnZXRMYWJlbChpZGVudCkpOworICAgICAg
ICAgICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8oaWRlbnQsIHN0YXJ0LCBlbmQpKTsKKyAgICAg
ICAgfQorICAgIH0gd2hpbGUgKG1hdGNoKElERU5UKSk7CisgICAgYm9vbCBpc0xvb3AgPSBmYWxz
ZTsKKyAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CisgICAgY2FzZSBGT1I6CisgICAgY2Fz
ZSBXSElMRToKKyAgICBjYXNlIERPOgorICAgICAgICBpc0xvb3AgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgaWYgKCFtX3N5bnRheEFscmVhZHlW
YWxpZGF0ZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgp
OyBpKyspCisgICAgICAgICAgICBwdXNoTGFiZWwobGFiZWxzW2ldLm1faWRlbnQsIGlzTG9vcCk7
CisgICAgfQorICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29u
dGV4dCwgdW51c2VkKTsKKyAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgIHBvcExhYmVsKCk7CisgICAgfQorICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29u
c3QgTGFiZWxJbmZvJiBpbmZvID0gbGFiZWxzW2xhYmVscy5zaXplKCkgLSBpIC0gMV07CisgICAg
ICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQobV9sZXhlci0+bGFz
dExpbmVOdW1iZXIoKSwgaW5mby5tX2lkZW50LCBzdGF0ZW1lbnQsIGluZm8ubV9zdGFydCwgaW5m
by5tX2VuZCk7CisgICAgfQorICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvblN0
YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBpbnQgc3RhcnRMaW5lID0gdG9r
ZW5MaW5lKCk7CisgICAgVHJlZUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShleHByZXNzaW9uKTsKKyAgICBmYWlsSWZGYWxz
ZShhdXRvU2VtaUNvbG9uKCkpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1l
bnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwcmVzc2lvbiwgc3RhcnRMaW5lLCBtX2xh
c3RMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBB
U1NFUlQobWF0Y2goSUYpKTsKKyAgICAKKyAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKKyAg
ICBuZXh0KCk7CisgICAgCisgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgIAorICAg
IFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAg
ICBmYWlsSWZGYWxzZShjb25kaXRpb24pOworICAgIGludCBlbmQgPSB0b2tlbkxpbmUoKTsKKyAg
ICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOworICAgIAorICAgIGNvbnN0IElkZW50aWZpZXIq
IHVudXNlZCA9IDA7CisgICAgVHJlZVN0YXRlbWVudCB0cnVlQmxvY2sgPSBwYXJzZVN0YXRlbWVu
dChjb250ZXh0LCB1bnVzZWQpOworICAgIGZhaWxJZkZhbHNlKHRydWVCbG9jayk7CisgICAgCisg
ICAgaWYgKCFtYXRjaChFTFNFKSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlSWZTdGF0
ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY29uZGl0aW9uLCB0cnVlQmxvY2ssIHN0
YXJ0LCBlbmQpOworICAgIAorICAgIFZlY3RvcjxUcmVlRXhwcmVzc2lvbj4gZXhwclN0YWNrOwor
ICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IHBvc1N0YWNrOworICAgIFZlY3RvcjxUcmVlU3Rh
dGVtZW50PiBzdGF0ZW1lbnRTdGFjazsKKyAgICBib29sIHRyYWlsaW5nRWxzZSA9IGZhbHNlOwor
ICAgIGRvIHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBpZiAoIW1hdGNoKElGKSkgeworICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKKyAgICAgICAgICAgIFRyZWVT
dGF0ZW1lbnQgYmxvY2sgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOworICAgICAg
ICAgICAgZmFpbElmRmFsc2UoYmxvY2spOworICAgICAgICAgICAgc3RhdGVtZW50U3RhY2suYXBw
ZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIHRyYWlsaW5nRWxzZSA9IHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbnQgaW5uZXJTdGFydCA9IHRva2VuTGluZSgp
OworICAgICAgICBuZXh0KCk7CisgICAgICAgIAorICAgICAgICBjb25zdW1lT3JGYWlsKE9QRU5Q
QVJFTik7CisgICAgICAgIAorICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbm5lckNvbmRpdGlvbiA9
IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UoaW5uZXJDb25k
aXRpb24pOworICAgICAgICBpbnQgaW5uZXJFbmQgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgY29u
c3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2Vk
ID0gMDsKKyAgICAgICAgVHJlZVN0YXRlbWVudCBpbm5lclRydWVCbG9jayA9IHBhcnNlU3RhdGVt
ZW50KGNvbnRleHQsIHVudXNlZCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGlubmVyVHJ1ZUJsb2Nr
KTsgICAgIAorICAgICAgICBleHByU3RhY2suYXBwZW5kKGlubmVyQ29uZGl0aW9uKTsKKyAgICAg
ICAgcG9zU3RhY2suYXBwZW5kKG1ha2VfcGFpcihpbm5lclN0YXJ0LCBpbm5lckVuZCkpOworICAg
ICAgICBzdGF0ZW1lbnRTdGFjay5hcHBlbmQoaW5uZXJUcnVlQmxvY2spOworICAgIH0gd2hpbGUg
KG1hdGNoKEVMU0UpKTsKKyAgICAKKyAgICBpZiAoIXRyYWlsaW5nRWxzZSkgeworICAgICAgICBU
cmVlRXhwcmVzc2lvbiBjb25kaXRpb24gPSBleHByU3RhY2subGFzdCgpOworICAgICAgICBleHBy
U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBUcmVlU3RhdGVtZW50IHRydWVCbG9jayA9IHN0
YXRlbWVudFN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhdGVtZW50U3RhY2sucmVtb3ZlTGFzdCgp
OworICAgICAgICBwYWlyPGludCwgaW50PiBwb3MgPSBwb3NTdGFjay5sYXN0KCk7CisgICAgICAg
IHBvc1N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgc3RhdGVtZW50U3RhY2suYXBwZW5kKGNv
bnRleHQuY3JlYXRlSWZTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY29uZGl0
aW9uLCB0cnVlQmxvY2ssIHBvcy5maXJzdCwgcG9zLnNlY29uZCkpOworICAgIH0KKyAgICAKKyAg
ICB3aGlsZSAoIWV4cHJTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24g
Y29uZGl0aW9uID0gZXhwclN0YWNrLmxhc3QoKTsKKyAgICAgICAgZXhwclN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCBmYWxzZUJsb2NrID0gc3RhdGVtZW50U3RhY2su
bGFzdCgpOworICAgICAgICBzdGF0ZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIFRy
ZWVTdGF0ZW1lbnQgdHJ1ZUJsb2NrID0gc3RhdGVtZW50U3RhY2subGFzdCgpOworICAgICAgICBz
dGF0ZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIHBhaXI8aW50LCBpbnQ+IHBvcyA9
IHBvc1N0YWNrLmxhc3QoKTsKKyAgICAgICAgcG9zU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICBzdGF0ZW1lbnRTdGFjay5hcHBlbmQoY29udGV4dC5jcmVhdGVJZlN0YXRlbWVudChtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCBjb25kaXRpb24sIHRydWVCbG9jaywgZmFsc2VCbG9jaywgcG9z
LmZpcnN0LCBwb3Muc2Vjb25kKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUlmU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbmRpdGlvbiwgdHJ1
ZUJsb2NrLCBzdGF0ZW1lbnRTdGFjay5sYXN0KCksIHN0YXJ0LCBlbmQpOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VFeHByZXNz
aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsK
KyAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250
ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShub2RlKTsKKyAgICBpZiAoIW1hdGNoKENPTU1BKSkKKyAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgbmV4dCgpOworICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOworICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICBUcmVlRXhwcmVzc2lvbiByaWdo
dCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2Uo
cmlnaHQpOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpDb21tYSBjb21tYU5vZGUgPSBjb250
ZXh0LmNyZWF0ZUNvbW1hRXhwcihtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBub2RlLCByaWdo
dCk7CisgICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgeworICAgICAgICBuZXh0KFRyZWVCdWlsZGVy
OjpEb250QnVpbGRTdHJpbmdzKTsKKyAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShyaWdodCk7CisgICAgICAgIGNv
bnRleHQuYXBwZW5kVG9Db21tYShjb21tYU5vZGUsIHJpZ2h0KTsKKyAgICB9CisgICAgcmV0dXJu
IGNvbW1hTm9kZTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjo6cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3sKKyAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7CisgICAgaW50IHN0YXJ0ID0g
dG9rZW5TdGFydCgpOworICAgIGludCBpbml0aWFsQXNzaWdubWVudENvdW50ID0gbV9hc3NpZ25t
ZW50Q291bnQ7CisgICAgaW50IGluaXRpYWxOb25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7Cisg
ICAgVHJlZUV4cHJlc3Npb24gbGhzID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oY29udGV4
dCk7CisgICAgZmFpbElmRmFsc2UobGhzKTsKKyAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9
IG1fbm9uTEhTQ291bnQpCisgICAgICAgIHJldHVybiBsaHM7CisgICAgCisgICAgaW50IGFzc2ln
bm1lbnRTdGFjayA9IDA7CisgICAgT3BlcmF0b3Igb3A7CisgICAgYm9vbCBoYWRBc3NpZ25tZW50
ID0gZmFsc2U7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1f
dHlwZSkgeworICAgICAgICBjYXNlIEVRVUFMOiBvcCA9IE9wRXF1YWw7IGJyZWFrOworICAgICAg
ICBjYXNlIFBMVVNFUVVBTDogb3AgPSBPcFBsdXNFcTsgYnJlYWs7CisgICAgICAgIGNhc2UgTUlO
VVNFUVVBTDogb3AgPSBPcE1pbnVzRXE7IGJyZWFrOworICAgICAgICBjYXNlIE1VTFRFUVVBTDog
b3AgPSBPcE11bHRFcTsgYnJlYWs7CisgICAgICAgIGNhc2UgRElWRVFVQUw6IG9wID0gT3BEaXZF
cTsgYnJlYWs7CisgICAgICAgIGNhc2UgTFNISUZURVFVQUw6IG9wID0gT3BMU2hpZnQ7IGJyZWFr
OworICAgICAgICBjYXNlIFJTSElGVEVRVUFMOiBvcCA9IE9wUlNoaWZ0OyBicmVhazsKKyAgICAg
ICAgY2FzZSBVUlNISUZURVFVQUw6IG9wID0gT3BVUlNoaWZ0OyBicmVhazsKKyAgICAgICAgY2Fz
ZSBBTkRFUVVBTDogb3AgPSBPcEFuZEVxOyBicmVhazsKKyAgICAgICAgY2FzZSBYT1JFUVVBTDog
b3AgPSBPcFhPckVxOyBicmVhazsKKyAgICAgICAgY2FzZSBPUkVRVUFMOiBvcCA9IE9wT3JFcTsg
YnJlYWs7CisgICAgICAgIGNhc2UgTU9ERVFVQUw6IG9wID0gT3BNb2RFcTsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBt
X25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgaGFkQXNzaWdubWVudCA9IHRy
dWU7CisgICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRTdGFj
aywgbGhzLCBzdGFydCwgdG9rZW5TdGFydCgpLCBtX2Fzc2lnbm1lbnRDb3VudCwgb3ApOworICAg
ICAgICBzdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsK
KyAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgICAgIGlm
IChzdHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShs
aHMpKSB7CisgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFzdElkZW50aWZpZXIsICInZXZhbCcg
Y2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidhcmd1bWVudHMnIGNhbm5vdCBiZSBtb2RpZmll
ZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50
aWZpZXIpOworICAgICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IDA7CisgICAgICAgIH0KKyAg
ICAgICAgbGhzID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAg
IGZhaWxJZkZhbHNlKGxocyk7CisgICAgICAgIGlmIChpbml0aWFsTm9uTEhTQ291bnQgIT0gbV9u
b25MSFNDb3VudCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK2VuZDoKKyAgICBpZiAoaGFk
QXNzaWdubWVudCkKKyAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAgIAorICAgIGlmICghVHJl
ZUJ1aWxkZXI6OkNyZWF0ZXNBU1QpCisgICAgICAgIHJldHVybiBsaHM7CisgICAgCisgICAgd2hp
bGUgKGFzc2lnbm1lbnRTdGFjaykKKyAgICAgICAgbGhzID0gY29udGV4dC5jcmVhdGVBc3NpZ25t
ZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGFzc2lnbm1lbnRTdGFjaywgbGhzLCBpbml0
aWFsQXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1lbnRDb3VudCwgbGFzdFRva2VuRW5kKCkpOwor
ICAgIAorICAgIHJldHVybiBsaHM7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihUcmVlQnVp
bGRlciYgY29udGV4dCkKK3sKKyAgICBUcmVlRXhwcmVzc2lvbiBjb25kID0gcGFyc2VCaW5hcnlF
eHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGNvbmQpOworICAgIGlmICghbWF0
Y2goUVVFU1RJT04pKQorICAgICAgICByZXR1cm4gY29uZDsKKyAgICBtX25vblRyaXZpYWxFeHBy
ZXNzaW9uQ291bnQrKzsKKyAgICBtX25vbkxIU0NvdW50Kys7CisgICAgbmV4dChUcmVlQnVpbGRl
cjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgVHJlZUV4cHJlc3Npb24gbGhzID0gcGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKENP
TE9OLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgCisgICAgVHJlZUV4cHJl
c3Npb24gcmhzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBmYWls
SWZGYWxzZShyaHMpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbmRpdGlvbmFsRXhwciht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBjb25kLCBsaHMsIHJocyk7Cit9CisKK0FMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgaXNVbmFyeU9wKEpTVG9rZW5UeXBlIHRva2VuKQoreworICAgIHJl
dHVybiB0b2tlbiAmIFVuYXJ5T3BUb2tlbkZsYWc7Cit9CisKK2ludCBQYXJzZXI6OmlzQmluYXJ5
T3BlcmF0b3IoSlNUb2tlblR5cGUgdG9rZW4pCit7CisgICAgaWYgKG1fYWxsb3dzSW4pCisgICAg
ICAgIHJldHVybiB0b2tlbiAmIChCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1hc2sgPDwgQmluYXJ5
T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9uYWxTaGlmdCk7CisgICAgcmV0dXJuIHRv
a2VuICYgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrOworfQorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9u
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIAorICAgIGludCBvcGVyYW5kU3RhY2tEZXB0
aCA9IDA7CisgICAgaW50IG9wZXJhdG9yU3RhY2tEZXB0aCA9IDA7CisgICAgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OkJpbmFyeUV4cHJDb250ZXh0IGJpbmFyeUV4cHJDb250ZXh0KGNvbnRleHQpOwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGludCBleHByU3RhcnQgPSB0b2tlblN0YXJ0KCk7
CisgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKKyAg
ICAgICAgVHJlZUV4cHJlc3Npb24gY3VycmVudCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKGNvbnRl
eHQpOworICAgICAgICBmYWlsSWZGYWxzZShjdXJyZW50KTsKKyAgICAgICAgCisgICAgICAgIGNv
bnRleHQuYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0YWNrRGVwdGgsIGN1cnJl
bnQsIGV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIGxhc3RUb2tlbkVuZCgpLCBpbml0aWFsQXNz
aWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQpOworICAgICAgICBpbnQgcHJlY2VkZW5jZSA9
IGlzQmluYXJ5T3BlcmF0b3IobV90b2tlbi5tX3R5cGUpOworICAgICAgICBpZiAoIXByZWNlZGVu
Y2UpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50Kys7CisgICAgICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICAgICAgaW50IG9wZXJhdG9yVG9r
ZW4gPSBtX3Rva2VuLm1fdHlwZTsKKyAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxk
U3RyaW5ncyk7CisgICAgICAgIAorICAgICAgICB3aGlsZSAob3BlcmF0b3JTdGFja0RlcHRoICYm
ICBjb250ZXh0Lm9wZXJhdG9yU3RhY2tIYXNIaWdoZXJQcmVjZWRlbmNlKG9wZXJhdG9yU3RhY2tE
ZXB0aCwgcHJlY2VkZW5jZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kU3RhY2tEZXB0
aCA+IDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6
QmluYXJ5T3BlcmFuZCByaHMgPSBjb250ZXh0LmdldEZyb21PcGVyYW5kU3RhY2soLTEpOworICAg
ICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgbGhzID0gY29udGV4
dC5nZXRGcm9tT3BlcmFuZFN0YWNrKC0yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2hyaW5rT3Bl
cmFuZFN0YWNrQnkob3BlcmFuZFN0YWNrRGVwdGgsIDIpOworICAgICAgICAgICAgY29udGV4dC5h
cHBlbmRCaW5hcnlPcGVyYXRpb24obV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgb3BlcmFuZFN0
YWNrRGVwdGgsIG9wZXJhdG9yU3RhY2tEZXB0aCwgbGhzLCByaHMpOworICAgICAgICAgICAgY29u
dGV4dC5vcGVyYXRvclN0YWNrUG9wKG9wZXJhdG9yU3RhY2tEZXB0aCk7CisgICAgICAgIH0KKyAg
ICAgICAgY29udGV4dC5vcGVyYXRvclN0YWNrQXBwZW5kKG9wZXJhdG9yU3RhY2tEZXB0aCwgb3Bl
cmF0b3JUb2tlbiwgcHJlY2VkZW5jZSk7CisgICAgfQorICAgIHdoaWxlIChvcGVyYXRvclN0YWNr
RGVwdGgpIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmRTdGFja0RlcHRoID4gMSk7CisgICAgICAg
IAorICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6QmluYXJ5T3BlcmFuZCByaHMgPSBjb250
ZXh0LmdldEZyb21PcGVyYW5kU3RhY2soLTEpOworICAgICAgICB0eXBlbmFtZSBUcmVlQnVpbGRl
cjo6QmluYXJ5T3BlcmFuZCBsaHMgPSBjb250ZXh0LmdldEZyb21PcGVyYW5kU3RhY2soLTIpOwor
ICAgICAgICBjb250ZXh0LnNocmlua09wZXJhbmRTdGFja0J5KG9wZXJhbmRTdGFja0RlcHRoLCAy
KTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRCaW5hcnlPcGVyYXRpb24obV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSwgb3BlcmFuZFN0YWNrRGVwdGgsIG9wZXJhdG9yU3RhY2tEZXB0aCwgbGhzLCBy
aHMpOworICAgICAgICBjb250ZXh0Lm9wZXJhdG9yU3RhY2tQb3Aob3BlcmF0b3JTdGFja0RlcHRo
KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQucG9wT3BlcmFuZFN0YWNrKG9wZXJhbmRTdGFj
a0RlcHRoKTsKK30KKworCit0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI6OnBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCit7CisgICAgYm9vbCB3YXNJZGVudCA9IGZhbHNlOworICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKKyAgICBuYW1lZFByb3BlcnR5OgorICAgIGNhc2UgSURFTlQ6CisgICAgICAgIHdh
c0lkZW50ID0gdHJ1ZTsKKyAgICBjYXNlIFNUUklORzogeworICAgICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBpZiAoY29tcGxldGUg
fHwgKHdhc0lkZW50ICYmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5n
ZXQgfHwgKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCisgICAg
ICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3Jkcyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJ
Z25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtYXRjaChDT0xPTikpIHsKKyAgICAgICAgICAgIG5leHQoKTsK
KyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKGNvbnRleHQpOworICAgICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSk7CisgICAgICAgICAg
ICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVQcm9wZXJ0eTxjb21wbGV0ZT4oaWRlbnQs
IG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICB9CisgICAgICAgIGZhaWxJ
ZkZhbHNlKHdhc0lkZW50KTsKKyAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOworICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiBhY2Nlc3Nvck5hbWUgPSAwOworICAgICAgICBUcmVlRm9ybWFsUGFy
YW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0gMDsKKyAgICAgICAgVHJlZUZ1bmN0aW9uQm9keSBib2R5
ID0gMDsKKyAgICAgICAgaW50IG9wZW5CcmFjZVBvcyA9IDA7CisgICAgICAgIGludCBjbG9zZUJy
YWNlUG9zID0gMDsKKyAgICAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOworICAgICAgICBQcm9w
ZXJ0eU5vZGU6OlR5cGUgdHlwZTsKKyAgICAgICAgaWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmdldCkKKyAgICAgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6Okdl
dHRlcjsKKyAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lcy0+c2V0KQorICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6U2V0dGVyOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJz
ZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5lZWRzTmFtZSwgZmFsc2U+KGNvbnRleHQsIGFjY2Vzc29y
TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5
U3RhcnRMaW5lKSkpOworICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0
ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCB0
eXBlLCBhY2Nlc3Nvck5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZVBvcywgY2xvc2VC
cmFjZVBvcywgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSk7CisgICAgfQorICAgIGNhc2UgTlVN
QkVSOiB7CisgICAgICAgIGRvdWJsZSBwcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5kb3Vi
bGVWYWx1ZTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsK
KyAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
Y29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKG5vZGUpOworICAgICAgICByZXR1cm4gY29u
dGV4dC50ZW1wbGF0ZSBjcmVhdGVQcm9wZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxKU0dsb2Jh
bERhdGEqPihtX2dsb2JhbERhdGEpLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIFByb3BlcnR5Tm9kZTo6
Q29uc3RhbnQpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBmYWlsSWZGYWxzZShtX3Rv
a2VuLm1fdHlwZSAmIEtleXdvcmRUb2tlbkZsYWcpOworICAgICAgICBnb3RvIG5hbWVkUHJvcGVy
dHk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjo6cGFyc2VPYmplY3RMaXRlcmFsKFRyZWVCdWlsZGVyJiBjb250ZXh0KQorewor
ICAgIGludCBzdGFydE9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOworICAgIGNvbnN1
bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJSQUNFLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5n
cyk7CisgICAgCisgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIG5leHQoKTsK
KyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbChtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgVHJlZVByb3BlcnR5IHByb3BlcnR5ID0g
cGFyc2VQcm9wZXJ0eTxmYWxzZT4oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UocHJvcGVydHkp
OworICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkICYmIGNvbnRleHQuZ2V0VHlwZShw
cm9wZXJ0eSkgIT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCkgeworICAgICAgICBtX2xleGVyLT5z
ZXRPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBw
YXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CisgICAgfQorICAgIFRyZWVQcm9wZXJ0
eUxpc3QgcHJvcGVydHlMaXN0ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobV9sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSwgcHJvcGVydHkpOworICAgIFRyZWVQcm9wZXJ0eUxpc3QgdGFpbCA9
IHByb3BlcnR5TGlzdDsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgIG5leHQo
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAgICAvLyBhbGxvdyBleHRyYSBj
b21tYSwgc2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MzkKKyAg
ICAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eTxmYWxzZT4oY29udGV4dCk7CisgICAgICAgIGZhaWxJ
ZkZhbHNlKHByb3BlcnR5KTsKKyAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQg
JiYgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAhPSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7
CisgICAgICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChj
b250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0
eUxpc3QobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgcHJvcGVydHksIHRhaWwpOworICAgIH0K
KyAgICAKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0UpOworICAgIAorICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgcHJv
cGVydHlMaXN0KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBQYXJzZXI6OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4
dCkKK3sKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFDRSk7CisgICAgCisgICAgaWYgKG1hdGNo
KENMT1NFQlJBQ0UpKSB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlT2JqZWN0TGl0ZXJhbChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpKTsKKyAgICB9Cisg
ICAgCisgICAgVHJlZVByb3BlcnR5IHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eTx0cnVlPihjb250
ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7CisgICAgCisgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQsIElkZW50aWZpZXJSZXBIYXNoPiBPYmpl
Y3RWYWxpZGF0aW9uTWFwOworICAgIE9iamVjdFZhbGlkYXRpb25NYXAgb2JqZWN0VmFsaWRhdG9y
OworICAgIC8vIEFkZCB0aGUgZmlyc3QgcHJvcGVydHkKKyAgICBpZiAoIW1fc3ludGF4QWxyZWFk
eVZhbGlkYXRlZCkKKyAgICAgICAgb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUo
cHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CisgICAgCisgICAg
VHJlZVByb3BlcnR5TGlzdCBwcm9wZXJ0eUxpc3QgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlz
dChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBwcm9wZXJ0eSk7CisgICAgVHJlZVByb3BlcnR5
TGlzdCB0YWlsID0gcHJvcGVydHlMaXN0OworICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKKyAg
ICAgICAgbmV4dCgpOworICAgICAgICAvLyBhbGxvdyBleHRyYSBjb21tYSwgc2VlIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MzkKKyAgICAgICAgaWYgKG1hdGNoKENM
T1NFQlJBQ0UpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByb3BlcnR5ID0gcGFyc2VQ
cm9wZXJ0eTx0cnVlPihjb250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHkpOwor
ICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgeworICAgICAgICAgICAgc3Rk
OjpwYWlyPE9iamVjdFZhbGlkYXRpb25NYXA6Oml0ZXJhdG9yLCBib29sPiBwcm9wZXJ0eUVudHJ5
SXRlciA9IG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1lKHByb3BlcnR5KS5pbXBs
KCksIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0
eUVudHJ5SXRlci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5
RW50cnlJdGVyLmZpcnN0LT5zZWNvbmQgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CisgICAg
ICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09IFByb3Bl
cnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5n
ZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnlJdGVyLmZpcnN0LT5zZWNvbmQpOworICAg
ICAgICAgICAgICAgIHByb3BlcnR5RW50cnlJdGVyLmZpcnN0LT5zZWNvbmQgfD0gY29udGV4dC5n
ZXRUeXBlKHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0YWls
ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwg
cHJvcGVydHksIHRhaWwpOworICAgIH0KKyAgICAKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJB
Q0UpOworICAgIAorICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobV9sZXhl
ci0+bGFzdExpbmVOdW1iZXIoKSwgcHJvcGVydHlMaXN0KTsKK30KKwordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQXJyYXlMaXRlcmFsKFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJS
QUNLRVQsIFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKKyAgICAKKyAgICBpbnQgZWxp
c2lvbnMgPSAwOworICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKKyAgICAgICAgbmV4dChUcmVl
QnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgICAgIGVsaXNpb25zKys7CisgICAgfQor
ICAgIGlmIChtYXRjaChDTE9TRUJSQUNLRVQpKSB7CisgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6
OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJheSht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBlbGlzaW9ucyk7CisgICAgfQorICAgIAorICAgIFRy
ZWVFeHByZXNzaW9uIGVsZW0gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwor
ICAgIGZhaWxJZkZhbHNlKGVsZW0pOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpFbGVtZW50
TGlzdCBlbGVtZW50TGlzdCA9IGNvbnRleHQuY3JlYXRlRWxlbWVudExpc3QoZWxpc2lvbnMsIGVs
ZW0pOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpFbGVtZW50TGlzdCB0YWlsID0gZWxlbWVu
dExpc3Q7CisgICAgZWxpc2lvbnMgPSAwOworICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKKyAg
ICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgICAgIGVsaXNp
b25zID0gMDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKKyAgICAg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGVsaXNpb25zKys7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChtYXRjaChDTE9TRUJSQUNLRVQpKSB7CisgICAgICAgICAgICBuZXh0
KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKKyAgICAgICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUFycmF5KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGVsaXNpb25zLCBlbGVt
ZW50TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgVHJlZUV4cHJlc3Npb24gZWxlbSA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGVsZW0p
OworICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVFbGVtZW50TGlzdCh0YWlsLCBlbGlzaW9u
cywgZWxlbSk7CisgICAgfQorICAgIAorICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VCUkFDS0VUKTsK
KyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJheShtX2xleGVyLT5sYXN0TGluZU51
bWJlcigpLCBlbGVtZW50TGlzdCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKFRyZWVCdWlsZGVy
JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKKyAgICBjYXNlIE9Q
RU5CUkFDRToKKyAgICAgICAgaWYgKHN0cmljdE1vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CisgICAgICAgIHJldHVybiBwYXJzZU9i
amVjdExpdGVyYWwoY29udGV4dCk7CisgICAgY2FzZSBPUEVOQlJBQ0tFVDoKKyAgICAgICAgcmV0
dXJuIHBhcnNlQXJyYXlMaXRlcmFsKGNvbnRleHQpOworICAgIGNhc2UgT1BFTlBBUkVOOiB7Cisg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3Vu
dDsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gcmVzdWx0ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRl
eHQpOworICAgICAgICBtX25vbkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CisgICAgICAgIGNv
bnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICBjYXNlIFRISVNUT0tFTjogeworICAgICAgICBuZXh0KCk7CisgICAgICAg
IHJldHVybiBjb250ZXh0LnRoaXNFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCkpOworICAg
IH0KKyAgICBjYXNlIElERU5UOiB7CisgICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsK
KyAgICAgICAgbmV4dCgpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRl
bnQsIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOworICAgICAg
ICBtX2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVJlc29sdmUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0KTsKKyAgICB9
CisgICAgY2FzZSBTVFJJTkc6IHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBt
X3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVTdHJpbmcobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQpOworICAg
IH0KKyAgICBjYXNlIE5VTUJFUjogeworICAgICAgICBkb3VibGUgZCA9IG1fdG9rZW4ubV9kYXRh
LmRvdWJsZVZhbHVlOworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZU51bWJlckV4cHIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZCk7CisgICAgfQorICAg
IGNhc2UgTlVMTFRPS0VOOiB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlTnVsbChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpKTsKKyAgICB9CisgICAgY2Fz
ZSBUUlVFVE9LRU46IHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVCb29sZWFuKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHRydWUpOworICAgIH0KKyAg
ICBjYXNlIEZBTFNFVE9LRU46IHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCb29sZWFuKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGZhbHNlKTsKKyAg
ICB9CisgICAgY2FzZSBESVZFUVVBTDoKKyAgICBjYXNlIERJVklERTogeworICAgICAgICAvKiBy
ZWdleHAgKi8KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogcGF0dGVybjsKKyAgICAgICAgY29u
c3QgSWRlbnRpZmllciogZmxhZ3M7CisgICAgICAgIGlmIChtYXRjaChESVZFUVVBTCkpCisgICAg
ICAgICAgICBmYWlsSWZGYWxzZShtX2xleGVyLT5zY2FuUmVnRXhwKHBhdHRlcm4sIGZsYWdzLCAn
PScpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbElmRmFsc2UobV9sZXhlci0+c2Nh
blJlZ0V4cChwYXR0ZXJuLCBmbGFncykpOworICAgICAgICAKKyAgICAgICAgaW50IHN0YXJ0ID0g
dG9rZW5TdGFydCgpOworICAgICAgICBuZXh0KCk7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIHJl
ID0gY29udGV4dC5jcmVhdGVSZWdFeHAobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgKnBhdHRl
cm4sICpmbGFncywgc3RhcnQpOworICAgICAgICBpZiAoIXJlKSB7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiB5YXJyRXJyb3JNc2cgPSBZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLT51c3RyaW5n
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSk7CisgICAg
ICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoeWFyckVycm9yTXNnKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGZhaWwoKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUFyZ3VtZW50cyBQYXJzZXI6
OnBhcnNlQXJndW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIGNvbnN1bWVPckZh
aWxXaXRoRmxhZ3MoT1BFTlBBUkVOLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Cisg
ICAgaWYgKG1hdGNoKENMT1NFUEFSRU4pKSB7CisgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRv
bnRCdWlsZFN0cmluZ3MpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcmd1bWVudHMo
KTsKKyAgICB9CisgICAgVHJlZUV4cHJlc3Npb24gZmlyc3RBcmcgPSBwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGZpcnN0QXJnKTsKKyAgICAKKyAg
ICBUcmVlQXJndW1lbnRzTGlzdCBhcmdMaXN0ID0gY29udGV4dC5jcmVhdGVBcmd1bWVudHNMaXN0
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGZpcnN0QXJnKTsKKyAgICBUcmVlQXJndW1lbnRz
TGlzdCB0YWlsID0gYXJnTGlzdDsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAg
IG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAgICBUcmVlRXhwcmVz
c2lvbiBhcmcgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBm
YWlsSWZGYWxzZShhcmcpOworICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVBcmd1bWVudHNM
aXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHRhaWwsIGFyZyk7CisgICAgfQorICAgIGNv
bnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJndW1l
bnRzKGFyZ0xpc3QpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIFBhcnNlcjo6cGFyc2VNZW1iZXJFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0
KQoreworICAgIFRyZWVFeHByZXNzaW9uIGJhc2UgPSAwOworICAgIGludCBzdGFydCA9IHRva2Vu
U3RhcnQoKTsKKyAgICBpbnQgZXhwcmVzc2lvblN0YXJ0ID0gc3RhcnQ7CisgICAgaW50IG5ld0Nv
dW50ID0gMDsKKyAgICB3aGlsZSAobWF0Y2goTkVXKSkgeworICAgICAgICBuZXh0KCk7CisgICAg
ICAgIG5ld0NvdW50Kys7CisgICAgfQorICAgIAorICAgIGlmIChtYXRjaChGVU5DVElPTikpIHsK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9ICZtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgICAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBw
YXJhbWV0ZXJzID0gMDsKKyAgICAgICAgVHJlZUZ1bmN0aW9uQm9keSBib2R5ID0gMDsKKyAgICAg
ICAgaW50IG9wZW5CcmFjZVBvcyA9IDA7CisgICAgICAgIGludCBjbG9zZUJyYWNlUG9zID0gMDsK
KyAgICAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOworICAgICAgICBuZXh0KCk7CisgICAgICAg
IGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBm
YWxzZT4oY29udGV4dCwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9z
ZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSkpOworICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVGdW5jdGlvbkV4cHIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgbmFtZSwgYm9keSwgcGFy
YW1ldGVycywgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lLCBtX2xh
c3RMaW5lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4cHJlc3Np
b24oY29udGV4dCk7CisgICAgCisgICAgZmFpbElmRmFsc2UoYmFzZSk7CisgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgeworICAgICAgICBjYXNlIE9Q
RU5CUkFDS0VUOiB7CisgICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsK
KyAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgICAg
ICAgICBuZXh0KCk7CisgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50
OworICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50
OworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gcHJvcGVydHkgPSBwYXJzZUV4cHJlc3Npb24o
Y29udGV4dCk7CisgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7CisgICAgICAgICAg
ICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50
Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmQoKSk7CisgICAg
ICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7CisgICAgICAgICAgICBtX25vbkxI
U0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIE9QRU5QQVJFTjogeworICAgICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50Kys7CisgICAgICAgICAgICBpZiAobmV3Q291bnQpIHsKKyAgICAgICAgICAgICAgICBu
ZXdDb3VudC0tOworICAgICAgICAgICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pKSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBleHByRW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgICAgICAg
ICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4
dCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7CisgICAgICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSwgYmFzZSwgYXJndW1lbnRzLCBzdGFydCwgZXhwckVuZCwgbGFzdFRva2VuRW5k
KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVOZXdFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGJhc2UsIHN0
YXJ0LCBsYXN0VG9rZW5FbmQoKSk7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAg
ICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAg
ICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQp
OworICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUobV9sZXhlci0+bGFzdExpbmVO
dW1iZXIoKSwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQs
IGxhc3RUb2tlbkVuZCgpKTsKKyAgICAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhT
Q291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIERPVDogeworICAgICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
Kys7CisgICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAg
ICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMg
fCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOworICAgICAgICAgICAgbWF0Y2hPckZh
aWwoSURFTlQpOworICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHBy
ZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOworICAgICAgICAgICAgbmV4
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVzc2lvbjsKKyAgICAgICAgfQorICAgIH0KK2Vu
ZE1lbWJlckV4cHJlc3Npb246CisgICAgd2hpbGUgKG5ld0NvdW50LS0pCisgICAgICAgIGJhc2Ug
PSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgYmFzZSwg
c3RhcnQsIGxhc3RUb2tlbkVuZCgpKTsKKyAgICByZXR1cm4gYmFzZTsKK30KKwordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlVW5hcnlFeHBy
ZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVy
OjpVbmFyeUV4cHJDb250ZXh0IHVuYXJ5RXhwckNvbnRleHQoY29udGV4dCk7CisgICAgQWxsb3dJ
bk92ZXJyaWRlIGFsbG93SW5PdmVycmlkZSh0aGlzKTsKKyAgICBpbnQgdG9rZW5TdGFja0RlcHRo
ID0gMDsKKyAgICBib29sIG1vZGlmaWVzRXhwciA9IGZhbHNlOworICAgIGJvb2wgcmVxdWlyZXNM
RXhwciA9IGZhbHNlOworICAgIHdoaWxlIChpc1VuYXJ5T3AobV90b2tlbi5tX3R5cGUpKSB7Cisg
ICAgICAgIGlmIChzdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUExVU1BMVVM6CisgICAgICAgICAgICBjYXNlIE1J
TlVTTUlOVVM6CisgICAgICAgICAgICBjYXNlIEFVVE9QTFVTUExVUzoKKyAgICAgICAgICAgIGNh
c2UgQVVUT01JTlVTTUlOVVM6CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShyZXF1aXJlc0xF
eHByKTsKKyAgICAgICAgICAgICAgICBtb2RpZmllc0V4cHIgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJlcXVpcmVzTEV4cHIgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBERUxFVEVUT0tFTjoKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHJlcXVp
cmVzTEV4cHIpOworICAgICAgICAgICAgICAgIHJlcXVpcmVzTEV4cHIgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBm
YWlsSWZUcnVlKHJlcXVpcmVzTEV4cHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICAgICAgY29u
dGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwgbV90b2tlbi5tX3R5cGUsIHRv
a2VuU3RhcnQoKSk7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50Kys7CisgICAgfQorICAgIGludCBzdWJFeHByU3RhcnQgPSB0b2tlblN0YXJ0KCk7
CisgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlTWVtYmVyRXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICBmYWlsSWZGYWxzZShleHByKTsKKyAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0g
ZmFsc2U7CisgICAgaWYgKHN0cmljdE1vZGUoKSAmJiAhbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVk
KSB7CisgICAgICAgIGlmIChjb250ZXh0LmlzUmVzb2x2ZShleHByKSkKKyAgICAgICAgICAgIGlz
RXZhbE9yQXJndW1lbnRzID0gKm1fbGFzdElkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsIHx8ICptX2xhc3RJZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzOworICAgIH0KKyAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRo
TmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMgJiYgbW9kaWZpZXNFeHByLCAiJyIsIG1f
bGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBt
b2RlIik7CisgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgeworICAgIGNhc2UgUExVU1BMVVM6
CisgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX25vbkxI
U0NvdW50Kys7CisgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCBleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQsIGxhc3RU
b2tlbkVuZCgpLCB0b2tlbkVuZCgpKTsKKyAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAg
ICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1l
bnRzLCAiJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVk
IGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChyZXF1aXJlc0xF
eHByKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1JTlVTTUlO
VVM6CisgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX25v
bkxIU0NvdW50Kys7CisgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShtX2xl
eGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBPcE1pbnVzTWludXMsIHN1YkV4cHJTdGFydCwg
bGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCkpOworICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsr
OworICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JB
cmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9k
aWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KHJlcXVp
cmVzTEV4cHIpOworICAgICAgICBuZXh0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpbnQgZW5kID0gbGFzdFRva2VuRW5k
KCk7CisgICAgCisgICAgaWYgKCFUcmVlQnVpbGRlcjo6Q3JlYXRlc0FTVCAmJiAobV9zeW50YXhB
bHJlYWR5VmFsaWRhdGVkIHx8ICFzdHJpY3RNb2RlKCkpKQorICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICAKKyAgICB3aGlsZSAodG9rZW5TdGFja0RlcHRoKSB7CisgICAgICAgIHN3aXRjaCAoY29u
dGV4dC51bmFyeVRva2VuU3RhY2tMYXN0VHlwZSh0b2tlblN0YWNrRGVwdGgpKSB7CisgICAgICAg
IGNhc2UgRVhDTEFNQVRJT046CisgICAgICAgICAgICBleHByID0gY29udGV4dC5jcmVhdGVMb2dp
Y2FsTm90KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVElMREU6CisgICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtl
Qml0d2lzZU5vdE5vZGUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNSU5VUzoKKyAgICAgICAgICAgIGV4cHIgPSBjb250
ZXh0Lm1ha2VOZWdhdGVOb2RlKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExVUzoKKyAgICAgICAgICAgIGV4cHIgPSBj
b250ZXh0LmNyZWF0ZVVuYXJ5UGx1cyhtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMVVNQTFVTOgorICAgICAgICBjYXNl
IEFVVE9QTFVTUExVUzoKKyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2Rl
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIE9wUGx1c1BsdXMsIGNvbnRleHQudW5h
cnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEs
IGVuZCk7CisgICAgICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTUlOVVNNSU5VUzoKKyAgICAgICAgY2FzZSBBVVRPTUlOVVNNSU5V
UzoKKyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGV4cHIsIE9wTWludXNNaW51cywgY29udGV4dC51bmFyeVRva2VuU3Rh
Y2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5kKTsKKyAg
ICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUWVBFT0Y6CisgICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlVHlwZU9mTm9k
ZShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFZPSURUT0tFTjoKKyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0LmNyZWF0
ZVZvaWQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBERUxFVEVUT0tFTjoKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0
cmljdFdpdGhOYW1lQW5kTWVzc2FnZShjb250ZXh0LmlzUmVzb2x2ZShleHByKSwgIkNhbm5vdCBk
ZWxldGUgdW5xdWFsaWZpZWQgcHJvcGVydHkiLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICJp
biBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZURlbGV0ZU5v
ZGUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgY29udGV4dC51bmFyeVRva2VuU3Rh
Y2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgZW5kLCBlbmQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSBzb21l
dGhpbmcgaGFzIGdvbmUgaG9ycmlibHkgaG9ycmlibHkgd3JvbmcKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgIH0KKyAgICAgICAgc3ViRXhwclN0YXJ0ID0gY29udGV4dC51bmFyeVRva2Vu
U3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKTsKKyAgICAgICAgY29udGV4dC51bmFyeVRv
a2VuU3RhY2tSZW1vdmVMYXN0KHRva2VuU3RhY2tEZXB0aCk7CisgICAgfQorICAgIHJldHVybiBl
eHByOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkocmV2aXNpb24gOTg3MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVk
ZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CisjaW5jbHVkZSAiUGFyc2VyVG9rZW5zLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIK
KyNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtMzgsOTcgKzQwLDk5OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNz
IEZ1bmN0aW9uQm9keU5vZGU7Ci0gICAgCi0gICAgY2xhc3MgUHJvZ3JhbU5vZGU7Ci0gICAgY2xh
c3MgVVN0cmluZzsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEZ1bmN0aW9uQm9keU5vZGU7Citj
bGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7CitjbGFzcyBJZGVudGlmaWVyOworY2xhc3MgSlNHbG9i
YWxEYXRhOworY2xhc3MgUGFyc2VyOworY2xhc3MgUHJvZ3JhbU5vZGU7CitjbGFzcyBTb3VyY2VD
b2RlOworY2xhc3MgVVN0cmluZzsKKworI2RlZmluZSBmYWlsKCkgZG8geyBpZiAoIW1fZXJyb3Ip
IHVwZGF0ZUVycm9yTWVzc2FnZSgpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFp
bFdpdGhUb2tlbih0b2spIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvck1lc3NhZ2UodG9r
KTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxXaXRoTWVzc2FnZShtc2cpIGRv
IHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvck1lc3NhZ2UobXNnKTsgcmV0dXJuIDA7IH0gd2hp
bGUgKDApCisjZGVmaW5lIGZhaWxXaXRoTmFtZUFuZE1lc3NhZ2UoYmVmb3JlLCBuYW1lLCBhZnRl
cikgZG8geyBpZiAoIW1fZXJyb3IpIHVwZGF0ZUVycm9yV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9y
ZSwgbmFtZSwgYWZ0ZXIpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmRmFs
c2UoY29uZCkgZG8geyBpZiAoIShjb25kKSkgZmFpbCgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBm
YWlsSWZGYWxzZVdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAoIShjb25kKSkgZmFpbFdp
dGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZkZhbHNlV2l0aE5hbWVB
bmRNZXNzYWdlKGNvbmQsIGJlZm9yZSwgbmFtZSwgbXNnKSBkbyB7IGlmICghKGNvbmQpKSBmYWls
V2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgbXNnKTsgfSB3aGlsZSAoMCkKKyNkZWZp
bmUgZmFpbElmVHJ1ZShjb25kKSBkbyB7IGlmICgoY29uZCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgZmFpbElmVHJ1ZVdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAoKGNvbmQp
KSBmYWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmVHJ1ZVdp
dGhOYW1lQW5kTWVzc2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIG1zZykgZG8geyBpZiAoKGNvbmQp
KSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgbXNnKTsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgZmFpbElmVHJ1ZUlmU3RyaWN0KGNvbmQpIGRvIHsgaWYgKChjb25kKSAmJiBzdHJp
Y3RNb2RlKCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmVHJ1ZUlmU3RyaWN0
V2l0aE1lc3NhZ2UoY29uZCwgbXNnKSBkbyB7IGlmICgoY29uZCkgJiYgc3RyaWN0TW9kZSgpKSBm
YWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmVHJ1ZUlmU3Ry
aWN0V2l0aE5hbWVBbmRNZXNzYWdlKGNvbmQsIGJlZm9yZSwgbmFtZSwgYWZ0ZXIpIGRvIHsgaWYg
KChjb25kKSAmJiBzdHJpY3RNb2RlKCkpIGZhaWxXaXRoTmFtZUFuZE1lc3NhZ2UoYmVmb3JlLCBu
YW1lLCBhZnRlcik7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZkZhbHNlSWZTdHJpY3QoY29u
ZCkgZG8geyBpZiAoKCEoY29uZCkpICYmIHN0cmljdE1vZGUoKSkgZmFpbCgpOyB9IHdoaWxlICgw
KQorI2RlZmluZSBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE1lc3NhZ2UoY29uZCwgbXNnKSBkbyB7
IGlmICgoIShjb25kKSkgJiYgc3RyaWN0TW9kZSgpKSBmYWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3
aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShj
b25kLCBiZWZvcmUsIG5hbWUsIGFmdGVyKSBkbyB7IGlmICgoIShjb25kKSkgJiYgc3RyaWN0TW9k
ZSgpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpOyB9IHdoaWxl
ICgwKQorI2RlZmluZSBjb25zdW1lT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAoIWNvbnN1bWUo
dG9rZW5UeXBlKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxlICgwKQorI2RlZmlu
ZSBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKHRva2VuVHlwZSwgZmxhZ3MpIGRvIHsgaWYgKCFjb25z
dW1lKHRva2VuVHlwZSwgZmxhZ3MpKSBmYWlsV2l0aFRva2VuKHRva2VuVHlwZSk7IH0gd2hpbGUg
KDApCisjZGVmaW5lIG1hdGNoT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAoIW1hdGNoKHRva2Vu
VHlwZSkpIGZhaWxXaXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFp
bElmU3RhY2tPdmVyZmxvdygpIGRvIHsgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShjYW5SZWN1cnNl
KCksICJDb2RlIG5lc3RlZCB0b28gZGVlcGx5LiIpOyB9IHdoaWxlICgwKQorCisgICAgLy8gTWFj
cm9zIHRvIG1ha2UgdGhlIG1vcmUgY29tbW9uIFRyZWVCdWlsZGVyIHR5cGVzIGEgbGl0dGxlIGxl
c3MgdmVyYm9zZQorI2RlZmluZSBUcmVlU3RhdGVtZW50IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpT
dGF0ZW1lbnQKKyNkZWZpbmUgVHJlZUV4cHJlc3Npb24gdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkV4
cHJlc3Npb24KKyNkZWZpbmUgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OkZvcm1hbFBhcmFtZXRlckxpc3QKKyNkZWZpbmUgVHJlZVNvdXJjZUVsZW1lbnRzIHR5
cGVuYW1lIFRyZWVCdWlsZGVyOjpTb3VyY2VFbGVtZW50cworI2RlZmluZSBUcmVlQ2xhdXNlIHR5
cGVuYW1lIFRyZWVCdWlsZGVyOjpDbGF1c2UKKyNkZWZpbmUgVHJlZUNsYXVzZUxpc3QgdHlwZW5h
bWUgVHJlZUJ1aWxkZXI6OkNsYXVzZUxpc3QKKyNkZWZpbmUgVHJlZUNvbnN0RGVjbExpc3QgdHlw
ZW5hbWUgVHJlZUJ1aWxkZXI6OkNvbnN0RGVjbExpc3QKKyNkZWZpbmUgVHJlZUFyZ3VtZW50cyB0
eXBlbmFtZSBUcmVlQnVpbGRlcjo6QXJndW1lbnRzCisjZGVmaW5lIFRyZWVBcmd1bWVudHNMaXN0
IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpBcmd1bWVudHNMaXN0CisjZGVmaW5lIFRyZWVGdW5jdGlv
bkJvZHkgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keQorI2RlZmluZSBUcmVlUHJv
cGVydHkgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5CisjZGVmaW5lIFRyZWVQcm9wZXJ0
eUxpc3QgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5TGlzdAorCitDT01QSUxFX0FTU0VS
VChMYXN0VW50YWdnZWRUb2tlbiA8IDY0LCBMZXNzVGhhbjY0VW50YWdnZWRUb2tlbnMpOworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZSgpIHsgcmV0dXJuIGZh
bHNlOyB9Cit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc0V2YWxOb2RlPEV2YWxOb2RlPigpIHsg
cmV0dXJuIHRydWU7IH0KKworc3RydWN0IERlcHRoTWFuYWdlciB7CisgICAgRGVwdGhNYW5hZ2Vy
KGludCogZGVwdGgpCisgICAgICAgIDogbV9vcmlnaW5hbERlcHRoKCpkZXB0aCkKKyAgICAgICAg
LCBtX2RlcHRoKGRlcHRoKQorICAgIHsKKyAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdGVtcGxh
dGUgPD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZTxFdmFsTm9kZT4oKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBQYXJzZXJBcmVuYURhdGEgOiBQYXJz
ZXJBcmVuYURlbGV0YWJsZSB7IFQgZGF0YTsgfTsKLQotICAgIGNsYXNzIFBhcnNlciB7Ci0gICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcnNlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotICAgIHB1YmxpYzoKLSAgICAgICAgUGFyc2VyKCkgeyB9Ci0gICAgICAgIHRlbXBsYXRlIDxj
bGFzcyBQYXJzZWROb2RlPgotICAgICAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciosIEV4ZWNTdGF0ZSos
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgSlNQYXJzZXJT
dHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKLQotICAgICAgICB2
b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJBcmVuYURhdGE8RGVj
bGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiosIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
YXN0TGluZSwgaW50IG51bUNvbnN0YW50cywgSWRlbnRpZmllclNldCYpOworICAgIH5EZXB0aE1h
bmFnZXIoKQorICAgIHsKKyAgICAgICAgKm1fZGVwdGggPSBtX29yaWdpbmFsRGVwdGg7CisgICAg
fQogCi0gICAgICAgIFBhcnNlckFyZW5hJiBhcmVuYSgpIHsgcmV0dXJuIG1fYXJlbmE7IH0KK3By
aXZhdGU6CisgICAgaW50IG1fb3JpZ2luYWxEZXB0aDsKKyAgICBpbnQqIG1fZGVwdGg7Cit9Owor
CitzdHJ1Y3QgU2NvcGVMYWJlbEluZm8geworICAgIFNjb3BlTGFiZWxJbmZvKFN0cmluZ0ltcGwq
IGlkZW50LCBib29sIGlzTG9vcCkKKyAgICAgICAgOiBtX2lkZW50KGlkZW50KQorICAgICAgICAs
IG1faXNMb29wKGlzTG9vcCkKKyAgICB7CisgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
dm9pZCBwYXJzZShKU0dsb2JhbERhdGEqLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBKU1BhcnNlclN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIG1vZGUsIGludCogZXJyTGluZSwgVVN0
cmluZyogZXJyTXNnKTsKKyAgICBTdHJpbmdJbXBsKiBtX2lkZW50OworICAgIGJvb2wgbV9pc0xv
b3A7Cit9OworCitzdHJ1Y3QgU2NvcGUgeworICAgIFNjb3BlKGNvbnN0IEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgYm9vbCBpc0Z1bmN0aW9uLCBib29sIHN0cmljdE1vZGUpCisgICAgICAgIDog
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZh
bHNlKQorICAgICAgICAsIG1fdXNlc0V2YWwoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0Z1bGxB
Y3RpdmF0aW9uKGZhbHNlKQorICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHModHJ1ZSkKKyAgICAg
ICAgLCBtX3N0cmljdE1vZGUoc3RyaWN0TW9kZSkKKyAgICAgICAgLCBtX2lzRnVuY3Rpb24oaXNG
dW5jdGlvbikKKyAgICAgICAgLCBtX2lzRnVuY3Rpb25Cb3VuZGFyeShmYWxzZSkKKyAgICAgICAg
LCBtX2lzVmFsaWRTdHJpY3RNb2RlKHRydWUpCisgICAgICAgICwgbV9sb29wRGVwdGgoMCkKKyAg
ICAgICAgLCBtX3N3aXRjaERlcHRoKDApCisgICAgeworICAgIH0KIAotICAgICAgICAvLyBVc2Vk
IHRvIGRldGVybWluZSB0eXBlIG9mIGVycm9yIHRvIHJlcG9ydC4KLSAgICAgICAgYm9vbCBpc0Z1
bmN0aW9uQm9keU5vZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9v
bCBpc0Z1bmN0aW9uQm9keU5vZGUoRnVuY3Rpb25Cb2R5Tm9kZSopIHsgcmV0dXJuIHRydWU7IH0K
LQotICAgICAgICBQYXJzZXJBcmVuYSBtX2FyZW5hOwotICAgICAgICBjb25zdCBTb3VyY2VDb2Rl
KiBtX3NvdXJjZTsKLSAgICAgICAgU291cmNlRWxlbWVudHMqIG1fc291cmNlRWxlbWVudHM7Ci0g
ICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiBtX3Zh
ckRlY2xhcmF0aW9uczsKLSAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tz
OjpGdW5jdGlvblN0YWNrPiogbV9mdW5jRGVjbGFyYXRpb25zOwotICAgICAgICBJZGVudGlmaWVy
U2V0IG1fY2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVz
OwotICAgICAgICBpbnQgbV9sYXN0TGluZTsKLSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwot
ICAgIH07CisgICAgU2NvcGUoY29uc3QgU2NvcGUmIHJocykKKyAgICAgICAgOiBtX2dsb2JhbERh
dGEocmhzLm1fZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1f
c2hhZG93c0FyZ3VtZW50cykKKyAgICAgICAgLCBtX3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQor
ICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9u
KQorICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHMocmhzLm1fYWxsb3dzTmV3RGVjbHMpCisgICAg
ICAgICwgbV9zdHJpY3RNb2RlKHJocy5tX3N0cmljdE1vZGUpCisgICAgICAgICwgbV9pc0Z1bmN0
aW9uKHJocy5tX2lzRnVuY3Rpb24pCisgICAgICAgICwgbV9pc0Z1bmN0aW9uQm91bmRhcnkocmhz
Lm1faXNGdW5jdGlvbkJvdW5kYXJ5KQorICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUocmhz
Lm1faXNWYWxpZFN0cmljdE1vZGUpCisgICAgICAgICwgbV9sb29wRGVwdGgocmhzLm1fbG9vcERl
cHRoKQorICAgICAgICAsIG1fc3dpdGNoRGVwdGgocmhzLm1fc3dpdGNoRGVwdGgpCisgICAgewor
ICAgICAgICBpZiAocmhzLm1fbGFiZWxzKSB7CisgICAgICAgICAgICBtX2xhYmVscyA9IGFkb3B0
UHRyKG5ldyBMYWJlbFN0YWNrKTsKKworICAgICAgICAgICAgdHlwZWRlZiBMYWJlbFN0YWNrOjpj
b25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5t
X2xhYmVscy0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gcmhzLm1fbGFi
ZWxzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgbV9sYWJlbHMt
PmFwcGVuZChTY29wZUxhYmVsSW5mbyhpdC0+bV9pZGVudCwgaXQtPm1faXNMb29wKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0U3dpdGNoKCkgeyBtX3N3aXRjaERlcHRoKys7
IH0KKyAgICB2b2lkIGVuZFN3aXRjaCgpIHsgbV9zd2l0Y2hEZXB0aC0tOyB9CisgICAgdm9pZCBz
dGFydExvb3AoKSB7IG1fbG9vcERlcHRoKys7IH0KKyAgICB2b2lkIGVuZExvb3AoKSB7IEFTU0VS
VChtX2xvb3BEZXB0aCk7IG1fbG9vcERlcHRoLS07IH0KKyAgICBib29sIGluTG9vcCgpIHsgcmV0
dXJuICEhbV9sb29wRGVwdGg7IH0KKyAgICBib29sIGJyZWFrSXNWYWxpZCgpIHsgcmV0dXJuIG1f
bG9vcERlcHRoIHx8IG1fc3dpdGNoRGVwdGg7IH0KKyAgICBib29sIGNvbnRpbnVlSXNWYWxpZCgp
IHsgcmV0dXJuIG1fbG9vcERlcHRoOyB9CisKKyAgICB2b2lkIHB1c2hMYWJlbChjb25zdCBJZGVu
dGlmaWVyKiBsYWJlbCwgYm9vbCBpc0xvb3ApCisgICAgeworICAgICAgICBpZiAoIW1fbGFiZWxz
KQorICAgICAgICAgICAgbV9sYWJlbHMgPSBhZG9wdFB0cihuZXcgTGFiZWxTdGFjayk7CisgICAg
ICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJlbEluZm8obGFiZWwtPmltcGwoKSwgaXNMb29w
KSk7CisgICAgfQorCisgICAgdm9pZCBwb3BMYWJlbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9sYWJlbHMpOworICAgICAgICBBU1NFUlQobV9sYWJlbHMtPnNpemUoKSk7CisgICAgICAgIG1f
bGFiZWxzLT5yZW1vdmVMYXN0KCk7CisgICAgfQorCisgICAgU2NvcGVMYWJlbEluZm8qIGdldExh
YmVsKGNvbnN0IElkZW50aWZpZXIqIGxhYmVsKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xhYmVs
cykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBmb3IgKGludCBpID0gbV9sYWJlbHMt
PnNpemUoKTsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKG1fbGFiZWxzLT5hdChpIC0g
MSkubV9pZGVudCA9PSBsYWJlbC0+aW1wbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAmbV9s
YWJlbHMtPmF0KGkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICB2b2lkIHNldElzRnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgbV9pc0Z1bmN0aW9uID0g
dHJ1ZTsKKyAgICAgICAgbV9pc0Z1bmN0aW9uQm91bmRhcnkgPSB0cnVlOworICAgIH0KKyAgICBi
b29sIGlzRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzRnVuY3Rpb247IH0KKyAgICBib29sIGlzRnVu
Y3Rpb25Cb3VuZGFyeSgpIHsgcmV0dXJuIG1faXNGdW5jdGlvbkJvdW5kYXJ5OyB9CisKKyAgICBi
b29sIGRlY2xhcmVWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKKyAgICB7CisgICAg
ICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
PmV2YWwgIT0gKmlkZW50ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
ICE9ICppZGVudDsKKyAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmlj
dE1vZGUgJiYgaXNWYWxpZFN0cmljdE1vZGU7CisgICAgICAgIG1fZGVjbGFyZWRWYXJpYWJsZXMu
YWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRTdHJp
Y3RNb2RlOworICAgIH0KKworICAgIHZvaWQgZGVjbGFyZVdyaXRlKGNvbnN0IElkZW50aWZpZXIq
IGlkZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RyaWN0TW9kZSk7CisgICAgICAgIG1f
d3JpdHRlblZhcmlhYmxlcy5hZGQoaWRlbnQtPmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBw
cmV2ZW50TmV3RGVjbHMoKSB7IG1fYWxsb3dzTmV3RGVjbHMgPSBmYWxzZTsgfQorICAgIGJvb2wg
YWxsb3dzTmV3RGVjbHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c05ld0RlY2xzOyB9CisKKyAg
ICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCisgICAgewor
ICAgICAgICBib29sIGlzQXJndW1lbnRzID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5h
cmd1bWVudHMgPT0gKmlkZW50OworICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9k
ZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnVzdHJpbmcoKS5pbXBsKCkpLnNlY29uZCAmJiBt
X2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmICFpc0FyZ3VtZW50
czsKKyAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUgJiYg
aXNWYWxpZFN0cmljdE1vZGU7CisgICAgICAgIGlmIChpc0FyZ3VtZW50cykKKyAgICAgICAgICAg
IG1fc2hhZG93c0FyZ3VtZW50cyA9IHRydWU7CisgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0
TW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50LCBib29sIGlzRXZhbCkKKyAgICB7CisgICAgICAgIG1fdXNlc0V2YWwgfD0gaXNFdmFsOwor
ICAgICAgICBtX3VzZWRWYXJpYWJsZXMuYWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldE5lZWRzRnVsbEFjdGl2YXRpb24oKSB7IG1fbmVlZHNGdWxsQWN0
aXZhdGlvbiA9IHRydWU7IH0KKworICAgIGJvb2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUq
IG5lc3RlZFNjb3BlLCBib29sIHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKQorICAgIHsKKyAg
ICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX3VzZXNFdmFsKQorICAgICAgICAgICAgbV91c2VzRXZh
bCA9IHRydWU7CisgICAgICAgIElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG5lc3RlZFNj
b3BlLT5tX3VzZWRWYXJpYWJsZXMuZW5kKCk7CisgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6
aXRlcmF0b3IgcHRyID0gbmVzdGVkU2NvcGUtPm1fdXNlZFZhcmlhYmxlcy5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX2RlY2xhcmVk
VmFyaWFibGVzLmNvbnRhaW5zKCpwdHIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFkZCgqcHRyKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKKyAgICAgICAgICAgICAgICBtX2Nsb3NlZFZhcmlhYmxl
cy5hZGQoKnB0cik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX3dyaXR0
ZW5WYXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRv
ciBlbmQgPSBuZXN0ZWRTY29wZS0+bV93cml0dGVuVmFyaWFibGVzLmVuZCgpOworICAgICAgICAg
ICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBwdHIgPSBuZXN0ZWRTY29wZS0+bV93cml0
dGVuVmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5lc3RlZFNjb3BlLT5tX2RlY2xhcmVkVmFyaWFibGVzLmNvbnRhaW5zKCpwdHIpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX3dyaXR0ZW5W
YXJpYWJsZXMuYWRkKCpwdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBnZXRVbmNhcHR1cmVkV3JpdHRlblZhcmlh
YmxlcyhJZGVudGlmaWVyU2V0JiB3cml0dGVuVmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgSWRl
bnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0gbV93cml0dGVuVmFyaWFibGVzLmVuZCgpOworICAg
ICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9IG1fd3JpdHRlblZhcmlhYmxl
cy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgaWYgKCFtX2RlY2xh
cmVkVmFyaWFibGVzLmNvbnRhaW5zKCpwdHIpKQorICAgICAgICAgICAgICAgIHdyaXR0ZW5WYXJp
YWJsZXMuYWRkKCpwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBnZXRDYXB0dXJl
ZFZhcmlhYmxlcyhJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcykKKyAgICB7CisgICAg
ICAgIGlmIChtX25lZWRzRnVsbEFjdGl2YXRpb24gfHwgbV91c2VzRXZhbCkgeworICAgICAgICAg
ICAgY2FwdHVyZWRWYXJpYWJsZXMuc3dhcChtX2RlY2xhcmVkVmFyaWFibGVzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJh
dG9yIHB0ciA9IG1fY2xvc2VkVmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBtX2Nsb3NlZFZhcmlh
Ymxlcy5lbmQoKTsgKytwdHIpIHsKKyAgICAgICAgICAgIGlmICghbV9kZWNsYXJlZFZhcmlhYmxl
cy5jb250YWlucygqcHRyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGNhcHR1cmVkVmFyaWFibGVzLmFkZCgqcHRyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lk
IHNldFN0cmljdE1vZGUoKSB7IG1fc3RyaWN0TW9kZSA9IHRydWU7IH0KKyAgICBib29sIHN0cmlj
dE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdE1vZGU7IH0KKyAgICBib29sIGlzVmFsaWRT
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkU3RyaWN0TW9kZTsgfQorICAgIGJv
b2wgc2hhZG93c0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0FyZ3VtZW50czsg
fQorCisgICAgdm9pZCBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3Rvcihjb25zdCBJZGVudGlm
aWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBjYXB0
dXJlZFZhcmlhYmxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRv
ciBpdCA9IGNhcHR1cmVkVmFyaWFibGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgaWYgKG1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKml0KSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoKml0KTsKKyAgICAg
ICAgfQorICAgICAgICB2ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNh
dmVGdW5jdGlvbkluZm8oU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGluZm8pCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsKKyAgICAgICAgaW5mby0+dXNlc0V2YWwgPSBtX3Vz
ZXNFdmFsOworICAgICAgICBpbmZvLT5zdHJpY3RNb2RlID0gbV9zdHJpY3RNb2RlOworICAgICAg
ICBpbmZvLT5uZWVkc0Z1bGxBY3RpdmF0aW9uID0gbV9uZWVkc0Z1bGxBY3RpdmF0aW9uOworICAg
ICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3RvcihtX3dyaXR0ZW5WYXJpYWJsZXMsIGlu
Zm8tPndyaXR0ZW5WYXJpYWJsZXMpOworICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1Zl
Y3RvcihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVzZWRWYXJpYWJsZXMpOworICAgIH0KKworICAg
IHZvaWQgcmVzdG9yZUZ1bmN0aW9uSW5mbyhjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSog
aW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOworICAgICAgICBtX3Vz
ZXNFdmFsID0gaW5mby0+dXNlc0V2YWw7CisgICAgICAgIG1fc3RyaWN0TW9kZSA9IGluZm8tPnN0
cmljdE1vZGU7CisgICAgICAgIG1fbmVlZHNGdWxsQWN0aXZhdGlvbiA9IGluZm8tPm5lZWRzRnVs
bEFjdGl2YXRpb247CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBpbmZvLT51c2VkVmFyaWFibGVz
LnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgICAgIG1fdXNlZFZhcmlhYmxlcy5hZGQoaW5mby0+dXNlZFZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgIHNpemUgPSBpbmZvLT53cml0dGVuVmFyaWFibGVzLnNpemUoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIG1fd3JpdHRlblZh
cmlhYmxlcy5hZGQoaW5mby0+d3JpdHRlblZhcmlhYmxlc1tpXSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIGJvb2wgbV9zaGFk
b3dzQXJndW1lbnRzIDogMTsKKyAgICBib29sIG1fdXNlc0V2YWwgOiAxOworICAgIGJvb2wgbV9u
ZWVkc0Z1bGxBY3RpdmF0aW9uIDogMTsKKyAgICBib29sIG1fYWxsb3dzTmV3RGVjbHMgOiAxOwor
ICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKKyAgICBib29sIG1faXNGdW5jdGlvbiA6IDE7Cisg
ICAgYm9vbCBtX2lzRnVuY3Rpb25Cb3VuZGFyeSA6IDE7CisgICAgYm9vbCBtX2lzVmFsaWRTdHJp
Y3RNb2RlIDogMTsKKyAgICBpbnQgbV9sb29wRGVwdGg7CisgICAgaW50IG1fc3dpdGNoRGVwdGg7
CisKKyAgICB0eXBlZGVmIFZlY3RvcjxTY29wZUxhYmVsSW5mbywgMj4gTGFiZWxTdGFjazsKKyAg
ICBPd25QdHI8TGFiZWxTdGFjaz4gbV9sYWJlbHM7CisgICAgSWRlbnRpZmllclNldCBtX2RlY2xh
cmVkVmFyaWFibGVzOworICAgIElkZW50aWZpZXJTZXQgbV91c2VkVmFyaWFibGVzOworICAgIElk
ZW50aWZpZXJTZXQgbV9jbG9zZWRWYXJpYWJsZXM7CisgICAgSWRlbnRpZmllclNldCBtX3dyaXR0
ZW5WYXJpYWJsZXM7Cit9OworCit0eXBlZGVmIFZlY3RvcjxTY29wZSwgMTA+IFNjb3BlU3RhY2s7
CisKK3N0cnVjdCBTY29wZVJlZiB7CisgICAgU2NvcGVSZWYoU2NvcGVTdGFjayogc2NvcGVTdGFj
aywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9zY29wZVN0YWNrKHNjb3BlU3RhY2spCisg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIFNjb3BlKiBvcGVyYXRv
ci0+KCkgeyByZXR1cm4gJm1fc2NvcGVTdGFjay0+YXQobV9pbmRleCk7IH0KKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIGJvb2wgaGFzQ29udGFp
bmluZ1Njb3BlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4ICYmICFtX3Njb3BlU3Rh
Y2stPmF0KG1faW5kZXgpLmlzRnVuY3Rpb25Cb3VuZGFyeSgpOworICAgIH0KKworICAgIFNjb3Bl
UmVmIGNvbnRhaW5pbmdTY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ29udGFpbmlu
Z1Njb3BlKCkpOworICAgICAgICByZXR1cm4gU2NvcGVSZWYobV9zY29wZVN0YWNrLCBtX2luZGV4
IC0gMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFNjb3BlU3RhY2sqIG1fc2NvcGVTdGFjazsK
KyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworCitjbGFzcyBQYXJzZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFBhcnNlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisK
K3B1YmxpYzoKKyAgICBQYXJzZXIoSlNHbG9iYWxEYXRhKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1
bmN0aW9uUGFyYW1ldGVycyosIEpTUGFyc2VyU3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlKTsKKyAg
ICB+UGFyc2VyKCk7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLSAgICBQYXNz
UmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgRXhlY1N0YXRlKiBkZWJ1Z2dlckV4ZWNT
dGF0ZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU09iamVjdCoqIGV4Y2VwdGlv
bikKKyAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciosIEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiopOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUgeworICAgICAgICBBbGxvd0luT3Zl
cnJpZGUoUGFyc2VyKiBwYXJzZXIpCisgICAgICAgICAgICA6IG1fcGFyc2VyKHBhcnNlcikKKyAg
ICAgICAgICAgICwgbV9vbGRBbGxvd3NJbihwYXJzZXItPm1fYWxsb3dzSW4pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHBhcnNlci0+bV9hbGxvd3NJbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgfkFsbG93SW5PdmVycmlkZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5t
X2FsbG93c0luID0gbV9vbGRBbGxvd3NJbjsKKyAgICAgICAgfQorICAgICAgICBQYXJzZXIqIG1f
cGFyc2VyOworICAgICAgICBib29sIG1fb2xkQWxsb3dzSW47CisgICAgfTsKKworICAgIHN0cnVj
dCBBdXRvUG9wU2NvcGVSZWYgOiBwdWJsaWMgU2NvcGVSZWYgeworICAgICAgICBBdXRvUG9wU2Nv
cGVSZWYoUGFyc2VyKiBwYXJzZXIsIFNjb3BlUmVmIHNjb3BlKQorICAgICAgICA6IFNjb3BlUmVm
KHNjb3BlKQorICAgICAgICAsIG1fcGFyc2VyKHBhcnNlcikKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB+QXV0b1BvcFNjb3BlUmVmKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1fcGFyc2VyKQorICAgICAgICAgICAgICAgIG1fcGFyc2VyLT5wb3BTY29wZSgq
dGhpcywgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFBvcHBl
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcGFyc2VyID0gMDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQYXJzZXIqIG1fcGFyc2VyOworICAgIH07CisK
KyAgICBTY29wZVJlZiBjdXJyZW50U2NvcGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNjb3Bl
UmVmKCZtX3Njb3BlU3RhY2ssIG1fc2NvcGVTdGFjay5zaXplKCkgLSAxKTsKKyAgICB9CisgICAg
CisgICAgU2NvcGVSZWYgcHVzaFNjb3BlKCkKKyAgICB7CisgICAgICAgIGJvb2wgaXNGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICBib29sIGlzU3RyaWN0ID0gZmFsc2U7CisgICAgICAgIGlmICgh
bV9zY29wZVN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaXNTdHJpY3QgPSBtX3Njb3Bl
U3RhY2subGFzdCgpLnN0cmljdE1vZGUoKTsKKyAgICAgICAgICAgIGlzRnVuY3Rpb24gPSBtX3Nj
b3BlU3RhY2subGFzdCgpLmlzRnVuY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICBtX3Njb3Bl
U3RhY2suYXBwZW5kKFNjb3BlKG1fZ2xvYmFsRGF0YSwgaXNGdW5jdGlvbiwgaXNTdHJpY3QpKTsK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRTY29wZSgpOworICAgIH0KKyAgICAKKyAgICBib29sIHBv
cFNjb3BlSW50ZXJuYWwoU2NvcGVSZWYmIHNjb3BlLCBib29sIHNob3VsZFRyYWNrQ2xvc2VkVmFy
aWFibGVzKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
ICAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEqZXhjZXB0aW9uKTsKLSAgICAgICAgaW50IGVyckxp
bmU7Ci0gICAgICAgIFVTdHJpbmcgZXJyTXNnOwotCi0gICAgICAgIG1fc291cmNlID0gJnNvdXJj
ZTsKLSAgICAgICAgaWYgKFBhcnNlZE5vZGU6OnNjb3BlSXNGdW5jdGlvbikKLSAgICAgICAgICAg
IGxleGljYWxHbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5sZXhlci0+c2V0SXNSZXBhcnNpbmco
KTsKLSAgICAgICAgcGFyc2UoJmxleGljYWxHbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgcGFy
YW1ldGVycywgc3RyaWN0bmVzcywgUGFyc2VkTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNl
RnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0K
LSAgICAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKLSAgICAgICAgaWYgKG1fc291cmNl
RWxlbWVudHMpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZSgmbGV4
aWNhbEdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLAotICAgICAgICAgICAgICAgIG1fc291cmNl
RWxlbWVudHMsCi0gICAgICAgICAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNs
YXJhdGlvbnMtPmRhdGEgOiAwLAotICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/
ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAotICAgICAgICAgICAgICAgIG1fY2FwdHVy
ZWRWYXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgc291cmNlLAotICAgICAgICAgICAgICAgIG1f
ZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICAgICAg
cmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgICAgICAvLyBXZSBj
YW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4gcmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNp
bmNlIHdlIHNob3VsZCBoYXZlCi0gICAgICAgICAgICAvLyByZXBvcnRlZCB0aGUgZXJyb3Igd2hl
biBwYXJzaW5nIHRoZSBjb250YWluaW5nIHByb2dyYW0gb3IgZXZhbCBjb2RlLiBTbyBpZiB3ZSdy
ZQotICAgICAgICAgICAgLy8gcGFyc2luZyBhIGZ1bmN0aW9uIGJvZHkgbm9kZSwgd2UgYXNzdW1l
IHRoYXQgd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBoZXJlIGlzIHRoYXQKLSAgICAgICAgICAgIC8v
IHdlIHJhbiBvdXQgb2Ygc3RhY2sgd2hpbGUgcGFyc2luZy4gSWYgd2Ugc2VlIGFuIGVycm9yIHdo
aWxlIHBhcnNpbmcgZXZhbCBvciBwcm9ncmFtCi0gICAgICAgICAgICAvLyBjb2RlIHdlIGFzc3Vt
ZSB0aGF0IGl0IHdhcyBhIHN5bnRheCBlcnJvciBzaW5jZSBydW5uaW5nIG91dCBvZiBzdGFjayBp
cyBtdWNoIGxlc3MKLSAgICAgICAgICAgIC8vIGxpa2VseSwgYW5kIHdlIGFyZSBjdXJyZW50bHkg
dW5hYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBjYXNlcy4KLSAgICAgICAgICAg
IGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+KDApKSkKLSAg
ICAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNFdmFsTm9kZTxQYXJzZWRO
b2RlPigpKQotICAgICAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTeW50YXhFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJNc2cpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCBzY29wZS5pbmRleCgpID09IG1fc2NvcGVTdGFjay5zaXplKCkgLSAxKTsKKyAgICAgICAgQVNT
RVJUKG1fc2NvcGVTdGFjay5zaXplKCkgPiAxKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX3Nj
b3BlU3RhY2tbbV9zY29wZVN0YWNrLnNpemUoKSAtIDJdLmNvbGxlY3RGcmVlVmFyaWFibGVzKCZt
X3Njb3BlU3RhY2subGFzdCgpLCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcyk7CisgICAgICAg
IG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIGJvb2wgcG9wU2NvcGUoU2NvcGVSZWYmIHNjb3BlLCBib29sIHNob3VsZFRy
YWNrQ2xvc2VkVmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBvcFNjb3BlSW50ZXJu
YWwoc2NvcGUsIHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBwb3BTY29wZShBdXRvUG9wU2NvcGVSZWYmIHNjb3BlLCBib29sIHNob3VsZFRyYWNrQ2xv
c2VkVmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgc2NvcGUuc2V0UG9wcGVkKCk7CisgICAgICAg
IHJldHVybiBwb3BTY29wZUludGVybmFsKHNjb3BlLCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxl
cyk7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVjbGFyZVZhcmlhYmxlKGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaSA9IG1fc2NvcGVTdGFjay5zaXpl
KCkgLSAxOworICAgICAgICBBU1NFUlQoaSA8IG1fc2NvcGVTdGFjay5zaXplKCkpOworICAgICAg
ICB3aGlsZSAoIW1fc2NvcGVTdGFja1tpXS5hbGxvd3NOZXdEZWNscygpKSB7CisgICAgICAgICAg
ICBpLS07CisgICAgICAgICAgICBBU1NFUlQoaSA8IG1fc2NvcGVTdGFjay5zaXplKCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBtX3Njb3BlU3RhY2tbaV0uZGVjbGFyZVZhcmlhYmxlKGlk
ZW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWNsYXJlV3JpdGUoY29uc3QgSWRlbnRpZmll
ciogaWRlbnQpCisgICAgeworICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkK
KyAgICAgICAgICAgIG1fc2NvcGVTdGFjay5sYXN0KCkuZGVjbGFyZVdyaXRlKGlkZW50KTsKKyAg
ICB9CisgICAgCisgICAgU2NvcGVTdGFjayBtX3Njb3BlU3RhY2s7CisgICAgCisgICAgY29uc3Qg
U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGZpbmRDYWNoZWRGdW5jdGlvbkluZm8oaW50IG9wZW5C
cmFjZVBvcykgCisgICAgeworICAgICAgICByZXR1cm4gbV9mdW5jdGlvbkNhY2hlID8gbV9mdW5j
dGlvbkNhY2hlLT5nZXQob3BlbkJyYWNlUG9zKSA6IDA7CisgICAgfQorCisgICAgUGFyc2VyKCk7
CisgICAgVVN0cmluZyBwYXJzZUlubmVyKCk7CisKKyAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmco
U291cmNlRWxlbWVudHMqLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0
YWNrPiosIAorICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFy
YXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29kZUZlYXR1cmVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQsIGludCwgSWRlbnRpZmllclNldCYpOworCisgICAgLy8gVXNlZCB0
byBkZXRlcm1pbmUgdHlwZSBvZiBlcnJvciB0byByZXBvcnQuCisgICAgYm9vbCBpc0Z1bmN0aW9u
Qm9keU5vZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRnVuY3Rp
b25Cb2R5Tm9kZShGdW5jdGlvbkJvZHlOb2RlKikgeyByZXR1cm4gdHJ1ZTsgfQorCisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgbmV4dCh1bnNpZ25lZCBsZXhUeXBlID0gMCkKKyAgICB7CisgICAg
ICAgIG1fbGFzdExpbmUgPSBtX3Rva2VuLm1faW5mby5saW5lOworICAgICAgICBtX2xhc3RUb2tl
bkVuZCA9IG1fdG9rZW4ubV9pbmZvLmVuZE9mZnNldDsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFz
dExpbmVOdW1iZXIobV9sYXN0TGluZSk7CisgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhl
ci0+bGV4KCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4ubV9pbmZvLCBsZXhUeXBlLCBzdHJpY3RN
b2RlKCkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBuZXh0RXhwZWN0SWRlbnRp
Zmllcih1bnNpZ25lZCBsZXhUeXBlID0gMCkKKyAgICB7CisgICAgICAgIG1fbGFzdExpbmUgPSBt
X3Rva2VuLm1faW5mby5saW5lOworICAgICAgICBtX2xhc3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9p
bmZvLmVuZE9mZnNldDsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobV9sYXN0
TGluZSk7CisgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+bGV4RXhwZWN0SWRlbnRp
ZmllcigmbV90b2tlbi5tX2RhdGEsICZtX3Rva2VuLm1faW5mbywgbGV4VHlwZSwgc3RyaWN0TW9k
ZSgpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmV4dFRva2VuSXNDb2xvbigp
CisgICAgeworICAgICAgICByZXR1cm4gbV9sZXhlci0+bmV4dFRva2VuSXNDb2xvbigpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjb25zdW1lKEpTVG9rZW5UeXBlIGV4cGVjdGVk
LCB1bnNpZ25lZCBmbGFncyA9IDApCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IG1fdG9r
ZW4ubV90eXBlID09IGV4cGVjdGVkOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAg
bmV4dChmbGFncyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEFM
V0FZU19JTkxJTkUgVVN0cmluZyBnZXRUb2tlbigpIHsKKyAgICAgICAgU291cmNlUHJvdmlkZXIq
IHNvdXJjZVByb3ZpZGVyID0gbV9zb3VyY2UtPnByb3ZpZGVyKCk7CisgICAgICAgIHJldHVybiBV
U3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5nZXRSYW5nZSh0b2tlblN0YXJ0KCksIHRva2VuRW5kKCkp
LmltcGwoKSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBtYXRjaChKU1Rv
a2VuVHlwZSBleHBlY3RlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1fdHlwZSA9
PSBleHBlY3RlZDsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSBpbnQgdG9rZW5TdGFy
dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV90b2tlbi5tX2luZm8uc3RhcnRPZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2VuTGluZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV90b2tlbi5tX2luZm8ubGluZTsKKyAgICB9CisgICAgCisgICAgQUxXQVlT
X0lOTElORSBpbnQgdG9rZW5FbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9p
bmZvLmVuZE9mZnNldDsKKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogZ2V0VG9rZW5OYW1l
KEpTVG9rZW5UeXBlIHRvaykgCisgICAgeworICAgICAgICBzd2l0Y2ggKHRvaykgeworICAgICAg
ICBjYXNlIE5VTExUT0tFTjogCisgICAgICAgICAgICByZXR1cm4gIm51bGwiOworICAgICAgICBj
YXNlIFRSVUVUT0tFTjoKKyAgICAgICAgICAgIHJldHVybiAidHJ1ZSI7CisgICAgICAgIGNhc2Ug
RkFMU0VUT0tFTjogCisgICAgICAgICAgICByZXR1cm4gImZhbHNlIjsKKyAgICAgICAgY2FzZSBC
UkVBSzogCisgICAgICAgICAgICByZXR1cm4gImJyZWFrIjsKKyAgICAgICAgY2FzZSBDQVNFOiAK
KyAgICAgICAgICAgIHJldHVybiAiY2FzZSI7CisgICAgICAgIGNhc2UgREVGQVVMVDogCisgICAg
ICAgICAgICByZXR1cm4gImRlZnVhbHQiOworICAgICAgICBjYXNlIEZPUjogCisgICAgICAgICAg
ICByZXR1cm4gImZvciI7CisgICAgICAgIGNhc2UgTkVXOiAKKyAgICAgICAgICAgIHJldHVybiAi
bmV3IjsKKyAgICAgICAgY2FzZSBWQVI6IAorICAgICAgICAgICAgcmV0dXJuICJ2YXIiOworICAg
ICAgICBjYXNlIENPTlNUVE9LRU46IAorICAgICAgICAgICAgcmV0dXJuICJjb25zdCI7CisgICAg
ICAgIGNhc2UgQ09OVElOVUU6IAorICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisgICAg
ICAgIGNhc2UgRlVOQ1RJT046IAorICAgICAgICAgICAgcmV0dXJuICJmdW5jdGlvbiI7CisgICAg
ICAgIGNhc2UgSUY6IAorICAgICAgICAgICAgcmV0dXJuICJpZiI7CisgICAgICAgIGNhc2UgVEhJ
U1RPS0VOOiAKKyAgICAgICAgICAgIHJldHVybiAidGhpcyI7CisgICAgICAgIGNhc2UgRE86IAor
ICAgICAgICAgICAgcmV0dXJuICJkbyI7CisgICAgICAgIGNhc2UgV0hJTEU6IAorICAgICAgICAg
ICAgcmV0dXJuICJ3aGlsZSI7CisgICAgICAgIGNhc2UgU1dJVENIOiAKKyAgICAgICAgICAgIHJl
dHVybiAic3dpdGNoIjsKKyAgICAgICAgY2FzZSBXSVRIOiAKKyAgICAgICAgICAgIHJldHVybiAi
d2l0aCI7CisgICAgICAgIGNhc2UgVEhST1c6IAorICAgICAgICAgICAgcmV0dXJuICJ0aHJvdyI7
CisgICAgICAgIGNhc2UgVFJZOiAKKyAgICAgICAgICAgIHJldHVybiAidHJ5IjsKKyAgICAgICAg
Y2FzZSBDQVRDSDogCisgICAgICAgICAgICByZXR1cm4gImNhdGNoIjsKKyAgICAgICAgY2FzZSBG
SU5BTExZOiAKKyAgICAgICAgICAgIHJldHVybiAiZmluYWxseSI7CisgICAgICAgIGNhc2UgREVC
VUdHRVI6IAorICAgICAgICAgICAgcmV0dXJuICJkZWJ1Z2dlciI7CisgICAgICAgIGNhc2UgRUxT
RTogCisgICAgICAgICAgICByZXR1cm4gImVsc2UiOworICAgICAgICBjYXNlIE9QRU5CUkFDRTog
CisgICAgICAgICAgICByZXR1cm4gInsiOworICAgICAgICBjYXNlIENMT1NFQlJBQ0U6IAorICAg
ICAgICAgICAgcmV0dXJuICJ9IjsKKyAgICAgICAgY2FzZSBPUEVOUEFSRU46IAorICAgICAgICAg
ICAgcmV0dXJuICIoIjsKKyAgICAgICAgY2FzZSBDTE9TRVBBUkVOOiAKKyAgICAgICAgICAgIHJl
dHVybiAiKSI7CisgICAgICAgIGNhc2UgT1BFTkJSQUNLRVQ6IAorICAgICAgICAgICAgcmV0dXJu
ICJbIjsKKyAgICAgICAgY2FzZSBDTE9TRUJSQUNLRVQ6IAorICAgICAgICAgICAgcmV0dXJuICJd
IjsKKyAgICAgICAgY2FzZSBDT01NQTogCisgICAgICAgICAgICByZXR1cm4gIiwiOworICAgICAg
ICBjYXNlIFFVRVNUSU9OOiAKKyAgICAgICAgICAgIHJldHVybiAiPyI7CisgICAgICAgIGNhc2Ug
U0VNSUNPTE9OOiAKKyAgICAgICAgICAgIHJldHVybiAiOyI7CisgICAgICAgIGNhc2UgQ09MT046
IAorICAgICAgICAgICAgcmV0dXJuICI6IjsKKyAgICAgICAgY2FzZSBET1Q6IAorICAgICAgICAg
ICAgcmV0dXJuICIuIjsKKyAgICAgICAgY2FzZSBFUVVBTDogCisgICAgICAgICAgICByZXR1cm4g
Ij0iOworICAgICAgICBjYXNlIFBMVVNFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIis9IjsK
KyAgICAgICAgY2FzZSBNSU5VU0VRVUFMOiAKKyAgICAgICAgICAgIHJldHVybiAiLT0iOworICAg
ICAgICBjYXNlIE1VTFRFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIio9IjsKKyAgICAgICAg
Y2FzZSBESVZFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIi89IjsKKyAgICAgICAgY2FzZSBM
U0hJRlRFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIjw8PSI7CisgICAgICAgIGNhc2UgUlNI
SUZURVFVQUw6IAorICAgICAgICAgICAgcmV0dXJuICI+Pj0iOworICAgICAgICBjYXNlIFVSU0hJ
RlRFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIj4+Pj0iOworICAgICAgICBjYXNlIEFOREVR
VUFMOiAKKyAgICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIE1PREVRVUFMOiAK
KyAgICAgICAgICAgIHJldHVybiAiJT0iOworICAgICAgICBjYXNlIFhPUkVRVUFMOiAKKyAgICAg
ICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNlIE9SRVFVQUw6IAorICAgICAgICAgICAg
cmV0dXJuICJ8PSI7CisgICAgICAgIGNhc2UgQVVUT1BMVVNQTFVTOiAKKyAgICAgICAgY2FzZSBQ
TFVTUExVUzogCisgICAgICAgICAgICByZXR1cm4gIisrIjsKKyAgICAgICAgY2FzZSBBVVRPTUlO
VVNNSU5VUzogCisgICAgICAgIGNhc2UgTUlOVVNNSU5VUzogCisgICAgICAgICAgICByZXR1cm4g
Ii0tIjsKKyAgICAgICAgY2FzZSBFWENMQU1BVElPTjogCisgICAgICAgICAgICByZXR1cm4gIiEi
OworICAgICAgICBjYXNlIFRJTERFOiAKKyAgICAgICAgICAgIHJldHVybiAifiI7CisgICAgICAg
IGNhc2UgVFlQRU9GOiAKKyAgICAgICAgICAgIHJldHVybiAidHlwZW9mIjsKKyAgICAgICAgY2Fz
ZSBWT0lEVE9LRU46IAorICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsKKyAgICAgICAgY2FzZSBE
RUxFVEVUT0tFTjogCisgICAgICAgICAgICByZXR1cm4gImRlbGV0ZSI7CisgICAgICAgIGNhc2Ug
T1I6IAorICAgICAgICAgICAgcmV0dXJuICJ8fCI7CisgICAgICAgIGNhc2UgQU5EOiAKKyAgICAg
ICAgICAgIHJldHVybiAiJiYiOworICAgICAgICBjYXNlIEJJVE9SOiAKKyAgICAgICAgICAgIHJl
dHVybiAifCI7CisgICAgICAgIGNhc2UgQklUWE9SOiAKKyAgICAgICAgICAgIHJldHVybiAiXiI7
CisgICAgICAgIGNhc2UgQklUQU5EOiAKKyAgICAgICAgICAgIHJldHVybiAiJiI7CisgICAgICAg
IGNhc2UgRVFFUTogCisgICAgICAgICAgICByZXR1cm4gIj09IjsKKyAgICAgICAgY2FzZSBORTog
CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKyAgICAgICAgY2FzZSBTVFJFUTogCisgICAgICAg
ICAgICByZXR1cm4gIj09PSI7CisgICAgICAgIGNhc2UgU1RSTkVROiAKKyAgICAgICAgICAgIHJl
dHVybiAiIT09IjsKKyAgICAgICAgY2FzZSBMVDogCisgICAgICAgICAgICByZXR1cm4gIjwiOwor
ICAgICAgICBjYXNlIEdUOiAKKyAgICAgICAgICAgIHJldHVybiAiPiI7CisgICAgICAgIGNhc2Ug
TEU6IAorICAgICAgICAgICAgcmV0dXJuICI8PSI7CisgICAgICAgIGNhc2UgR0U6IAorICAgICAg
ICAgICAgcmV0dXJuICI+PSI7CisgICAgICAgIGNhc2UgSU5TVEFOQ0VPRjogCisgICAgICAgICAg
ICByZXR1cm4gImluc3RhbmNlb2YiOworICAgICAgICBjYXNlIElOVE9LRU46IAorICAgICAgICAg
ICAgcmV0dXJuICJpbiI7CisgICAgICAgIGNhc2UgTFNISUZUOiAKKyAgICAgICAgICAgIHJldHVy
biAiPDwiOworICAgICAgICBjYXNlIFJTSElGVDogCisgICAgICAgICAgICByZXR1cm4gIj4+IjsK
KyAgICAgICAgY2FzZSBVUlNISUZUOiAKKyAgICAgICAgICAgIHJldHVybiAiPj4+IjsKKyAgICAg
ICAgY2FzZSBQTFVTOiAKKyAgICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgTUlO
VVM6IAorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUSU1FUzogCisgICAg
ICAgICAgICByZXR1cm4gIioiOworICAgICAgICBjYXNlIERJVklERTogCisgICAgICAgICAgICBy
ZXR1cm4gIi8iOworICAgICAgICBjYXNlIE1PRDogCisgICAgICAgICAgICByZXR1cm4gIiUiOwor
ICAgICAgICBjYXNlIFJFVFVSTjogCisgICAgICAgIGNhc2UgUkVTRVJWRURfSUZfU1RSSUNUOgor
ICAgICAgICBjYXNlIFJFU0VSVkVEOiAKKyAgICAgICAgY2FzZSBOVU1CRVI6CisgICAgICAgIGNh
c2UgSURFTlQ6IAorICAgICAgICBjYXNlIFNUUklORzogCisgICAgICAgIGNhc2UgRVJST1JUT0s6
CisgICAgICAgIGNhc2UgRU9GVE9LOiAKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIExhc3RVbnRhZ2dlZFRva2VuOiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gImludGVybmFsIGVy
cm9yIjsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVwZGF0ZUVycm9yTWVz
c2FnZVNwZWNpYWxDYXNlKEpTVG9rZW5UeXBlIGV4cGVjdGVkVG9rZW4pIAorICAgIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFRva2VuKSB7
CisgICAgICAgIGNhc2UgUkVTRVJWRURfSUZfU1RSSUNUOgorICAgICAgICAgICAgZXJyb3JNZXNz
YWdlID0gIlVzZSBvZiByZXNlcnZlZCB3b3JkICciOworICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ICs9IGdldFRva2VuKCkuaW1wbCgpOworICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICInIGlu
IHN0cmljdCBtb2RlIjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdl
LmltcGwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBSRVNFUlZFRDoKKyAg
ICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJVc2Ugb2YgcmVzZXJ2ZWQgd29yZCAnIjsKKyAgICAg
ICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmltcGwoKTsKKyAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSArPSAiJyI7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVz
c2FnZS5pbXBsKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTlVNQkVSOiAK
KyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJVbmV4cGVjdGVkIG51bWJlciAnIjsKKyAgICAg
ICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmltcGwoKTsKKyAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSArPSAiJyI7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVz
c2FnZS5pbXBsKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgSURFTlQ6IAor
ICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYnV0IGZv
dW5kICciOworICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGdldFRva2VuKCkuaW1wbCgpOwor
ICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICInIGluc3RlYWQiOworICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFNUUklORzogCisgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVW5leHBl
Y3RlZCBzdHJpbmcgIjsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmlt
cGwoKTsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmltcGwoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFUlJPUlRPSzogCisgICAgICAgICAg
ICBlcnJvck1lc3NhZ2UgPSAiVW5yZWNvZ25pemVkIHRva2VuICciOworICAgICAgICAgICAgZXJy
b3JNZXNzYWdlICs9IGdldFRva2VuKCkuaW1wbCgpOworICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ICs9ICInIjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmltcGwo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFT0ZUT0s6ICAKKyAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBSRVRVUk46CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJS
ZXR1cm4gc3RhdGVtZW50cyBhcmUgb25seSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiaW50ZXJuYWwgZXJyb3Ii
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5FVkVS
X0lOTElORSB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZSgpIAorICAgIHsKKyAgICAgICAgbV9lcnJv
ciA9IHRydWU7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnZXRUb2tlbk5hbWUobV90b2tl
bi5tX3R5cGUpOworICAgICAgICBpZiAoIW5hbWUpIAorICAgICAgICAgICAgdXBkYXRlRXJyb3JN
ZXNzYWdlU3BlY2lhbENhc2UobV90b2tlbi5tX3R5cGUpOworICAgICAgICBlbHNlIAorICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBVU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJVbmV4cGVjdGVk
IHRva2VuICclcyciLCBuYW1lKS5pbXBsKCkpOworICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJ
TkUgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2UoSlNUb2tlblR5cGUgZXhwZWN0ZWRUb2tlbikgCisg
ICAgeworICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9
IGdldFRva2VuTmFtZShleHBlY3RlZFRva2VuKTsKKyAgICAgICAgaWYgKG5hbWUpCisgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IFVTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIHRv
a2VuICclcyciLCBuYW1lKS5pbXBsKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICghZ2V0VG9rZW5OYW1lKG1fdG9rZW4ubV90eXBlKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVF
cnJvck1lc3NhZ2VTcGVjaWFsQ2FzZShtX3Rva2VuLm1fdHlwZSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGFkZEVycm9ySW5mbygmbGV4aWNhbEdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBjcmVhdGVTeW50YXhFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBlcnJNc2cpLCBlcnJMaW5lLCBzb3VyY2UpOworICAgICAgICAgICAgICAgIHVwZGF0ZUVy
cm9yTWVzc2FnZVNwZWNpYWxDYXNlKGV4cGVjdGVkVG9rZW4pOworICAgICAgICB9IAorICAgIH0K
KyAgICAKKyAgICBORVZFUl9JTkxJTkUgdm9pZCB1cGRhdGVFcnJvcldpdGhOYW1lQW5kTWVzc2Fn
ZShjb25zdCBjaGFyKiBiZWZvcmVNc2csIFVTdHJpbmcgbmFtZSwgY29uc3QgY2hhciogYWZ0ZXJN
c2cpIAorICAgIHsKKyAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgIFN0cmluZyBwcmVm
aXgoYmVmb3JlTXNnKTsKKyAgICAgICAgU3RyaW5nIHBvc3RmaXgoYWZ0ZXJNc2cpOworICAgICAg
ICBwcmVmaXggKz0gIiAnIjsKKyAgICAgICAgcHJlZml4ICs9IG5hbWUuaW1wbCgpOworICAgICAg
ICBwcmVmaXggKz0gIicgIjsKKyAgICAgICAgcHJlZml4ICs9IHBvc3RmaXg7CisgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gcHJlZml4LmltcGwoKTsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5M
SU5FIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1zZykgCisgICAgeyAgIAor
ICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBVU3RyaW5n
KG1zZyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRMb29wKCkgeyBjdXJyZW50U2NvcGUo
KS0+c3RhcnRMb29wKCk7IH0KKyAgICB2b2lkIGVuZExvb3AoKSB7IGN1cnJlbnRTY29wZSgpLT5l
bmRMb29wKCk7IH0KKyAgICB2b2lkIHN0YXJ0U3dpdGNoKCkgeyBjdXJyZW50U2NvcGUoKS0+c3Rh
cnRTd2l0Y2goKTsgfQorICAgIHZvaWQgZW5kU3dpdGNoKCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5k
U3dpdGNoKCk7IH0KKyAgICB2b2lkIHNldFN0cmljdE1vZGUoKSB7IGN1cnJlbnRTY29wZSgpLT5z
ZXRTdHJpY3RNb2RlKCk7IH0KKyAgICBib29sIHN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50
U2NvcGUoKS0+c3RyaWN0TW9kZSgpOyB9CisgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSgpIHsg
cmV0dXJuIGN1cnJlbnRTY29wZSgpLT5pc1ZhbGlkU3RyaWN0TW9kZSgpOyB9CisgICAgYm9vbCBk
ZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KSB7IHJldHVybiBjdXJyZW50
U2NvcGUoKS0+ZGVjbGFyZVBhcmFtZXRlcihpZGVudCk7IH0KKyAgICBib29sIGJyZWFrSXNWYWxp
ZCgpCisgICAgeworICAgICAgICBTY29wZVJlZiBjdXJyZW50ID0gY3VycmVudFNjb3BlKCk7Cisg
ICAgICAgIHdoaWxlICghY3VycmVudC0+YnJlYWtJc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudC5oYXNDb250YWluaW5nU2NvcGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jb250YWluaW5nU2NvcGUoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgYm9vbCBjb250aW51
ZUlzVmFsaWQoKQorICAgIHsKKyAgICAgICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29w
ZSgpOworICAgICAgICB3aGlsZSAoIWN1cnJlbnQtPmNvbnRpbnVlSXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ29udGFpbmluZ1Njb3BlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY29udGFpbmlu
Z1Njb3BlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHZv
aWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIqIGxhYmVsLCBib29sIGlzTG9vcCkgeyBjdXJy
ZW50U2NvcGUoKS0+cHVzaExhYmVsKGxhYmVsLCBpc0xvb3ApOyB9CisgICAgdm9pZCBwb3BMYWJl
bCgpIHsgY3VycmVudFNjb3BlKCktPnBvcExhYmVsKCk7IH0KKyAgICBTY29wZUxhYmVsSW5mbyog
Z2V0TGFiZWwoY29uc3QgSWRlbnRpZmllciogbGFiZWwpCisgICAgeworICAgICAgICBTY29wZVJl
ZiBjdXJyZW50ID0gY3VycmVudFNjb3BlKCk7CisgICAgICAgIFNjb3BlTGFiZWxJbmZvKiByZXN1
bHQgPSAwOworICAgICAgICB3aGlsZSAoIShyZXN1bHQgPSBjdXJyZW50LT5nZXRMYWJlbChsYWJl
bCkpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ29udGFpbmluZ1Njb3BlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5j
b250YWluaW5nU2NvcGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBlbnVtIFNvdXJjZUVsZW1lbnRzTW9kZSB7IENoZWNrRm9yU3RyaWN0TW9k
ZSwgRG9udENoZWNrRm9yU3RyaWN0TW9kZSB9OworICAgIHRlbXBsYXRlIDxTb3VyY2VFbGVtZW50
c01vZGUgbW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZVNv
dXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiwgY29uc3QgSWRl
bnRpZmllciomIGRpcmVjdGl2ZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVZhckRlY2xh
cmF0aW9uKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IHBhcnNlQ29uc3REZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZURvV2hpbGVTdGF0
ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgcGFyc2VXaGlsZVN0YXRlbWVudChUcmVlQnVpbGRlciYpOworICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZvclN0YXRlbWVudChU
cmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBwYXJzZUJyZWFrU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlQ29udGludWVTdGF0ZW1lbnQoVHJl
ZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgcGFyc2VSZXR1cm5TdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VUaHJvd1N0YXRlbWVudChUcmVlQnVp
bGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBw
YXJzZVdpdGhTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
KTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2VMaXN0IHBhcnNl
U3dpdGNoQ2xhdXNlcyhUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUNsYXVzZSBwYXJzZVN3aXRjaERlZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VUcnlT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudChUcmVlQnVpbGRlciYpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUV4cHJlc3Np
b25TdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChUcmVlQnVp
bGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBw
YXJzZUlmU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChU
cmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3Npb24gcGFyc2VFeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5M
SU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRyZWVCdWlsZGVy
Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVF
eHByZXNzaW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOworICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJz
ZVVuYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VNZW1iZXJFeHByZXNzaW9uKFRyZWVCdWlsZGVy
Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVF
eHByZXNzaW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFy
c2VBcnJheUxpdGVyYWwoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VPYmplY3RMaXRlcmFsKFRy
ZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5M
SU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYp
OworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQXJn
dW1lbnRzIHBhcnNlQXJndW1lbnRzKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGJvb2wg
c3RyaWN0LCBjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlUHJvcGVydHkgcGFy
c2VQcm9wZXJ0eShUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVC
dWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5F
IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRl
ciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVl
RXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVj
bGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYg
bGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGlu
aXRFbmQpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBU
cmVlQ29uc3REZWNsTGlzdCBwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBj
b250ZXh0KTsKKyAgICBlbnVtIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVp
cmVtZW50cywgRnVuY3Rpb25OZWVkc05hbWUgfTsKKyAgICB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1
aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRyZWVCdWlsZGVy
PiBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciom
LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlvbkJvZHkmLCBpbnQmIG9wZW5C
cmFjZSwgaW50JiBjbG9zZUJyYWNlLCBpbnQmIGJvZHlTdGFydExpbmUpOworICAgIEFMV0FZU19J
TkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0b3IoSlNUb2tlblR5cGUpOworICAgIGJvb2wgYWxsb3dB
dXRvbWF0aWNTZW1pY29sb24oKTsKKyAgICAKKyAgICBib29sIGF1dG9TZW1pQ29sb24oKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdG9rZW4ubV90eXBlID09IFNFTUlDT0xPTikgeworICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Y2FuUmVjdXJzZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFjay5yZWN1cnNpb25DaGVj
aygpOworICAgIH0KKyAgICAKKyAgICBpbnQgbGFzdFRva2VuRW5kKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xhc3RUb2tlbkVuZDsKKyAgICB9CiAKLSAgICAgICAgbV9hcmVuYS5y
ZXNldCgpOworICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Cisg
ICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CisgICAgUGFyc2VyQXJlbmEqIG1fYXJlbmE7
CisgICAgTGV4ZXIqIG1fbGV4ZXI7CisgICAgCisgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKKyAg
ICBib29sIG1fZXJyb3I7CisgICAgVVN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKyAgICBKU1Rva2Vu
IG1fdG9rZW47CisgICAgYm9vbCBtX2FsbG93c0luOworICAgIGludCBtX2xhc3RMaW5lOworICAg
IGludCBtX2xhc3RUb2tlbkVuZDsKKyAgICBpbnQgbV9hc3NpZ25tZW50Q291bnQ7CisgICAgaW50
IG1fbm9uTEhTQ291bnQ7CisgICAgYm9vbCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQ7CisgICAg
aW50IG1fc3RhdGVtZW50RGVwdGg7CisgICAgaW50IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3Vu
dDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBtX2xhc3RJZGVudGlmaWVyOworICAgIFNvdXJjZVBy
b3ZpZGVyQ2FjaGUqIG1fZnVuY3Rpb25DYWNoZTsKKyAgICBTb3VyY2VFbGVtZW50cyogbV9zb3Vy
Y2VFbGVtZW50czsKKyAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0
YWNrPiogbV92YXJEZWNsYXJhdGlvbnM7CisgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpGdW5jdGlvblN0YWNrPiogbV9mdW5jRGVjbGFyYXRpb25zOworICAgIElkZW50aWZp
ZXJTZXQgbV9jYXB0dXJlZFZhcmlhYmxlczsKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBpbnQgbV9udW1Db25zdGFudHM7CisgICAgCisgICAgc3RydWN0IERlcHRoTWFuYWdlciB7
CisgICAgICAgIERlcHRoTWFuYWdlcihpbnQqIGRlcHRoKQorICAgICAgICA6IG1fb3JpZ2luYWxE
ZXB0aCgqZGVwdGgpCisgICAgICAgICwgbV9kZXB0aChkZXB0aCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB+RGVwdGhNYW5hZ2VyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKm1fZGVwdGggPSBtX29yaWdpbmFsRGVwdGg7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fb3JpZ2luYWxEZXB0aDsKKyAgICAgICAgaW50KiBt
X2RlcHRoOworICAgIH07Cit9OwogCi0gICAgICAgIG1fc291cmNlID0gMDsKK3RlbXBsYXRlIDxj
bGFzcyBQYXJzZWROb2RlPgorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4
ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQoreworICAg
IEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uICYmICEq
ZXhjZXB0aW9uKTsKKyAgICBpbnQgZXJyTGluZTsKKyAgICBVU3RyaW5nIGVyck1zZzsKKworICAg
IGlmIChQYXJzZWROb2RlOjpzY29wZUlzRnVuY3Rpb24pCisgICAgICAgIG1fbGV4ZXItPnNldElz
UmVwYXJzaW5nKCk7CisKKyAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKKworICAgIGVyckxpbmUg
PSAtMTsKKyAgICBlcnJNc2cgPSBVU3RyaW5nKCk7CisKKyAgICBVU3RyaW5nIHBhcnNlRXJyb3Ig
PSBwYXJzZUlubmVyKCk7CisKKyAgICBpbnQgbGluZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1i
ZXIoKTsKKyAgICBib29sIGxleEVycm9yID0gbV9sZXhlci0+c2F3RXJyb3IoKTsKKyAgICBVU3Ry
aW5nIGxleEVycm9yTWVzc2FnZSA9IGxleEVycm9yID8gbV9sZXhlci0+Z2V0RXJyb3JNZXNzYWdl
KCkgOiBVU3RyaW5nKCk7CisgICAgQVNTRVJUKGxleEVycm9yTWVzc2FnZS5pc051bGwoKSAhPSBs
ZXhFcnJvcik7CisgICAgbV9sZXhlci0+Y2xlYXIoKTsKKworICAgIGlmICghcGFyc2VFcnJvci5p
c051bGwoKSB8fCBsZXhFcnJvcikgeworICAgICAgICBlcnJMaW5lID0gbGluZU51bWJlcjsKKyAg
ICAgICAgZXJyTXNnID0gIWxleEVycm9yTWVzc2FnZS5pc051bGwoKSA/IGxleEVycm9yTWVzc2Fn
ZSA6IHBhcnNlRXJyb3I7CiAgICAgICAgIG1fc291cmNlRWxlbWVudHMgPSAwOwotICAgICAgICBt
X3ZhckRlY2xhcmF0aW9ucyA9IDA7Ci0gICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7Cisg
ICAgfQogCi0gICAgICAgIGlmIChkZWJ1Z2dlciAmJiAhUGFyc2VkTm9kZTo6c2NvcGVJc0Z1bmN0
aW9uKQotICAgICAgICAgICAgZGVidWdnZXItPnNvdXJjZVBhcnNlZChkZWJ1Z2dlckV4ZWNTdGF0
ZSwgc291cmNlLnByb3ZpZGVyKCksIGVyckxpbmUsIGVyck1zZyk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworICAgIFJlZlB0cjxQYXJzZWROb2RlPiByZXN1bHQ7CisgICAgaWYg
KG1fc291cmNlRWxlbWVudHMpIHsKKyAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRl
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8gJm1fdmFyRGVjbGFyYXRp
b25zLT5kYXRhIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVu
Y0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX251bUNvbnN0YW50cyk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291
cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSk7CisgICAgfSBlbHNlIGlmIChsZXhpY2FsR2xv
YmFsT2JqZWN0KSB7CisgICAgICAgIC8vIFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Ig
d2hlbiByZXBhcnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKKyAgICAgICAg
Ly8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFt
IG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUKKyAgICAgICAgLy8gcGFyc2luZyBhIGZ1bmN0aW9u
IGJvZHkgbm9kZSwgd2UgYXNzdW1lIHRoYXQgd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBoZXJlIGlz
IHRoYXQKKyAgICAgICAgLy8gd2UgcmFuIG91dCBvZiBzdGFjayB3aGlsZSBwYXJzaW5nLiBJZiB3
ZSBzZWUgYW4gZXJyb3Igd2hpbGUgcGFyc2luZyBldmFsIG9yIHByb2dyYW0KKyAgICAgICAgLy8g
Y29kZSB3ZSBhc3N1bWUgdGhhdCBpdCB3YXMgYSBzeW50YXggZXJyb3Igc2luY2UgcnVubmluZyBv
dXQgb2Ygc3RhY2sgaXMgbXVjaCBsZXNzCisgICAgICAgIC8vIGxpa2VseSwgYW5kIHdlIGFyZSBj
dXJyZW50bHkgdW5hYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBjYXNlcy4KKyAg
ICAgICAgaWYgKGlzRnVuY3Rpb25Cb2R5Tm9kZShzdGF0aWNfY2FzdDxQYXJzZWROb2RlKj4oMCkp
KQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZSBpZiAoaXNFdmFsTm9kZTxQYXJzZWROb2Rl
PigpKQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN5bnRheEVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIGVyck1zZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpleGNlcHRp
b24gPSBhZGRFcnJvckluZm8oJmxleGljYWxHbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgY3Jl
YXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNnKSwgZXJyTGluZSwgKm1f
c291cmNlKTsKICAgICB9CiAKKyAgICBpZiAoZGVidWdnZXIgJiYgIVBhcnNlZE5vZGU6OnNjb3Bl
SXNGdW5jdGlvbikKKyAgICAgICAgZGVidWdnZXItPnNvdXJjZVBhcnNlZChkZWJ1Z2dlckV4ZWNT
dGF0ZSwgbV9zb3VyY2UtPnByb3ZpZGVyKCksIGVyckxpbmUsIGVyck1zZyk7CisKKyAgICBtX2Fy
ZW5hLT5yZXNldCgpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBQYXJzZWROb2RlPgorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVy
cywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4
Y2VwdGlvbikKK3sKKyAgICBQYXJzZXIgcGFyc2VyKGdsb2JhbERhdGEsIHNvdXJjZSwgcGFyYW1l
dGVycywgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZTxQ
YXJzZWROb2RlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlY1N0YXRlLCBleGNl
cHRpb24pOworfQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBQYXJzZXJfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcnNlclRv
a2Vuc19oCisjZGVmaW5lIFBhcnNlclRva2Vuc19oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBJZGVudGlmaWVyOworCitlbnVtIHsKKyAgICBVbmFyeU9wVG9rZW5GbGFnID0gNjQsCisgICAg
S2V5d29yZFRva2VuRmxhZyA9IDEyOCwKKyAgICBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZVNoaWZ0
ID0gOCwKKyAgICBCaW5hcnlPcFRva2VuQWxsb3dzSW5QcmVjZWRlbmNlQWRkaXRpb25hbFNoaWZ0
ID0gNCwKKyAgICBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZU1hc2sgPSAxNSA8PCBCaW5hcnlPcFRv
a2VuUHJlY2VkZW5jZVNoaWZ0LAorfTsKKworI2RlZmluZSBCSU5BUllfT1BfUFJFQ0VERU5DRShw
cmVjKSAoKChwcmVjKSA8PCBCaW5hcnlPcFRva2VuUHJlY2VkZW5jZVNoaWZ0KSB8ICgocHJlYykg
PDwgKEJpbmFyeU9wVG9rZW5QcmVjZWRlbmNlU2hpZnQgKyBCaW5hcnlPcFRva2VuQWxsb3dzSW5Q
cmVjZWRlbmNlQWRkaXRpb25hbFNoaWZ0KSkpCisjZGVmaW5lIElOX09QX1BSRUNFREVOQ0UocHJl
YykgKChwcmVjKSA8PCAoQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCArIEJpbmFyeU9wVG9r
ZW5BbGxvd3NJblByZWNlZGVuY2VBZGRpdGlvbmFsU2hpZnQpKQorCitlbnVtIEpTVG9rZW5UeXBl
IHsKKyAgICBOVUxMVE9LRU4gPSBLZXl3b3JkVG9rZW5GbGFnLAorICAgIFRSVUVUT0tFTiwKKyAg
ICBGQUxTRVRPS0VOLAorICAgIEJSRUFLLAorICAgIENBU0UsCisgICAgREVGQVVMVCwKKyAgICBG
T1IsCisgICAgTkVXLAorICAgIFZBUiwKKyAgICBDT05TVFRPS0VOLAorICAgIENPTlRJTlVFLAor
ICAgIEZVTkNUSU9OLAorICAgIFJFVFVSTiwKKyAgICBJRiwKKyAgICBUSElTVE9LRU4sCisgICAg
RE8sCisgICAgV0hJTEUsCisgICAgU1dJVENILAorICAgIFdJVEgsCisgICAgUkVTRVJWRUQsCisg
ICAgUkVTRVJWRURfSUZfU1RSSUNULAorICAgIFRIUk9XLAorICAgIFRSWSwKKyAgICBDQVRDSCwK
KyAgICBGSU5BTExZLAorICAgIERFQlVHR0VSLAorICAgIEVMU0UsCisgICAgT1BFTkJSQUNFID0g
MCwKKyAgICBDTE9TRUJSQUNFLAorICAgIE9QRU5QQVJFTiwKKyAgICBDTE9TRVBBUkVOLAorICAg
IE9QRU5CUkFDS0VULAorICAgIENMT1NFQlJBQ0tFVCwKKyAgICBDT01NQSwKKyAgICBRVUVTVElP
TiwKKyAgICBOVU1CRVIsCisgICAgSURFTlQsCisgICAgU1RSSU5HLAorICAgIFNFTUlDT0xPTiwK
KyAgICBDT0xPTiwKKyAgICBET1QsCisgICAgRVJST1JUT0ssCisgICAgRU9GVE9LLAorICAgIEVR
VUFMLAorICAgIFBMVVNFUVVBTCwKKyAgICBNSU5VU0VRVUFMLAorICAgIE1VTFRFUVVBTCwKKyAg
ICBESVZFUVVBTCwKKyAgICBMU0hJRlRFUVVBTCwKKyAgICBSU0hJRlRFUVVBTCwKKyAgICBVUlNI
SUZURVFVQUwsCisgICAgQU5ERVFVQUwsCisgICAgTU9ERVFVQUwsCisgICAgWE9SRVFVQUwsCisg
ICAgT1JFUVVBTCwKKyAgICBMYXN0VW50YWdnZWRUb2tlbiwKKworICAgIC8vIEJlZ2luIHRhZ2dl
ZCB0b2tlbnMKKyAgICBQTFVTUExVUyA9IDAgfCBVbmFyeU9wVG9rZW5GbGFnLAorICAgIE1JTlVT
TUlOVVMgPSAxIHwgVW5hcnlPcFRva2VuRmxhZywKKyAgICBFWENMQU1BVElPTiA9IDIgfCBVbmFy
eU9wVG9rZW5GbGFnLAorICAgIFRJTERFID0gMyB8IFVuYXJ5T3BUb2tlbkZsYWcsCisgICAgQVVU
T1BMVVNQTFVTID0gNCB8IFVuYXJ5T3BUb2tlbkZsYWcsCisgICAgQVVUT01JTlVTTUlOVVMgPSA1
IHwgVW5hcnlPcFRva2VuRmxhZywKKyAgICBUWVBFT0YgPSA2IHwgVW5hcnlPcFRva2VuRmxhZyB8
IEtleXdvcmRUb2tlbkZsYWcsCisgICAgVk9JRFRPS0VOID0gNyB8IFVuYXJ5T3BUb2tlbkZsYWcg
fCBLZXl3b3JkVG9rZW5GbGFnLAorICAgIERFTEVURVRPS0VOID0gOCB8IFVuYXJ5T3BUb2tlbkZs
YWcgfCBLZXl3b3JkVG9rZW5GbGFnLAorICAgIE9SID0gMCB8IEJJTkFSWV9PUF9QUkVDRURFTkNF
KDEpLAorICAgIEFORCA9IDEgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgyKSwKKyAgICBCSVRPUiA9
IDIgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgzKSwKKyAgICBCSVRYT1IgPSAzIHwgQklOQVJZX09Q
X1BSRUNFREVOQ0UoNCksCisgICAgQklUQU5EID0gNCB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDUp
LAorICAgIEVRRVEgPSA1IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoNiksCisgICAgTkUgPSA2IHwg
QklOQVJZX09QX1BSRUNFREVOQ0UoNiksCisgICAgU1RSRVEgPSA3IHwgQklOQVJZX09QX1BSRUNF
REVOQ0UoNiksCisgICAgU1RSTkVRID0gOCB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAorICAg
IExUID0gOSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAorICAgIEdUID0gMTAgfCBCSU5BUllf
T1BfUFJFQ0VERU5DRSg3KSwKKyAgICBMRSA9IDExIHwgQklOQVJZX09QX1BSRUNFREVOQ0UoNyks
CisgICAgR0UgPSAxMiB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAorICAgIElOU1RBTkNFT0Yg
PSAxMyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpIHwgS2V5d29yZFRva2VuRmxhZywKKyAgICBJ
TlRPS0VOID0gMTQgfCBJTl9PUF9QUkVDRURFTkNFKDcpIHwgS2V5d29yZFRva2VuRmxhZywKKyAg
ICBMU0hJRlQgPSAxNSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDgpLAorICAgIFJTSElGVCA9IDE2
IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoOCksCisgICAgVVJTSElGVCA9IDE3IHwgQklOQVJZX09Q
X1BSRUNFREVOQ0UoOCksCisgICAgUExVUyA9IDE4IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoOSkg
fCBVbmFyeU9wVG9rZW5GbGFnLAorICAgIE1JTlVTID0gMTkgfCBCSU5BUllfT1BfUFJFQ0VERU5D
RSg5KSB8IFVuYXJ5T3BUb2tlbkZsYWcsCisgICAgVElNRVMgPSAyMCB8IEJJTkFSWV9PUF9QUkVD
RURFTkNFKDEwKSwKKyAgICBESVZJREUgPSAyMSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDEwKSwK
KyAgICBNT0QgPSAyMiB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDEwKQorfTsKKwordW5pb24gSlNU
b2tlbkRhdGEgeworICAgIGludCBpbnRWYWx1ZTsKKyAgICBkb3VibGUgZG91YmxlVmFsdWU7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7Cit9OworCitzdHJ1Y3QgSlNUb2tlbkluZm8gewor
ICAgIEpTVG9rZW5JbmZvKCkgOiBsaW5lKDApIHsgfQorICAgIGludCBsaW5lOworICAgIGludCBz
dGFydE9mZnNldDsKKyAgICBpbnQgZW5kT2Zmc2V0OworfTsKKworc3RydWN0IEpTVG9rZW4gewor
ICAgIEpTVG9rZW5UeXBlIG1fdHlwZTsKKyAgICBKU1Rva2VuRGF0YSBtX2RhdGE7CisgICAgSlNU
b2tlbkluZm8gbV9pbmZvOworfTsKKworZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNl
Tm9ybWFsLCBKU1BhcnNlU3RyaWN0IH07CitlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9n
cmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OworICAgIAorfQorCisKKyNlbmRpZiAvLyBQ
YXJzZXJUb2tlbnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VD
b2RlLmgJKHJldmlzaW9uIDk4NzMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGludCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZENoYXI7IH0K
ICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyLT5k
YXRhKCkgKyBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRDaGFyIC0gbV9zdGFydENoYXI7IH0KKyAgICAgICAgCisgICAgICAgIFNvdXJjZUNv
ZGUgc3ViRXhwcmVzc2lvbihpbnQsIGludCwgaW50KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9wcm92aWRlcjsKQEAgLTg2LDYgKzg4LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgcmV0dXJuIFNvdXJjZUNvZGUoVVN0cmluZ1Nv
dXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwpLCBmaXJzdExpbmUpOwogICAgIH0KKyAg
ICAKKyAgICBpbmxpbmUgU291cmNlQ29kZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKGludCBv
cGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CisgICAgICAgIEFT
U0VSVChwcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKKyAgICAgICAgcmV0
dXJuIFNvdXJjZUNvZGUocHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJyYWNlICsgMSwgZmly
c3RMaW5lKTsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5o
CShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsMTAgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiSlNQYXJz
ZXIuaCIKKyNpZm5kZWYgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1faAorI2RlZmluZSBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbV9oCisKKyNpbmNsdWRlICJQYXJzZXJUb2tlbnMuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY2
LDMgKzY5LDUgQEAgcHVibGljOgogfTsKIAogfQorCisjZW5kaWYgLy8gU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW1faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHJldmlzaW9uIDk4NzMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlIDx5YXJyL1lhcnJTeW50YXhDaGVja2VyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworICAgIAog
Y2xhc3MgU3ludGF4Q2hlY2tlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0IEJpbmFyeUV4cHJDb250
ZXh0IHsKQEAgLTYzLDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBTeW50YXhDaGVja2VyKiBt
X2NvbnRleHQ7CiAgICAgfTsKICAgICAKLSAgICBTeW50YXhDaGVja2VyKEpTR2xvYmFsRGF0YSog
LCBMZXhlciopCisgICAgU3ludGF4Q2hlY2tlcihKU0dsb2JhbERhdGEqICwgdm9pZCopCiAgICAg
ewogICAgIH0KIApAQCAtMTE4LDQyICsxMTksNDIgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXI6OkRvbnRCdWlsZFN0cmluZ3M7CiAK
ICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiAxOyB9Ci0gICAgRXhwcmVz
c2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5v
ZGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KICAg
ICB2b2lkIGFwcGVuZFRvQ29tbWEoRXhwcmVzc2lvblR5cGUmIGJhc2UsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0KSB7IGJhc2UgPSByaWdodDsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1h
RXhwcihFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUgcmlnaHQpIHsgcmV0dXJuIHJpZ2h0
OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUoRXhwcmVzc2lvblR5cGUsIE9w
ZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gQXNzaWdubWVudEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlUHJlZml4Tm9kZShF
eHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFByZUV4cHI7
IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlUG9zdGZpeE5vZGUoRXhwcmVzc2lvblR5cGUsIE9w
ZXJhdG9yLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQotICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VUeXBlT2ZOb2RlKEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBUeXBlb2ZFeHBy
OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZURlbGV0ZU5vZGUoRXhwcmVzc2lvblR5cGUsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIERlbGV0ZUV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBt
YWtlTmVnYXRlTm9kZShFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9Ci0gICAg
RXhwcmVzc2lvblR5cGUgbWFrZUJpdHdpc2VOb3ROb2RlKEV4cHJlc3Npb25UeXBlKSB7IHJldHVy
biBVbmFyeUV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KEV4cHJl
c3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVVbmFyeVBsdXMoRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQotICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZVZvaWQoRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhw
cjsgfQotICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKCkgeyByZXR1cm4gVGhpc0V4cHI7IH0K
LSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IElkZW50aWZpZXIqLCBpbnQp
IHsgcmV0dXJuIFJlc29sdmVFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0
TGl0ZXJhbCgpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlQ29tbWFFeHByKGludCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0KSB7IHJldHVybiByaWdodDsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2Rl
KGludCwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9v
bCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KKyAgICBFeHByZXNz
aW9uVHlwZSBtYWtlUHJlZml4Tm9kZShpbnQsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gUHJlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQ
b3N0Zml4Tm9kZShpbnQsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gUG9zdEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlVHlwZU9mTm9kZShp
bnQsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBUeXBlb2ZFeHByOyB9CisgICAgRXhwcmVzc2lv
blR5cGUgbWFrZURlbGV0ZU5vZGUoaW50LCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gRGVsZXRlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VOZWdhdGVOb2Rl
KGludCwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQorICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VCaXR3aXNlTm90Tm9kZShpbnQsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBV
bmFyeUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KGludCwgRXhw
cmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZVVuYXJ5UGx1cyhpbnQsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGludCwgRXhwcmVzc2lvblR5cGUpIHsgcmV0
dXJuIFVuYXJ5RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGludCkgeyByZXR1
cm4gVGhpc0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGludCwgY29u
c3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4
cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBcnJheShpbnQpIHsgcmV0dXJuIEFycmF5
TGl0ZXJhbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGlu
dCwgaW50KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZUFycmF5KGludCwgaW50KSB7IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9Ci0gICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlTnVtYmVyRXhwcihkb3VibGUpIHsgcmV0dXJuIE51bWJlckV4
cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdHJpbmcoY29uc3QgSWRlbnRpZmllciop
IHsgcmV0dXJuIFN0cmluZ0V4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCb29sZWFu
KGJvb2wpIHsgcmV0dXJuIEJvb2xFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVs
bCgpIHsgcmV0dXJuIE51bGxFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQnJhY2tl
dEFjY2VzcyhFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIEJyYWNrZXRFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRG90
QWNjZXNzKEV4cHJlc3Npb25UeXBlLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gRG90RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25z
dCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiwgaW50KSB7IHJldHVybiBZ
YXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnVzdHJpbmcoKSkgPyAwIDogUmVnRXhwRXhwcjsgfQot
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIoRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU5ld0V4cHIoRXhwcmVzc2lvblR5cGUsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9Ci0g
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKEV4cHJlc3Npb25UeXBlLCBF
eHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsg
fQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3NpZ25t
ZW50RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBJ
ZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gRnVuY3Rp
b25FeHByOyB9Ci0gICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShib29sKSB7IHJldHVybiAxOyB9
CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXJyYXkoaW50LCBpbnQsIGludCkgeyByZXR1cm4g
QXJyYXlMaXRlcmFsRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU51bWJlckV4cHIo
aW50LCBkb3VibGUpIHsgcmV0dXJuIE51bWJlckV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVTdHJpbmcoaW50LCBjb25zdCBJZGVudGlmaWVyKikgeyByZXR1cm4gU3RyaW5nRXhwcjsg
fQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJvb2xlYW4oaW50LCBib29sKSB7IHJldHVybiBC
b29sRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU51bGwoaW50KSB7IHJldHVybiBO
dWxsRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJyYWNrZXRBY2Nlc3MoaW50LCBF
eHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIEJyYWNrZXRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRG90QWNjZXNzKGlu
dCwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiBEb3RFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGludCwgY29u
c3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYsIGludCkgeyByZXR1cm4g
WWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi51c3RyaW5nKCkpID8gMCA6IFJlZ0V4cEV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGludCwgRXhwcmVzc2lvblR5cGUsIGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZU5ld0V4cHIoaW50LCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQpIHsgcmV0dXJuIE5l
d0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25kaXRpb25hbEV4cHIoaW50LCBF
eHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBD
b25kaXRpb25hbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZl
KGludCwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZUZ1bmN0aW9uRXhwcihpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KKyAgICBpbnQgY3JlYXRlRnVuY3Rp
b25Cb2R5KGludCwgYm9vbCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMo
KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIDE7
IH0KLSAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBp
bnQgY3JlYXRlQXJndW1lbnRzTGlzdChpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBj
cmVhdGVBcmd1bWVudHNMaXN0KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICB0ZW1w
bGF0ZSA8Ym9vbCBjb21wbGV0ZT4gUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRp
ZmllciogbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkKICAgICB7CiAgICAgICAg
IGlmICghY29tcGxldGUpCkBAIC0xNjUsMTAgKzE2NiwxMCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwot
ICAgICAgICByZXR1cm4gUHJvcGVydHkoJmdsb2JhbERhdGEtPnBhcnNlci0+YXJlbmEoKS5pZGVu
dGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSksIHR5
cGUpOworICAgICAgICByZXR1cm4gUHJvcGVydHkoJmdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSks
IHR5cGUpOwogICAgIH0KLSAgICBpbnQgY3JlYXRlUHJvcGVydHlMaXN0KFByb3BlcnR5KSB7IHJl
dHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChQcm9wZXJ0eSwgaW50KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChpbnQsIFByb3BlcnR5KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChpbnQsIFByb3BlcnR5LCBpbnQp
IHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50LCBpbnQpIHsgcmV0
dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50LCBpbnQsIGludCkgeyByZXR1
cm4gMTsgfQogICAgIGludCBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50aWZp
ZXImKSB7IHJldHVybiAxOyB9CkBAIC0xNzcsMzIgKzE3OCwzMiBAQCBwdWJsaWM6CiAgICAgaW50
IGNyZWF0ZUNsYXVzZUxpc3QoaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUNsYXVz
ZUxpc3QoaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMo
aW50KSB7IH0KLSAgICBpbnQgY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQoY29uc3QgSWRlbnRpZmll
ciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQg
Y3JlYXRlQmxvY2tTdGF0ZW1lbnQoaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGlu
dCBjcmVhdGVFeHByU3RhdGVtZW50KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBp
bnQgY3JlYXRlSWZTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Cisg
ICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGludCwgY29uc3QgSWRlbnRpZmllciosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRl
QmxvY2tTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50
IGNyZWF0ZUV4cHJTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAg
ICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVy
biAxOyB9Ci0gICAgaW50IGNyZWF0ZUZvckxvb3AoaW50LCBpbnQsIGludCwgaW50LCBib29sLCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSWRl
bnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JJbkxvb3AoaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRW1w
dHlTdGF0ZW1lbnQoKSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVZhclN0YXRlbWVudChp
bnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVJldHVyblN0YXRlbWVu
dChpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVC
cmVha1N0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQg
Y3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRlbWVudChpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQot
ICAgIGludCBjcmVhdGVUcnlTdGF0ZW1lbnQoaW50LCBjb25zdCBJZGVudGlmaWVyKiwgYm9vbCwg
aW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVN3aXRjaFN0
YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAg
aW50IGNyZWF0ZVdoaWxlU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsg
fQotICAgIGludCBjcmVhdGVXaXRoU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRG9XaGlsZVN0YXRlbWVudChpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlTGFiZWxTdGF0ZW1lbnQo
Y29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQg
Y3JlYXRlVGhyb3dTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7
IH0KLSAgICBpbnQgY3JlYXRlRGVidWdnZXIoaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBp
bnQgY3JlYXRlQ29uc3RTdGF0ZW1lbnQoaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAg
IGludCBhcHBlbmRDb25zdERlY2woaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVy
biAxOyB9Ci0gICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0PiBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KQorICAgIGludCBjcmVhdGVJZlN0
YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAg
aW50IGNyZWF0ZUZvckxvb3AoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGludCwgaW50
KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUZvckluTG9vcChpbnQsIGNvbnN0IElkZW50
aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRl
RW1wdHlTdGF0ZW1lbnQoaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVZhclN0YXRl
bWVudChpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlUmV0
dXJuU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoaW50LCBjb25zdCBJZGVu
dGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
CisgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGludCwgY29uc3QgSWRlbnRpZmllcios
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVUcnlTdGF0
ZW1lbnQoaW50LCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBib29sLCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlU3dpdGNoU3RhdGVtZW50KGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVX
aGlsZVN0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAg
IGludCBjcmVhdGVXaXRoU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUxhYmVsU3RhdGVt
ZW50KGludCwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlVGhyb3dTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVEZWJ1Z2dlcihpbnQsIGludCwgaW50KSB7
IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBhcHBlbmRDb25zdERlY2woaW50LCBpbnQsIGNv
bnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBz
dHJpY3Q+IFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoaW50LCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkKICAgICB7CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgaWYg
KCFzdHJpY3QpCkBAIC0yMTIsNyArMjEzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmRT
dGF0ZW1lbnQoaW50LCBpbnQpIHsgfQogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElkZW50aWZpZXIq
LCBib29sKSB7IH0KLSAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoaW50LCBpbnQpIHsgcmV0dXJu
IDE7IH0KKyAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoaW50LCBpbnQsIGludCkgeyByZXR1cm4g
MTsgfQogICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdm9pZCBh
cHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBpbnQgZXhw
ciwgaW50LCBpbnQsIGludCwgYm9vbCkKICAgICB7CkBAIC0yMjgsNyArMjI5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgb3BlcmF0b3JTdGFja0hhc0hpZ2hlclByZWNlZGVuY2UoaW50JiwgaW50KSB7
IHJldHVybiB0cnVlOyB9CiAgICAgQmluYXJ5T3BlcmFuZCBnZXRGcm9tT3BlcmFuZFN0YWNrKGlu
dCkgeyByZXR1cm4gbV90b3BCaW5hcnlFeHByOyB9CiAgICAgdm9pZCBzaHJpbmtPcGVyYW5kU3Rh
Y2tCeShpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBpbnQgYW1vdW50KSB7IG9wZXJhbmRTdGFja0Rl
cHRoIC09IGFtb3VudDsgfQotICAgIHZvaWQgYXBwZW5kQmluYXJ5T3BlcmF0aW9uKGludCYgb3Bl
cmFuZFN0YWNrRGVwdGgsIGludCYsIEJpbmFyeU9wZXJhbmQsIEJpbmFyeU9wZXJhbmQpIHsgb3Bl
cmFuZFN0YWNrRGVwdGgrKzsgfQorICAgIHZvaWQgYXBwZW5kQmluYXJ5T3BlcmF0aW9uKGludCwg
aW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50JiwgQmluYXJ5T3BlcmFuZCwgQmluYXJ5T3BlcmFu
ZCkgeyBvcGVyYW5kU3RhY2tEZXB0aCsrOyB9CiAgICAgdm9pZCBvcGVyYXRvclN0YWNrQXBwZW5k
KGludCYgb3BlcmF0b3JTdGFja0RlcHRoLCBpbnQsIGludCkgeyBvcGVyYXRvclN0YWNrRGVwdGgr
KzsgfQogICAgIGludCBwb3BPcGVyYW5kU3RhY2soaW50JikgeyBpbnQgcmVzID0gbV90b3BCaW5h
cnlFeHByOyBtX3RvcEJpbmFyeUV4cHIgPSAwOyByZXR1cm4gcmVzOyB9CiAgICAgCkBAIC0yMzgs
NyArMjM5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFzdChp
bnQmIHN0YWNrRGVwdGgpIHsgc3RhY2tEZXB0aCA9IDA7IH0KICAgICAKICAgICB2b2lkIGFzc2ln
bm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQot
ICAgIGludCBjcmVhdGVBc3NpZ25tZW50KGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVBc3NpZ25tZW50KGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAxOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgZ2V0TmFtZShjb25zdCBQcm9wZXJ0eSYgcHJv
cGVydHkpIGNvbnN0IHsgQVNTRVJUKHByb3BlcnR5Lm5hbWUpOyByZXR1cm4gKnByb3BlcnR5Lm5h
bWU7IH0KICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgZ2V0VHlwZShjb25zdCBQcm9wZXJ0eSYgcHJv
cGVydHkpIGNvbnN0IHsgcmV0dXJuIHByb3BlcnR5LnR5cGU7IH0KICAgICBib29sIGlzUmVzb2x2
ZShFeHByZXNzaW9uVHlwZSBleHByKSBjb25zdCB7IHJldHVybiBleHByID09IFJlc29sdmVFeHBy
IHx8IGV4cHIgPT0gUmVzb2x2ZUV2YWxFeHByOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTg3MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEK
ICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVj
LCAiRXZhbCBpcyBkaXNhYmxlZCIpKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0g
Z2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxFdmFsTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgbV9zb3VyY2UsIDAsIGlzU3Ry
aWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOwor
ICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZTxFdmFsTm9kZT4oZ2xvYmFsRGF0
YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpT
UGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmpl
Y3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwogICAgIGlmICghZXZhbE5vZGUpIHsK
ICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CkBA
IC0yNjAsNyArMjYwLDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRh
eAogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPFBy
b2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8UHJvZ3Jh
bU5vZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2Vy
KCksIGV4ZWMsIG1fc291cmNlLCAwLCBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBS
ZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2Jh
bERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBKU1BhcnNlTm9ybWFsLCBQ
cm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJz
ZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhj
ZXB0aW9uKTsKICAgICBpZiAocHJvZ3JhbU5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFT
U0VSVChleGNlcHRpb24pOwpAQCAtMjg2LDcgKzI4Niw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGUKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBnbG9iYWxEYXRhLT5w
YXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkg
PyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CisgICAgUmVmUHRy
PFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRh
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkgPyBKU1Bh
cnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8g
SlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9i
amVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7CiAgICAgaWYgKCFwcm9ncmFtTm9k
ZSkgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKQEAgLTQyOSw3ICs0MjksOCBAQCBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5j
dGlvbkV4CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKLSAgICBSZWZQdHI8
RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rp
b25Cb2R5Tm9kZT4oZ2xvYmFsT2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdl
dCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhj
ZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0
aW9uQm9keU5vZGU+KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIG1fcGFyYW1l
dGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1h
bCwgRnVuY3Rpb25Cb2R5Tm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2Rl
IDogSlNQYXJzZVByb2dyYW1Db2RlLCAwLCAwLCAmZXhjZXB0aW9uKTsKKwogICAgIGlmICghYm9k
eSkgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC02NDQsNyArNjQ1LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29k
ZShjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVidWdn
ZXIqIGRlYnVnZ2VyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiogZXhjZXB0
aW9uKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBkZWJ1Z2dlciwgZXhlYywgc291cmNlLCAwLCBKU1BhcnNlTm9ybWFsLCBleGNl
cHRpb24pOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dyYW1O
b2RlPigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UsIDAs
IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5j
dGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGRlYnVnZ2VyLCBleGVjLCBleGNlcHRpb24p
OwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBBU1NFUlQoKmV4Y2VwdGlvbik7CiAgICAg
ICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk5v
ZGVzLmgiCi0jaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjZW5kaWYKQEAg
LTE4Miw4ICsxODIsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlw
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMp
CiAjZW5kaWYKLSAgICAsIGxleGVyKG5ldyBMZXhlcih0aGlzKSkKLSAgICAsIHBhcnNlcihuZXcg
UGFyc2VyKQorICAgICwgcGFyc2VyQXJlbmEobmV3IFBhcnNlckFyZW5hKQorICAgICwga2V5d29y
ZHMobmV3IEtleXdvcmRzKHRoaXMpKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGhlYXAo
dGhpcywgaGVhcFNpemUpCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzgsOSArMzM4LDYgQEAg
SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4oc3RyaW5nVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlKj4oc3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpOwogCi0gICAgZGVsZXRlIHBhcnNlcjsK
LSAgICBkZWxldGUgbGV4ZXI7Ci0KICAgICBkZWxldGVBbGxWYWx1ZXMob3BhcXVlSlNDbGFzc0Rh
dGEpOwogCiAgICAgZGVsZXRlIGVtcHR5TGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw5ICs2NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEludGVycHJldGVyOwogICAg
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNzIExl
eGVyOworICAgIGNsYXNzIEtleXdvcmRzOwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0g
ICAgY2xhc3MgUGFyc2VyOworICAgIGNsYXNzIFBhcnNlckFyZW5hOwogICAgIGNsYXNzIFJlZ0V4
cENhY2hlOwogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogICAgIGNsYXNzIFN0cnVjdHVyZTsKQEAg
LTIxOSw4ICsyMTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICA6IHd0ZlRo
cmVhZERhdGEoKS5zdGFjaygpOwogICAgICAgICB9CiAKLSAgICAgICAgTGV4ZXIqIGxleGVyOwot
ICAgICAgICBQYXJzZXIqIHBhcnNlcjsKKyAgICAgICAgUGFyc2VyQXJlbmEqIHBhcnNlckFyZW5h
OworICAgICAgICBLZXl3b3Jkcyoga2V5d29yZHM7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRT
dHViczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQ
YXJzZXIuY3BwCShyZXZpc2lvbiA5ODczMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJv
b2wgTGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQYXJzZShWZWN0b3IKICAgICAgICAgICAgIGVudHJ5
Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIobV9leGVjLCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRv
a2VuKCkuc3RhcnQpOwogICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2V4ZWMtPmdsb2JhbERhdGEoKS5sZXhlci0+aXNLZXl3b3JkKGVudHJ5
Lm1fcGF0aEVudHJ5TmFtZSkpCisgICAgICAgIGlmIChtX2V4ZWMtPmdsb2JhbERhdGEoKS5rZXl3
b3Jkcy0+aXNLZXl3b3JkKGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIFRva2VuVHlwZSB0b2tlblR5cGUgPSBtX2xleGVyLm5leHQoKTsK
ICAgICAgICAgd2hpbGUgKHRva2VuVHlwZSAhPSBUb2tBc3NpZ24pIHsK
</data>
<flag name="commit-queue"
          id="111118"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112935</attachid>
            <date>2011-10-28 16:05:21 -0700</date>
            <delta_ts>2011-10-31 14:13:58 -0700</delta_ts>
            <desc>Updated patch with speculative build fixes</desc>
            <filename>71138-1.patch</filename>
            <type>text/plain</type>
            <size>454714</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDc0IEBA
CisyMDExLTEwLTI4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOC1iaXQgU3RyaW5nczogTW92ZSBMZXhlciBhbmQgUGFyc2VyIE9iamVjdHMg
b3V0IG9mIEpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzExMzgKKworICAgICAgICBSZXN0cnVjdHVyZSBhbmQgbW92ZW1lbnQgb2Yg
TGV4ZXIgYW5kIFBhcnNlciBjb2RlLgorICAgICAgICBNb3ZlZCBMZXhlciBhbmQgUGFyc2VyIG9i
amVjdHMgb3V0IG9mIEpTR2xvYmFsRGF0YS4KKyAgICAgICAgQWRkZWQgYSBuZXcgUGFyc2VyVG9r
ZW5zIGNsYXNzIGFuZCBpbnN0YW5jZSB0byBKU0dsb2JhbERhdGEgdGhhdAorICAgICAgICBoYXZl
IEphdmFTY3JpcHQgdG9rZW4gcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAgICAgICAgUmVwbGFjZWQg
SlNHbG9iYWxEYXRhIGFyZ3VtZW50cyB0byBOb2RlIGNsYXNzZXMgd2l0aCBsaW5lTnVtYmVyLAor
ICAgICAgICBhcyB0aGF0IHdhcyB0aGUgb25seSB1c2Ugb2YgdGhlIEpTR2xvYmFsRGF0YS4KKyAg
ICAgICAgQ29tYmluZWQgSlNQYXJzZXIgYW5kIFBhcnNlciBjbGFzc2VzIGludG8gb25lIGNsYXNz
LAorICAgICAgICBlbGltaW5hdGluZyBKU1BhcnNlci5oIGFuZCAuY3BwLgorICAgICAgICBWYXJp
b3VzIHN1cHBvcnRpbmcgI2luY2x1ZGUgY2hhbmdlcy4KKworICAgICAgICBUaGVzZSBtb3N0bHkg
bWVjaGFuaWNhbCBjaGFuZ2VzIGFyZSBkb25lIGluIHByZXBhcmF0aW9uIHRvCisgICAgICAgIG1h
a2luZyB0aGUgTGV4ZXIgYW5kIFBhcnNlciB0ZW1wbGF0ZSBjbGFzc2VzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5n
eXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6
dG9Bcmd1bWVudExpc3QpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6QVNUQnVpbGRlcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZVNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Q29tbWFFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTG9naWNhbE5vdCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVVuYXJ5UGx1cyk6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVZvaWQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjp0
aGlzRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJlc29sdmUpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXJyYXkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVOdW1iZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQm9vbGVhbik6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bGwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVCcmFja2V0QWNjZXNzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6OmNyZWF0ZUNvbmRpdGlvbmFsRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUFzc2lnblJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVG
dW5jdGlvbkV4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkJv
ZHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXJndW1lbnRzTGlzdCk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZVByb3BlcnR5TGlzdCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUVsZW1lbnRMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Rm9ybWFsUGFyYW1ldGVyTGlzdCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUNs
YXVzZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUNsYXVzZUxpc3QpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJsb2NrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlRXhwclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUlmU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
Rm9yTG9vcCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvckluTG9vcCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUVtcHR5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVmFyU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRy
eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN3aXRjaFN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdoaWxlU3RhdGVtZW50KToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG9XaGlsZVN0YXRlbWVudCk6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlV2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6OmNyZWF0ZVRocm93U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlRGVidWdnZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb25zdFN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmFwcGVuZENvbnN0RGVjbCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNvbWJpbmVDb21tYU5vZGVzKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNy
ZWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VUeXBlT2ZOb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjptYWtlTmVnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
Om1ha2VCaXR3aXNlTm90Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VNdWx0
Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VEaXZOb2RlKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6bWFrZU1vZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQWRkTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUxlZnRTaGlmdE5vZGUpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjptYWtlUmlnaHRTaGlmdE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
bWFrZUJpdE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaXRBbmROb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZSk6CisgICAgICAgIChKU0M6OkFT
VEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFr
ZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAgICAgICog
cGFyc2VyL0pTUGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYXJzZXIvSlNQYXJzZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpL
ZXl3b3Jkczo6S2V5d29yZHMpOgorICAgICAgICAoSlNDOjpMZXhlcjo6TGV4ZXIpOgorICAgICAg
ICAoSlNDOjpMZXhlcjo6fkxleGVyKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldENvZGUpOgor
ICAgICAgICAoSlNDOjpMZXhlcjo6cGFyc2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIv
TGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6S2V5d29yZHM6OmlzS2V5d29yZCk6CisgICAgICAgIChK
U0M6OktleXdvcmRzOjpnZXRLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6S2V5d29yZHM6On5LZXl3
b3Jkcyk6CisgICAgICAgIChKU0M6OkxleGVyOjpzZXRJc1JlcGFyc2luZyk6CisgICAgICAgIChK
U0M6OkxleGVyOjppc1JlcGFyc2luZyk6CisgICAgICAgIChKU0M6OkxleGVyOjpsaW5lTnVtYmVy
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldExhc3RMaW5lTnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6Omxhc3RMaW5lTnVtYmVyKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnByZXZUZXJt
aW5hdG9yKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNhd0Vycm9yKToKKyAgICAgICAgKEpTQzo6
TGV4ZXI6OmdldEVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldE9mZnNldCk6CisgICAgICAgIChKU0M6Okxl
eGVyOjpzZXRMaW5lTnVtYmVyKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmlzV2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6Okxl
eGVyOjppc0xpbmVUZXJtaW5hdG9yKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmNvbnZlcnRIZXgp
OgorICAgICAgICAoSlNDOjpMZXhlcjo6Y29udmVydFVuaWNvZGUpOgorICAgICAgICAoSlNDOjpM
ZXhlcjo6bWFrZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpMZXhlcjo6bGV4RXhwZWN0SWRl
bnRpZmllcik6CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAg
KEpTQzo6UGFyc2VyQXJlbmFGcmVlYWJsZTo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKEpTQzo6
UGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldyk6CisgICAgICAgIChKU0M6OlBhcnNl
ckFyZW5hUmVmQ291bnRlZDo6UGFyc2VyQXJlbmFSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6
Tm9kZTo6Tm9kZSk6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpFeHByZXNzaW9uTm9k
ZSk6CisgICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OlN0YXRlbWVudE5vZGUpOgorICAgICAg
ICAoSlNDOjpOdWxsTm9kZTo6TnVsbE5vZGUpOgorICAgICAgICAoSlNDOjpCb29sZWFuTm9kZTo6
Qm9vbGVhbk5vZGUpOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjpOdW1iZXJOb2RlKToKKyAg
ICAgICAgKEpTQzo6U3RyaW5nTm9kZTo6U3RyaW5nTm9kZSk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE5vZGU6OlJlZ0V4cE5vZGUpOgorICAgICAgICAoSlNDOjpUaGlzTm9kZTo6VGhpc05vZGUpOgor
ICAgICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpF
bGVtZW50Tm9kZTo6RWxlbWVudE5vZGUpOgorICAgICAgICAoSlNDOjpBcnJheU5vZGU6OkFycmF5
Tm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdExpdGVyYWxOb2RlOjpPYmplY3RMaXRlcmFsTm9kZSk6CisgICAgICAgIChKU0M6
OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OkJyYWNrZXRBY2Nlc3Nvck5vZGUpOgorICAgICAgICAoSlND
OjpEb3RBY2Nlc3Nvck5vZGU6OkRvdEFjY2Vzc29yTm9kZSk6CisgICAgICAgIChKU0M6OkFyZ3Vt
ZW50TGlzdE5vZGU6OkFyZ3VtZW50TGlzdE5vZGUpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHNO
b2RlOjpBcmd1bWVudHNOb2RlKToKKyAgICAgICAgKEpTQzo6TmV3RXhwck5vZGU6Ok5ld0V4cHJO
b2RlKToKKyAgICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNh
bGxOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6RnVu
Y3Rpb25DYWxsUmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6RnVuY3Rpb25DYWxsQnJhY2tldE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxEb3ROb2RlOjpGdW5jdGlvbkNhbGxEb3ROb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0
aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKToKKyAgICAgICAgKEpTQzo6
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUpOgorICAg
ICAgICAoSlNDOjpQcmVQb3N0UmVzb2x2ZU5vZGU6OlByZVBvc3RSZXNvbHZlTm9kZSk6CisgICAg
ICAgIChKU0M6OlBvc3RmaXhSZXNvbHZlTm9kZTo6UG9zdGZpeFJlc29sdmVOb2RlKToKKyAgICAg
ICAgKEpTQzo6UG9zdGZpeEJyYWNrZXROb2RlOjpQb3N0Zml4QnJhY2tldE5vZGUpOgorICAgICAg
ICAoSlNDOjpQb3N0Zml4RG90Tm9kZTo6UG9zdGZpeERvdE5vZGUpOgorICAgICAgICAoSlNDOjpQ
b3N0Zml4RXJyb3JOb2RlOjpQb3N0Zml4RXJyb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRl
UmVzb2x2ZU5vZGU6OkRlbGV0ZVJlc29sdmVOb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJh
Y2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlRG90Tm9k
ZTo6RGVsZXRlRG90Tm9kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVZhbHVlTm9kZTo6RGVsZXRl
VmFsdWVOb2RlKToKKyAgICAgICAgKEpTQzo6Vm9pZE5vZGU6OlZvaWROb2RlKToKKyAgICAgICAg
KEpTQzo6VHlwZU9mUmVzb2x2ZU5vZGU6OlR5cGVPZlJlc29sdmVOb2RlKToKKyAgICAgICAgKEpT
Qzo6VHlwZU9mVmFsdWVOb2RlOjpUeXBlT2ZWYWx1ZU5vZGUpOgorICAgICAgICAoSlNDOjpQcmVm
aXhSZXNvbHZlTm9kZTo6UHJlZml4UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpQcmVmaXhC
cmFja2V0Tm9kZTo6UHJlZml4QnJhY2tldE5vZGUpOgorICAgICAgICAoSlNDOjpQcmVmaXhEb3RO
b2RlOjpQcmVmaXhEb3ROb2RlKToKKyAgICAgICAgKEpTQzo6UHJlZml4RXJyb3JOb2RlOjpQcmVm
aXhFcnJvck5vZGUpOgorICAgICAgICAoSlNDOjpVbmFyeU9wTm9kZTo6VW5hcnlPcE5vZGUpOgor
ICAgICAgICAoSlNDOjpVbmFyeVBsdXNOb2RlOjpVbmFyeVBsdXNOb2RlKToKKyAgICAgICAgKEpT
Qzo6TmVnYXRlTm9kZTo6TmVnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkJpdHdpc2VOb3ROb2Rl
OjpCaXR3aXNlTm90Tm9kZSk6CisgICAgICAgIChKU0M6OkxvZ2ljYWxOb3ROb2RlOjpMb2dpY2Fs
Tm90Tm9kZSk6CisgICAgICAgIChKU0M6OkJpbmFyeU9wTm9kZTo6QmluYXJ5T3BOb2RlKToKKyAg
ICAgICAgKEpTQzo6TXVsdE5vZGU6Ok11bHROb2RlKToKKyAgICAgICAgKEpTQzo6RGl2Tm9kZTo6
RGl2Tm9kZSk6CisgICAgICAgIChKU0M6Ok1vZE5vZGU6Ok1vZE5vZGUpOgorICAgICAgICAoSlND
OjpBZGROb2RlOjpBZGROb2RlKToKKyAgICAgICAgKEpTQzo6U3ViTm9kZTo6U3ViTm9kZSk6Cisg
ICAgICAgIChKU0M6OkxlZnRTaGlmdE5vZGU6OkxlZnRTaGlmdE5vZGUpOgorICAgICAgICAoSlND
OjpSaWdodFNoaWZ0Tm9kZTo6UmlnaHRTaGlmdE5vZGUpOgorICAgICAgICAoSlNDOjpVbnNpZ25l
ZFJpZ2h0U2hpZnROb2RlOjpVbnNpZ25lZFJpZ2h0U2hpZnROb2RlKToKKyAgICAgICAgKEpTQzo6
TGVzc05vZGU6Okxlc3NOb2RlKToKKyAgICAgICAgKEpTQzo6R3JlYXRlck5vZGU6OkdyZWF0ZXJO
b2RlKToKKyAgICAgICAgKEpTQzo6TGVzc0VxTm9kZTo6TGVzc0VxTm9kZSk6CisgICAgICAgIChK
U0M6OkdyZWF0ZXJFcU5vZGU6OkdyZWF0ZXJFcU5vZGUpOgorICAgICAgICAoSlNDOjpUaHJvd2Fi
bGVCaW5hcnlPcE5vZGU6OlRocm93YWJsZUJpbmFyeU9wTm9kZSk6CisgICAgICAgIChKU0M6Oklu
c3RhbmNlT2ZOb2RlOjpJbnN0YW5jZU9mTm9kZSk6CisgICAgICAgIChKU0M6OkluTm9kZTo6SW5O
b2RlKToKKyAgICAgICAgKEpTQzo6RXF1YWxOb2RlOjpFcXVhbE5vZGUpOgorICAgICAgICAoSlND
OjpOb3RFcXVhbE5vZGU6Ok5vdEVxdWFsTm9kZSk6CisgICAgICAgIChKU0M6OlN0cmljdEVxdWFs
Tm9kZTo6U3RyaWN0RXF1YWxOb2RlKToKKyAgICAgICAgKEpTQzo6Tm90U3RyaWN0RXF1YWxOb2Rl
OjpOb3RTdHJpY3RFcXVhbE5vZGUpOgorICAgICAgICAoSlNDOjpCaXRBbmROb2RlOjpCaXRBbmRO
b2RlKToKKyAgICAgICAgKEpTQzo6Qml0T3JOb2RlOjpCaXRPck5vZGUpOgorICAgICAgICAoSlND
OjpCaXRYT3JOb2RlOjpCaXRYT3JOb2RlKToKKyAgICAgICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6
TG9naWNhbE9wTm9kZSk6CisgICAgICAgIChKU0M6OkNvbmRpdGlvbmFsTm9kZTo6Q29uZGl0aW9u
YWxOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5
UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25SZXNvbHZlTm9kZTo6QXNzaWduUmVz
b2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2Rp
ZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25C
cmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OkFzc2lnbkRvdE5vZGUp
OgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9yTm9kZSk6CisgICAgICAg
IChKU0M6OkNvbW1hTm9kZTo6Q29tbWFOb2RlKToKKyAgICAgICAgKEpTQzo6Q29uc3RTdGF0ZW1l
bnROb2RlOjpDb25zdFN0YXRlbWVudE5vZGUpOgorICAgICAgICAoSlNDOjpTb3VyY2VFbGVtZW50
czo6U291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpFbXB0eVN0YXRlbWVudE5vZGU6OkVt
cHR5U3RhdGVtZW50Tm9kZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6
RGVidWdnZXJTdGF0ZW1lbnROb2RlKToKKyAgICAgICAgKEpTQzo6RXhwclN0YXRlbWVudE5vZGU6
OkV4cHJTdGF0ZW1lbnROb2RlKToKKyAgICAgICAgKEpTQzo6VmFyU3RhdGVtZW50Tm9kZTo6VmFy
U3RhdGVtZW50Tm9kZSk6CisgICAgICAgIChKU0M6OklmTm9kZTo6SWZOb2RlKToKKyAgICAgICAg
KEpTQzo6SWZFbHNlTm9kZTo6SWZFbHNlTm9kZSk6CisgICAgICAgIChKU0M6OkRvV2hpbGVOb2Rl
OjpEb1doaWxlTm9kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6V2hpbGVOb2RlKToKKyAg
ICAgICAgKEpTQzo6Rm9yTm9kZTo6Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkNvbnRpbnVlTm9k
ZTo6Q29udGludWVOb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2RlOjpCcmVha05vZGUpOgor
ICAgICAgICAoSlNDOjpSZXR1cm5Ob2RlOjpSZXR1cm5Ob2RlKToKKyAgICAgICAgKEpTQzo6V2l0
aE5vZGU6OldpdGhOb2RlKToKKyAgICAgICAgKEpTQzo6TGFiZWxOb2RlOjpMYWJlbE5vZGUpOgor
ICAgICAgICAoSlNDOjpUaHJvd05vZGU6OlRocm93Tm9kZSk6CisgICAgICAgIChKU0M6OlRyeU5v
ZGU6OlRyeU5vZGUpOgorICAgICAgICAoSlNDOjpQYXJhbWV0ZXJOb2RlOjpQYXJhbWV0ZXJOb2Rl
KToKKyAgICAgICAgKEpTQzo6RnVuY0V4cHJOb2RlOjpGdW5jRXhwck5vZGUpOgorICAgICAgICAo
SlNDOjpGdW5jRGVjbE5vZGU6OkZ1bmNEZWNsTm9kZSk6CisgICAgICAgIChKU0M6OkNhc2VDbGF1
c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZSk6CisgICAgICAgIChKU0M6OkNsYXVzZUxpc3ROb2RlOjpD
bGF1c2VMaXN0Tm9kZSk6CisgICAgICAgIChKU0M6OkNhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05v
ZGUpOgorICAgICAgICAoSlNDOjpTd2l0Y2hOb2RlOjpTd2l0Y2hOb2RlKToKKyAgICAgICAgKEpT
Qzo6Q29uc3REZWNsTm9kZTo6Q29uc3REZWNsTm9kZSk6CisgICAgICAgIChKU0M6OkJsb2NrTm9k
ZTo6QmxvY2tOb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjpGb3JJbk5vZGUpOgorICAg
ICAgICAqIHBhcnNlci9Ob2RlSW5mby5oOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OnNldExvYyk6CisgICAgICAgIChKU0M6OlNjb3Bl
Tm9kZTo6U2NvcGVOb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2Rl
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkV2
YWxOb2RlOjpFdmFsTm9kZSk6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMu
aDoKKyAgICAgICAgKEpTQzo6Tm9kZTo6bGluZU5vKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI6On5QYXJzZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlSW5uZXIpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OmFsbG93QXV0b21hdGljU2VtaWNvbG9uKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyOjpwYXJzZVNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJz
ZVZhckRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUNvbnN0RGVjbGFy
YXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRG9XaGlsZVN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OnBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNl
Rm9yU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUJyZWFrU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUNvbnRpbnVlU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpwYXJzZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6cGFyc2VUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VX
aXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VTd2l0Y2hDbGF1c2VzKToKKyAgICAgICAg
KEpTQzo6UGFyc2VyOjpwYXJzZVN3aXRjaERlZmF1bHRDbGF1c2UpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZURl
YnVnZ2VyU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZUJsb2NrU3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVN0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OlBhcnNlcjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6
CisgICAgICAgIChKU0M6OkxhYmVsSW5mbzo6TGFiZWxJbmZvKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25PckxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBh
cnNlSWZTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbik6
CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjppc1VuYXJ5T3ApOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmlzQmluYXJ5T3BlcmF0b3Ip
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlQmluYXJ5RXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFy
c2VPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVN0cmljdE9iamVj
dExpdGVyYWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlQXJyYXlMaXRlcmFsKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cGFyc2VN
ZW1iZXJFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVVuYXJ5RXhwcmVz
c2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjppc0V2YWxO
b2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpEZXB0aE1hbmFn
ZXI6OkRlcHRoTWFuYWdlcik6CisgICAgICAgIChKU0M6OkRlcHRoTWFuYWdlcjo6fkRlcHRoTWFu
YWdlcik6CisgICAgICAgIChKU0M6OlNjb3BlTGFiZWxJbmZvOjpTY29wZUxhYmVsSW5mbyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpzdGFydFN3
aXRjaCk6CisgICAgICAgIChKU0M6OlNjb3BlOjplbmRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpT
Y29wZTo6c3RhcnRMb29wKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmVuZExvb3ApOgorICAgICAg
ICAoSlNDOjpTY29wZTo6aW5Mb29wKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmJyZWFrSXNWYWxp
ZCk6CisgICAgICAgIChKU0M6OlNjb3BlOjpjb250aW51ZUlzVmFsaWQpOgorICAgICAgICAoSlND
OjpTY29wZTo6cHVzaExhYmVsKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnBvcExhYmVsKToKKyAg
ICAgICAgKEpTQzo6U2NvcGU6OmdldExhYmVsKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldElz
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpTY29wZTo6aXNGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OlNjb3BlOjppc0Z1bmN0aW9uQm91bmRhcnkpOgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVj
bGFyZVZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmRlY2xhcmVXcml0ZSk6CisgICAg
ICAgIChKU0M6OlNjb3BlOjpwcmV2ZW50TmV3RGVjbHMpOgorICAgICAgICAoSlNDOjpTY29wZTo6
YWxsb3dzTmV3RGVjbHMpOgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVjbGFyZVBhcmFtZXRlcik6
CisgICAgICAgIChKU0M6OlNjb3BlOjp1c2VWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmNvbGxlY3RG
cmVlVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmdldFVuY2FwdHVyZWRXcml0dGVu
VmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmdldENhcHR1cmVkVmFyaWFibGVzKToK
KyAgICAgICAgKEpTQzo6U2NvcGU6OnNldFN0cmljdE1vZGUpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6c3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjppc1ZhbGlkU3RyaWN0TW9kZSk6
CisgICAgICAgIChKU0M6OlNjb3BlOjpzaGFkb3dzQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKToKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OnNhdmVGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpTY29wZTo6cmVzdG9yZUZ1bmN0
aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlNjb3BlUmVmOjpTY29wZVJlZik6CisgICAgICAgIChK
U0M6OlNjb3BlUmVmOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6U2NvcGVSZWY6OmluZGV4
KToKKyAgICAgICAgKEpTQzo6U2NvcGVSZWY6Omhhc0NvbnRhaW5pbmdTY29wZSk6CisgICAgICAg
IChKU0M6OlNjb3BlUmVmOjpjb250YWluaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OkFsbG93SW5PdmVycmlkZTo6QWxsb3dJbk92ZXJyaWRlKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpBbGxvd0luT3ZlcnJpZGU6On5BbGxvd0luT3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI6OkF1dG9Qb3BTY29wZVJlZjo6QXV0b1BvcFNjb3BlUmVmKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpBdXRvUG9wU2NvcGVSZWY6On5BdXRvUG9wU2NvcGVSZWYpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OkF1dG9Qb3BTY29wZVJlZjo6c2V0UG9wcGVkKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpjdXJyZW50U2NvcGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hTY29wZSk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cG9wU2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6cG9wU2NvcGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmRlY2xhcmVWYXJpYWJsZSk6Cisg
ICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
OjpmaW5kQ2FjaGVkRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjppc0Z1bmN0
aW9uQm9keU5vZGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHQpOgorICAgICAgICAoSlND
OjpQYXJzZXI6Om5leHRFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpu
ZXh0VG9rZW5Jc0NvbG9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpjb25zdW1lKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpnZXRUb2tlbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6bWF0Y2gp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnRva2VuU3RhcnQpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI6OnRva2VuTGluZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5FbmQpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OmdldFRva2VuTmFtZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dXBk
YXRlRXJyb3JNZXNzYWdlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnVwZGF0
ZUVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dXBkYXRlRXJyb3JXaXRoTmFt
ZUFuZE1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnN0YXJ0TG9vcCk6CisgICAgICAg
IChKU0M6OlBhcnNlcjo6ZW5kTG9vcCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6c3RhcnRTd2l0
Y2gpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmVuZFN3aXRjaCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6c2V0U3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6c3RyaWN0TW9kZSk6
CisgICAgICAgIChKU0M6OlBhcnNlcjo6aXNWYWxpZFN0cmljdE1vZGUpOgorICAgICAgICAoSlND
OjpQYXJzZXI6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmJyZWFr
SXNWYWxpZCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6Y29udGludWVJc1ZhbGlkKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpwdXNoTGFiZWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBvcExh
YmVsKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpnZXRMYWJlbCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6YXV0b1NlbWlDb2xvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6Y2FuUmVjdXJzZSk6
CisgICAgICAgIChKU0M6OlBhcnNlcjo6bGFzdFRva2VuRW5kKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpEZXB0aE1hbmFnZXI6OkRlcHRoTWFuYWdlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
RGVwdGhNYW5hZ2VyOjp+RGVwdGhNYW5hZ2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5z
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Rva2VuSW5mbzo6SlNUb2tlbkluZm8pOgorICAg
ICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlLmg6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGU6OnN1
YkV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5o
OgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpt
YWtlRnVuY3Rpb25DYWxsTm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0
ZUNvbW1hRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VBc3NpZ25Ob2Rl
KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZVByZWZpeE5vZGUpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlUG9zdGZpeE5vZGUpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjptYWtlVHlwZU9mTm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZU5l
Z2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlQml0d2lzZU5vdE5v
ZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlVm9pZCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OnRoaXNFeHByKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2
ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZU9iamVjdExpdGVyYWwpOgor
ICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVBcnJheSk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZU51bWJlckV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVh
dGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlTnVsbCk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQ29u
ZGl0aW9uYWxFeHByKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWdu
UmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uRXhw
cik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUFyZ3VtZW50c0xpc3QpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OmNyZWF0ZVByb3BlcnR5TGlzdCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlQmxvY2tTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVF
eHByU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlSWZTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVGb3JMb29wKToKKyAg
ICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRW1wdHlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVWYXJTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpjcmVhdGVCcmVha1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6
Y3JlYXRlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRl
U3dpdGNoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlV2hp
bGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVXaXRoU3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRG9XaGlsZVN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUxhYmVsU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlVGhyb3dTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVEZWJ1Z2dlcik6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUNvbnN0U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6YXBwZW5kQ29uc3REZWNsKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hl
Y2tlcjo6Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNvbWJpbmVDb21tYU5vZGVzKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6b3BlcmF0b3JTdGFja1BvcCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnRyeUpTT05QUGFyc2UpOgorCiAyMDExLTEw
LTI4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
RGUtdmlydHVhbGl6ZSBpc0dsb2JhbE9iamVjdCwgaXNWYXJpYWJsZU9iamVjdCwgaXNBY3RpdmF0
aW9uT2JqZWN0LCBhbmQgaXNFcnJvckluc3RhbmNlIGluIEpTT2JqZWN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5ODc2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBA
QCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRTdHVicy5jcHAKICAgICBq
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAogCi0gICAgcGFyc2VyL0pTUGFyc2VyLmNwcAogICAgIHBh
cnNlci9MZXhlci5jcHAKICAgICBwYXJzZXIvTm9kZXMuY3BwCiAgICAgcGFyc2VyL1BhcnNlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZp
c2lvbiA5ODc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsOCArMjYyLDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL29zLXdpbjMyL3N0ZGJvb2wuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL29zLXdpbjMyL3N0ZGludC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9KU1BhcnNlci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDk4NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw4ICs0MTAsNiBA
QAogICAgICAgICAgICAgJ29zLXdpbjMyL3N0ZGJvb2wuaCcsCiAgICAgICAgICAgICAnb3Mtd2lu
MzIvc3RkaW50LmgnLAogICAgICAgICAgICAgJ3BhcnNlci9BU1RCdWlsZGVyLmgnLAotICAgICAg
ICAgICAgJ3BhcnNlci9KU1BhcnNlci5jcHAnLAotICAgICAgICAgICAgJ3BhcnNlci9KU1BhcnNl
ci5oJywKICAgICAgICAgICAgICdwYXJzZXIvTGV4ZXIuY3BwJywKICAgICAgICAgICAgICdwYXJz
ZXIvTGV4ZXIuaCcsCiAgICAgICAgICAgICAncGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCcsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDk4
NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcCBcCiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAgXAotICAgIHBhcnNlci9KU1BhcnNlci5jcHAgXAogICAgIHBhcnNl
ci9MZXhlci5jcHAgXAogICAgIHBhcnNlci9Ob2Rlcy5jcHAgXAogICAgIHBhcnNlci9QYXJzZXJB
cmVuYS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk4NzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsMTQgKzE3OTAsNiBAQAogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwYXJzZXJcSlNQ
YXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxwYXJzZXJcSlNQYXJzZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGFyc2VyXExleGVyLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTg3NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBACiAJCTY1MTEyMkZFMTQw
NDZBNEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVk
aXQuZHlsaWIgKi87IH07CiAJCTY1MTEyMzA3MTQwNDZCMEEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTEy
MkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLzsgfTsKIAkJNjUxRENBMDQx
MzZBNkZFRjAwRjc0MTk0IC8qIFBhc3NUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MURDQTAyMTM2QTZGQUIwMEY3NDE5NCAvKiBQYXNzVHJh
aXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDNENjMxNDQ3QjlFMTAwRDNGOTA0
IC8qIFBhcnNlclRva2Vucy5oICovOyB9OwogCQk2NTVFQjI5QjEwQ0UyNTgxMDAxQTk5MEUgLyog
Tm9kZXNDb2RlZ2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NUVCMjlBMTBDRTI1ODEwMDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4uY3BwICovOyB9
OwogCQk2NURGQzkzMzA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REZDOTJEMDhFQTE3M0EwMEY3
MzAwQiAvKiBIYXNoVGFibGUuY3BwICovOyB9OwogCQk2NUUxQTNERjEyMkI4OTQ1MDBCMjYwOTcg
LyogTm9uQ29weWluZ1NvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1RTFBMkY0MTIyQjg4MEQwMEIyNjA5NyAvKiBOb25Db3B5aW5nU29ydC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTMsOCAr
NDU0LDYgQEAKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIx
M0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9OwogCQlBNzgxRTM1OTE0
MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9y
YWdlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2
NUExNEYgLyogQVNUQnVpbGRlci5oICovOyB9OwotCQlBNzg0QTI2MjExRDE2NjIyMDA1Nzc2QUMg
LyogSlNQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBN0VFNzUxMUI5OEI4RDAwNjVBMTRGIC8qIEpTUGFyc2VyLmNwcCAqLzsgfTsKLQkJ
QTc4NEEyNjMxMUQxNjYyMjAwNTc3NkFDIC8qIEpTUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NjExQjk4QjhEMDA2NUExNEYgLyog
SlNQYXJzZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENo
ZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3OTFF
RjI4MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5MUVGMjYwRjExRTA3OTAwQUUxRjY4IC8qIEpT
Qnl0ZUFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTc5MUVGMjkwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OTFFRjI3MEYxMUUwNzkw
MEFFMUY2OCAvKiBKU0J5dGVBcnJheS5jcHAgKi87IH07CkBAIC0xMDA1LDYgKzEwMDQsNyBAQAog
CQk2NTFGNjQxMjAzOUQ1QjVGMDA3ODM5NUMgLyogZHRvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkdG9hLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NTFGNjQxMzAzOUQ1QjVGMDA3ODM5
NUMgLyogZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkdG9hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsK
IAkJNjUyMjQ2QTQwQzhEN0EwRTAwN0JEQUY3IC8qIEhhc2hJdGVyYXRvcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaEl0ZXJhdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2NTMwM0Q2MzE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlclRva2Vucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQwMEMwRjBBNjlCQUYyMDA1MDk4ODcgLyogUHJvcGVy
dHlOYW1lQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBy
b3BlcnR5TmFtZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MDBD
MTAwQTY5QkFGMjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDUGFnZU1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CkBAIC0xMjYwLDgg
KzEyNjAsNiBAQAogCQlBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVBcnJheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTFGN0FCMEYyNTJCM0MwMEUxODRFMiAvKiBCeXRl
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBB
U1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBN0VFNzUxMUI5OEI4RDAwNjVBMTRG
IC8qIEpTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBN0VFNzYxMUI5OEI4
RDAwNjVBMTRGIC8qIEpTUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFCOThC
OEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdC
NDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMTcs
OSArMjAxNSw4IEBACiAJCTdFMzlEODM3MEVDM0EzODgwMDNBRjExQSAvKiBwYXJzZXIgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTY1MzAzRDYzMTQ0N0I5
RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywKIAkJCQlBN0E3RUU3NDExQjk4QjhEMDA2
NUExNEYgLyogQVNUQnVpbGRlci5oICovLAotCQkJCUE3QTdFRTc1MTFCOThCOEQwMDY1QTE0RiAv
KiBKU1BhcnNlci5jcHAgKi8sCi0JCQkJQTdBN0VFNzYxMUI5OEI4RDAwNjVBMTRGIC8qIEpTUGFy
c2VyLmggKi8sCiAJCQkJOTNGMTk4MUEwODI0NUFBRTAwMUU5QUJDIC8qIEtleXdvcmRzLnRhYmxl
ICovLAogCQkJCUY2OTJBODY1MDI1NTU5N0QwMUZGNjBGNyAvKiBMZXhlci5jcHAgKi8sCiAJCQkJ
RjY5MkE4NjYwMjU1NTk3RDAxRkY2MEY3IC8qIExleGVyLmggKi8sCkBAIC0yNjQ0LDcgKzI2NDEs
NiBAQAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Rjk5MzVGMEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNP
Tk9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODRBMjYzMTFEMTY2MjIwMDU3NzZB
QyAvKiBKU1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTUzNEFBRkIwRTVCN0E5NjAwQjhB
NDVCIC8qIEpTUHJvZmlsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODg1
LDYgKzI4ODEsNyBAQAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyog
REZHQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAw
NDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTY1MzAzRDY0MTQ0N0I5
RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzMwMSw3ICsz
Mjk4LDYgQEAKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVm
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEwQjJEMCAvKiBKU09O
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODRBMjYyMTFEMTY2MjIwMDU3NzZBQyAv
KiBKU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4
NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyN0ZGNkIw
REEzMDkyMjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQwNTY2RDExMDdFQzI2NzAwNURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiA5ODc2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAwLDE4ICsyMDAsMTggQEAgYm9vbCBBcnJheU5vZGU6OmlzU2ltcGxlQXJyYXko
KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1Bcmd1bWVudExpc3ROb2RlKiBBcnJheU5v
ZGU6OnRvQXJndW1lbnRMaXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QKK0FyZ3Vt
ZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBpbnQgbGluZU51bWJlcikgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fZWxpc2lvbiAm
JiAhbV9vcHRpb25hbCk7CiAgICAgRWxlbWVudE5vZGUqIHB0ciA9IG1fZWxlbWVudDsKICAgICBp
ZiAoIXB0cikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQXJndW1lbnRMaXN0Tm9kZSogaGVhZCA9
IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShnbG9iYWxEYXRhLCBwdHItPnZhbHVl
KCkpOworICAgIEFyZ3VtZW50TGlzdE5vZGUqIGhlYWQgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3Vt
ZW50TGlzdE5vZGUobGluZU51bWJlciwgcHRyLT52YWx1ZSgpKTsKICAgICBBcmd1bWVudExpc3RO
b2RlKiB0YWlsID0gaGVhZDsKICAgICBwdHIgPSBwdHItPm5leHQoKTsKICAgICBmb3IgKDsgcHRy
OyBwdHIgPSBwdHItPm5leHQoKSkgewogICAgICAgICBBU1NFUlQoIXB0ci0+ZWxpc2lvbigpKTsK
LSAgICAgICAgdGFpbCA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShnbG9iYWxE
YXRhLCB0YWlsLCBwdHItPnZhbHVlKCkpOworICAgICAgICB0YWlsID0gbmV3IChnbG9iYWxEYXRh
KSBBcmd1bWVudExpc3ROb2RlKGxpbmVOdW1iZXIsIHRhaWwsIHB0ci0+dmFsdWUoKSk7CiAgICAg
fQogICAgIHJldHVybiBoZWFkOwogfQpAQCAtNDcxLDcgKzQ3MSw3IEBAIFJlZ2lzdGVySUQqIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAgICAgICAgICAgICBpZiAobV9hcmdzLT5t
X2xpc3ROb2RlLT5tX25leHQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJncy0+
bV9saXN0Tm9kZS0+bV9uZXh0LT5tX2V4cHItPmlzU2ltcGxlQXJyYXkoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQtPm1fbmV4dCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IHN0YXRpY19jYXN0PEFycmF5
Tm9kZSo+KG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5tX2V4cHIpLT50b0FyZ3VtZW50TGlz
dChnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5t
X2xpc3ROb2RlID0gc3RhdGljX2Nhc3Q8QXJyYXlOb2RlKj4obV9hcmdzLT5tX2xpc3ROb2RlLT5t
X25leHQtPm1fZXhwciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIDAp
OwogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0g
Z2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDk4NzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDkgKzczLDkgQEAgY2xhc3MgQVNUQnVpbGRlciB7CiAgICAgICAgIE9wZXJh
dG9yIG1fb3A7CiAgICAgfTsKIHB1YmxpYzoKLSAgICBBU1RCdWlsZGVyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgTGV4ZXIqIGxleGVyKQorICAgIEFTVEJ1aWxkZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTb3VyY2VDb2RlKiBzb3VyY2VDb2RlKQogICAgICAgICA6IG1fZ2xvYmFsRGF0
YShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fbGV4ZXIobGV4ZXIpCisgICAgICAgICwgbV9zb3Vy
Y2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgICAgICwgbV9zY29wZShnbG9iYWxEYXRhKQogICAgICAg
ICAsIG1fZXZhbENvdW50KDApCiAgICAgewpAQCAtMTEyLDEwICsxMTIsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBpbnQgIERvbnRCdWlsZEtleXdvcmRzID0gMDsKICAgICBzdGF0aWMg
Y29uc3QgaW50ICBEb250QnVpbGRTdHJpbmdzID0gMDsKIAotICAgIEV4cHJlc3Npb25Ob2RlKiBt
YWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFy
eU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOwotICAg
IEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShFeHByZXNzaW9uTm9kZSogZnVu
YywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpOwor
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShpbnQgbGluZU51bWJlciwgaW50IHRv
a2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+LCBzdGQ6OnBhaXI8
RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CiAKLSAg
ICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBKU0M6OlNvdXJjZUVsZW1lbnRzKG1fZ2xvYmFsRGF0YSk7IH0KKyAg
ICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KIAogICAgIFBhcnNlckFy
ZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiB2YXJEZWNsYXJhdGlvbnMoKSB7
IHJldHVybiBtX3Njb3BlLm1fdmFyRGVjbGFyYXRpb25zOyB9CiAgICAgUGFyc2VyQXJlbmFEYXRh
PERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY0RlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25zOyB9CkBAIC0xMjQsMTgyICsxMjQsMTgy
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kVG9Db21tYShDb21tYU5vZGUqIGNvbW1hTm9k
ZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgY29tbWFOb2RlLT5hcHBlbmQoZXhwcik7IH0KIAot
ICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJl
c3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobV9n
bG9iYWxEYXRhLCBsaHMsIHJocyk7IH0KKyAgICBDb21tYU5vZGUqIGNyZWF0ZUNvbW1hRXhwcihp
bnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykg
eyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbW1hTm9kZShsaW5lTnVtYmVyLCBsaHMsIHJo
cyk7IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShFeHByZXNzaW9uTm9k
ZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNz
aWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShFeHByZXNzaW9u
Tm9kZSosIE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7Ci0gICAgRXhw
cmVzc2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9kZShFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBp
bnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VU
eXBlT2ZOb2RlKEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VEZWxl
dGVOb2RlKEV4cHJlc3Npb25Ob2RlKiwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpOwot
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTmVnYXRlTm9kZShFeHByZXNzaW9uTm9kZSopOwotICAg
IEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0d2lzZU5vdE5vZGUoRXhwcmVzc2lvbk5vZGUqKTsKLSAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZU11bHROb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHBy
ZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7Ci0gICAgRXhwcmVz
c2lvbk5vZGUqIG1ha2VEaXZOb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9k
ZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7Ci0gICAgRXhwcmVzc2lvbk5vZGUq
IG1ha2VNb2ROb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBZGRO
b2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cyk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VTdWJOb2RlKEV4cHJl
c3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cyk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXRYT3JOb2RlKEV4cHJlc3Npb25O
b2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cyk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXRBbmROb2RlKEV4cHJlc3Npb25Ob2RlKiBs
ZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7Ci0g
ICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXRPck5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4
cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHBy
ZXNzaW9uTm9kZSogbWFrZUxlZnRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICBFeHByZXNz
aW9uTm9kZSogbWFrZVJpZ2h0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNz
aW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7Ci0gICAgRXhwcmVzc2lv
bk5vZGUqIG1ha2VVUmlnaHRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLQotICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVMb2dpY2FsTm90KEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE5vdE5vZGUobV9nbG9iYWxEYXRhLCBleHByKTsgfQot
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoRXhwcmVzc2lvbk5vZGUqIGV4cHIp
IHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKG1fZ2xvYmFsRGF0YSwg
ZXhwcik7IH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVm9pZChFeHByZXNzaW9uTm9kZSog
ZXhwcikKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZUFzc2lnbk5vZGUoaW50LCBFeHByZXNzaW9u
Tm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFz
QXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2
b3QsIGludCBlbmQpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShpbnQsIEV4
cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKTsK
KyAgICBFeHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUq
LCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpOworICAgIEV4cHJlc3Np
b25Ob2RlKiBtYWtlVHlwZU9mTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgRXhwcmVz
c2lvbk5vZGUqIG1ha2VEZWxldGVOb2RlKGludCAsIEV4cHJlc3Npb25Ob2RlKiwgaW50IHN0YXJ0
LCBpbnQgZGl2b3QsIGludCBlbmQpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTmVnYXRlTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXR3aXNl
Tm90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VN
dWx0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VEaXZO
b2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZU1vZE5vZGUo
aW50LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQWRkTm9kZShpbnQs
IEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VTdWJOb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdFhPck5vZGUoaW50LCBFeHBy
ZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0QW5kTm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaXRPck5vZGUoaW50LCBFeHByZXNz
aW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTGVmdFNoaWZ0Tm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VSaWdodFNoaWZ0Tm9kZShpbnQsIEV4
cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VVUmlnaHRTaGlmdE5vZGUoaW50
LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUxvZ2ljYWxOb3Qo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgTG9naWNhbE5vdE5vZGUobGluZU51bWJlciwgZXhwcik7IH0KKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlVW5hcnlQbHVzKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSog
ZXhwcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05vZGUobGluZU51bWJl
ciwgZXhwcik7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVm9pZChpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBWb2lkTm9kZShtX2dsb2JhbERhdGEs
IGV4cHIpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFZvaWROb2RlKGxpbmVO
dW1iZXIsIGV4cHIpOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogdGhpc0V4cHIoKQorICAg
IEV4cHJlc3Npb25Ob2RlKiB0aGlzRXhwcihpbnQgbGluZU51bWJlcikKICAgICB7CiAgICAgICAg
IHVzZXNUaGlzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05vZGUo
bV9nbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBUaGlzTm9k
ZShsaW5lTnVtYmVyKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUo
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBzdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlUmVzb2x2ZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGlu
dCBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUobV9nbG9iYWxEYXRhLCAq
aWRlbnQsIHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZXNvbHZl
Tm9kZShsaW5lTnVtYmVyLCAqaWRlbnQsIHN0YXJ0KTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgT2Jq
ZWN0TGl0ZXJhbE5vZGUobV9nbG9iYWxEYXRhKTsgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVPYmplY3RMaXRlcmFsKFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShtX2dsb2JhbERhdGEsIHByb3BlcnRp
ZXMpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoaW50IGxpbmVO
dW1iZXIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShsaW5l
TnVtYmVyKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGludCBs
aW5lTnVtYmVyLCBQcm9wZXJ0eUxpc3ROb2RlKiBwcm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgT2JqZWN0TGl0ZXJhbE5vZGUobGluZU51bWJlciwgcHJvcGVydGllcyk7IH0K
IAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShpbnQgZWxpc2lvbnMpCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGludCBsaW5lTnVtYmVyLCBpbnQgZWxpc2lvbnMpCiAg
ICAgewogICAgICAgICBpZiAoZWxpc2lvbnMpCiAgICAgICAgICAgICBpbmNDb25zdGFudHMoKTsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobV9nbG9iYWxEYXRh
LCBlbGlzaW9ucyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2Rl
KGxpbmVOdW1iZXIsIGVsaXNpb25zKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlQXJyYXkoRWxlbWVudE5vZGUqIGVsZW1zKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
QXJyYXlOb2RlKG1fZ2xvYmFsRGF0YSwgZWxlbXMpOyB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZUFycmF5KGludCBlbGlzaW9ucywgRWxlbWVudE5vZGUqIGVsZW1zKQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVBcnJheShpbnQgbGluZU51bWJlciwgRWxlbWVudE5vZGUqIGVsZW1zKSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxpbmVOdW1iZXIsIGVsZW1zKTsg
fQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShpbnQgbGluZU51bWJlciwgaW50IGVs
aXNpb25zLCBFbGVtZW50Tm9kZSogZWxlbXMpCiAgICAgewogICAgICAgICBpZiAoZWxpc2lvbnMp
CiAgICAgICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBBcnJheU5vZGUobV9nbG9iYWxEYXRhLCBlbGlzaW9ucywgZWxlbXMpOworICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFycmF5Tm9kZShsaW5lTnVtYmVyLCBlbGlzaW9u
cywgZWxlbXMpOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyRXhwcihk
b3VibGUgZCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyRXhwcihpbnQgbGluZU51
bWJlciwgZG91YmxlIGQpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKG1fZ2xvYmFsRGF0YSwgZCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTnVtYmVyTm9kZShsaW5lTnVtYmVyLCBk
KTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGNvbnN0IElkZW50
aWZpZXIqIHN0cmluZykKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGludCBsaW5l
TnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBzdHJpbmcpCiAgICAgewogICAgICAgICBpbmNDb25z
dGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBTdHJpbmdOb2RlKG1f
Z2xvYmFsRGF0YSwgKnN0cmluZyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
U3RyaW5nTm9kZShsaW5lTnVtYmVyLCAqc3RyaW5nKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlQm9vbGVhbihib29sIGIpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJv
b2xlYW4oaW50IGxpbmVOdW1iZXIsIGJvb2wgYikKICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50
cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJvb2xlYW5Ob2RlKG1fZ2xv
YmFsRGF0YSwgYik7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQm9vbGVhbk5v
ZGUobGluZU51bWJlciwgYik7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51
bGwoKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdWxsKGludCBsaW5lTnVtYmVyKQogICAg
IHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgTnVsbE5vZGUobV9nbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBOdWxsTm9kZShsaW5lTnVtYmVyKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlQnJhY2tldEFjY2VzcyhFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5v
ZGUqIHByb3BlcnR5LCBib29sIHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50
IGRpdm90LCBpbnQgZW5kKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNz
KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHBy
b3BlcnR5LCBib29sIHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90
LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogbm9kZSA9IG5l
dyAobV9nbG9iYWxEYXRhKSBCcmFja2V0QWNjZXNzb3JOb2RlKG1fZ2xvYmFsRGF0YSwgYmFzZSwg
cHJvcGVydHksIHByb3BlcnR5SGFzQXNzaWdubWVudHMpOworICAgICAgICBCcmFja2V0QWNjZXNz
b3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEJyYWNrZXRBY2Nlc3Nvck5vZGUobGlu
ZU51bWJlciwgYmFzZSwgcHJvcGVydHksIHByb3BlcnR5SGFzQXNzaWdubWVudHMpOwogICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3RBY2Nl
c3MoRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBpbnQg
c3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90
QWNjZXNzKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciogcHJvcGVydHksIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKLSAg
ICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIERvdEFjY2Vz
c29yTm9kZShtX2dsb2JhbERhdGEsIGJhc2UsICpwcm9wZXJ0eSk7CisgICAgICAgIERvdEFjY2Vz
c29yTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBEb3RBY2Nlc3Nvck5vZGUobGluZU51
bWJlciwgYmFzZSwgKnByb3BlcnR5KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVnRXhwKGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4s
IGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQgc3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZVJlZ0V4cChpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwg
Y29uc3QgSWRlbnRpZmllciYgZmxhZ3MsIGludCBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChZ
YXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnVzdHJpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWdFeHBO
b2RlKG1fZ2xvYmFsRGF0YSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICBSZWdFeHBOb2RlKiBu
b2RlID0gbmV3IChtX2dsb2JhbERhdGEpIFJlZ0V4cE5vZGUobGluZU51bWJlciwgcGF0dGVybiwg
ZmxhZ3MpOwogICAgICAgICBpbnQgc2l6ZSA9IHBhdHRlcm4ubGVuZ3RoKCkgKyAyOyAvLyArIDIg
Zm9yIHRoZSB0d28gLydzCiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0
LCBzdGFydCArIHNpemUsIHN0YXJ0ICsgc2l6ZSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQg
ZW5kKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGludCBsaW5lTnVtYmVyLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzLCBpbnQgc3RhcnQs
IGludCBkaXZvdCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0g
bmV3IChtX2dsb2JhbERhdGEpIE5ld0V4cHJOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwciwgYXJndW1l
bnRzKTsKKyAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3
RXhwck5vZGUobGluZU51bWJlciwgZXhwciwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihFeHByZXNzaW9u
Tm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVOZXdFeHByKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0
LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgTmV3RXhwck5vZGUobV9nbG9iYWxEYXRhLCBleHByKTsKKyAgICAgICAgTmV3RXhw
ck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUobGluZU51bWJlciwg
ZXhwcik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVu
ZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVDb25kaXRpb25hbEV4cHIoRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykKKyAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlQ29uZGl0aW9uYWxFeHByKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogY29uZGl0
aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb25kaXRpb25hbE5vZGUobV9nbG9iYWxE
YXRhLCBjb25kaXRpb24sIGxocywgcmhzKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBDb25kaXRpb25hbE5vZGUobGluZU51bWJlciwgY29uZGl0aW9uLCBsaHMsIHJocyk7CiAg
ICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGJvb2wgcmhzSGFzQXNzaWdubWVu
dCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZUFzc2lnblJlc29sdmUoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBFeHByZXNzaW9uTm9kZSogcmhzLCBib29sIHJoc0hhc0Fzc2lnbm1lbnQsIGludCBzdGFydCwg
aW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobV9nbG9iYWxEYXRhLCBp
ZGVudCwgcmhzLCByaHNIYXNBc3NpZ25tZW50KTsKKyAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUq
IG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobGluZU51bWJlciwg
aWRlbnQsIHJocywgcmhzSGFzQXNzaWdubWVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBJZGVudGlm
aWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0
ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExp
bmUsIGludCBib2R5RW5kTGluZSkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRnVuY3Rpb25F
eHByKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlO
b2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBp
bnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSkKICAg
ICB7Ci0gICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZ1
bmNFeHByTm9kZShtX2dsb2JhbERhdGEsICpuYW1lLCBib2R5LCBtX2xleGVyLT5zb3VyY2VDb2Rl
KG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBhcmFtZXRlcnMp
OworICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5j
RXhwck5vZGUobGluZU51bWJlciwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVz
c2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpLCBwYXJhbWV0
ZXJzKTsKICAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBj
cmVhdGVGdW5jdGlvbkJvZHkoYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5
Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGludCBsaW5lTnVtYmVyLCBib29sIGluU3RyaWN0Q29u
dGV4dCkKICAgICB7CiAgICAgICAgIHVzZXNDbG9zdXJlcygpOwotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgaW5TdHJpY3RDb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIGxpbmVO
dW1iZXIsIGluU3RyaWN0Q29udGV4dCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlIDxib29s
PiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFt
cywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJh
Y2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCisgICAgdGVtcGxhdGUg
PGJvb2w+IFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShpbnQgbGlu
ZU51bWJlciwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUs
IFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5C
cmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVu
ZExpbmUpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGJvZHktPnNldExv
Yyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgUHJvcGVydHlOb2RlKG1fZ2xvYmFsRGF0YSwgKm5hbWUsIG5ldyAobV9nbG9iYWxE
YXRhKSBGdW5jRXhwck5vZGUobV9nbG9iYWxEYXRhLCBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX2xleGVyLT5zb3VyY2VDb2RlKG9wZW5CcmFjZVBv
cywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOworICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZShtX2dsb2JhbERhdGEsICpu
YW1lLCBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKGxpbmVOdW1iZXIsIG1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGJvZHksIG1fc291cmNlQ29kZS0+
c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUp
LCBwYXJhbXMpLCB0eXBlKTsKICAgICB9CiAgICAgCiAKLSAgICBBcmd1bWVudHNOb2RlKiBjcmVh
dGVBcmd1bWVudHMoKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRzTm9kZSht
X2dsb2JhbERhdGEpOyB9Ci0gICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKEFyZ3Vt
ZW50TGlzdE5vZGUqIGFyZ3MpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1bWVudHNO
b2RlKG1fZ2xvYmFsRGF0YSwgYXJncyk7IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVB
cmd1bWVudHNMaXN0KEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBBcmd1bWVudExpc3ROb2RlKG1fZ2xvYmFsRGF0YSwgYXJnKTsgfQotICAgIEFyZ3VtZW50
TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoQXJndW1lbnRMaXN0Tm9kZSogYXJncywgRXhw
cmVzc2lvbk5vZGUqIGFyZykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50TGlz
dE5vZGUobV9nbG9iYWxEYXRhLCBhcmdzLCBhcmcpOyB9CisgICAgQXJndW1lbnRzTm9kZSogY3Jl
YXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50c05vZGUo
KTsgfQorICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cyhBcmd1bWVudExpc3ROb2Rl
KiBhcmdzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRzTm9kZShhcmdzKTsg
fQorICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoaW50IGxpbmVOdW1i
ZXIsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1
bWVudExpc3ROb2RlKGxpbmVOdW1iZXIsIGFyZyk7IH0KKyAgICBBcmd1bWVudExpc3ROb2RlKiBj
cmVhdGVBcmd1bWVudHNMaXN0KGludCBsaW5lTnVtYmVyLCBBcmd1bWVudExpc3ROb2RlKiBhcmdz
LCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1l
bnRMaXN0Tm9kZShsaW5lTnVtYmVyLCBhcmdzLCBhcmcpOyB9CiAKICAgICB0ZW1wbGF0ZSA8Ym9v
bD4gUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0
eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkgeyBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZShtX2dsb2JhbERhdGEsICpwcm9w
ZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9CiAgICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9k
ZSogY3JlYXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhKiwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlKSB7IHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1fZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBu
b2RlLCB0eXBlKTsgfQotICAgIFByb3BlcnR5TGlzdE5vZGUqIGNyZWF0ZVByb3BlcnR5TGlzdChQ
cm9wZXJ0eU5vZGUqIHByb3BlcnR5KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVy
dHlMaXN0Tm9kZShtX2dsb2JhbERhdGEsIHByb3BlcnR5KTsgfQotICAgIFByb3BlcnR5TGlzdE5v
ZGUqIGNyZWF0ZVByb3BlcnR5TGlzdChQcm9wZXJ0eU5vZGUqIHByb3BlcnR5LCBQcm9wZXJ0eUxp
c3ROb2RlKiB0YWlsKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlMaXN0Tm9k
ZShtX2dsb2JhbERhdGEsIHByb3BlcnR5LCB0YWlsKTsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUq
IGNyZWF0ZVByb3BlcnR5TGlzdChpbnQgbGluZU51bWJlciwgUHJvcGVydHlOb2RlKiBwcm9wZXJ0
eSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5TGlzdE5vZGUobGluZU51bWJl
ciwgcHJvcGVydHkpOyB9CisgICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0
KGludCBsaW5lTnVtYmVyLCBQcm9wZXJ0eU5vZGUqIHByb3BlcnR5LCBQcm9wZXJ0eUxpc3ROb2Rl
KiB0YWlsKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlMaXN0Tm9kZShsaW5l
TnVtYmVyLCBwcm9wZXJ0eSwgdGFpbCk7IH0KIAotICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVt
ZW50TGlzdChpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgRWxlbWVudE5vZGUobV9nbG9iYWxEYXRhLCBlbGlzaW9ucywgZXhwcik7
IH0KLSAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3QoRWxlbWVudE5vZGUqIGVsZW1z
LCBpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgRWxlbWVudE5vZGUobV9nbG9iYWxEYXRhLCBlbGVtcywgZWxpc2lvbnMsIGV4cHIp
OyB9CisgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KGludCBlbGlzaW9ucywgRXhw
cmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9k
ZShlbGlzaW9ucywgZXhwcik7IH0KKyAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3Qo
RWxlbWVudE5vZGUqIGVsZW1zLCBpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRWxlbWVudE5vZGUoZWxlbXMsIGVsaXNpb25zLCBl
eHByKTsgfQogCi0gICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFBhcmFt
ZXRlck5vZGUobV9nbG9iYWxEYXRhLCBpZGVudCk7IH0KLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVh
dGVGb3JtYWxQYXJhbWV0ZXJMaXN0KFBhcmFtZXRlck5vZGUqIGxpc3QsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShtX2ds
b2JhbERhdGEsIGxpc3QsIGlkZW50KTsgfQorICAgIFBhcmFtZXRlck5vZGUqIGNyZWF0ZUZvcm1h
bFBhcmFtZXRlckxpc3QoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBQYXJhbWV0ZXJOb2RlKGlkZW50KTsgfQorICAgIFBhcmFtZXRlck5vZGUqIGNy
ZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoUGFyYW1ldGVyTm9kZSogbGlzdCwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQYXJhbWV0ZXJOb2RlKGxp
c3QsIGlkZW50KTsgfQogCi0gICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShFeHByZXNz
aW9uTm9kZSogZXhwciwgSlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIENhc2VDbGF1c2VOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwciwgc3Rh
dGVtZW50cyk7IH0KLSAgICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDYXNlQ2xh
dXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2xhdXNlTGlzdE5v
ZGUobV9nbG9iYWxEYXRhLCBjbGF1c2UpOyB9Ci0gICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNs
YXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDbGF1c2VMaXN0Tm9kZShtX2dsb2JhbERhdGEsIHRh
aWwsIGNsYXVzZSk7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZSogY3JlYXRlQ2xhdXNlKEV4cHJlc3Np
b25Ob2RlKiBleHByLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBzdGF0ZW1lbnRzKSB7IHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgQ2FzZUNsYXVzZU5vZGUoZXhwciwgc3RhdGVtZW50cyk7IH0KKyAg
ICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDYXNlQ2xhdXNlTm9kZSogY2xhdXNl
KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2xhdXNlTGlzdE5vZGUoY2xhdXNlKTsgfQor
ICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENsYXVzZUxpc3ROb2RlKiB0YWls
LCBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2xh
dXNlTGlzdE5vZGUodGFpbCwgY2xhdXNlKTsgfQogCiAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRz
KEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpIHsgbm9kZS0+c2V0VXNlc0FyZ3VtZW50cygpOyB9CiAK
LSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBJZGVudGlm
aWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0
ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExp
bmUsIGludCBib2R5RW5kTGluZSkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0
YXRlbWVudChpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRnVuY3Rpb25C
b2R5Tm9kZSogYm9keSwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVycywgaW50IG9wZW5CcmFjZVBv
cywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUp
CiAgICAgewotICAgICAgICBGdW5jRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
RnVuY0RlY2xOb2RlKG1fZ2xvYmFsRGF0YSwgKm5hbWUsIGJvZHksIG1fbGV4ZXItPnNvdXJjZUNv
ZGUob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVy
cyk7CisgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5j
RGVjbE5vZGUobGluZU51bWJlciwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVz
c2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpLCBwYXJhbWV0
ZXJzKTsKICAgICAgICAgaWYgKCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzKQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBtX3Njb3Bl
Lm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoZGVjbC0+Ym9keSgpKTsKQEAgLTMwNywx
ODEgKzMwNywxODEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZGVjbDsKICAgICB9CiAKLSAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCbG9ja1N0YXRlbWVudChKU0M6OlNvdXJjZUVsZW1lbnRz
KiBlbGVtZW50cywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIEpTQzo6U291cmNlRWxlbWVu
dHMqIGVsZW1lbnRzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAg
IEJsb2NrTm9kZSogYmxvY2sgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQmxvY2tOb2RlKG1fZ2xvYmFs
RGF0YSwgZWxlbWVudHMpOworICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3IChtX2dsb2Jh
bERhdGEpIEJsb2NrTm9kZShsaW5lTnVtYmVyLCBlbGVtZW50cyk7CiAgICAgICAgIGJsb2NrLT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0K
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoRXhwcmVzc2lvbk5vZGUq
IGV4cHIsIGludCBzdGFydCwgaW50IGVuZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHBy
U3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0
LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgRXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBFeHByU3RhdGVtZW50Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIpOwor
ICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEV4
cHJTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIsIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVJZlN0YXRlbWVudChFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBT
dGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIGludCBzdGFydCwgaW50IGVuZCkKKyAgICBTdGF0ZW1l
bnROb2RlKiBjcmVhdGVJZlN0YXRlbWVudChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ1ZUJsb2NrLCBpbnQgc3RhcnQsIGludCBlbmQp
CiAgICAgewotICAgICAgICBJZk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBJZk5v
ZGUobV9nbG9iYWxEYXRhLCBjb25kaXRpb24sIHRydWVCbG9jayk7CisgICAgICAgIElmTm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElmTm9kZShsaW5lTnVtYmVyLCBjb25kaXRpb24s
IHRydWVCbG9jayk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3Rh
dGVtZW50KEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIHRydWVCbG9j
aywgU3RhdGVtZW50Tm9kZSogZmFsc2VCbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9u
Tm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5vZGUq
IGZhbHNlQmxvY2ssIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIElmTm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElmRWxzZU5vZGUobV9nbG9iYWxEYXRhLCBjb25k
aXRpb24sIHRydWVCbG9jaywgZmFsc2VCbG9jayk7CisgICAgICAgIElmTm9kZSogcmVzdWx0ID0g
bmV3IChtX2dsb2JhbERhdGEpIElmRWxzZU5vZGUobGluZU51bWJlciwgY29uZGl0aW9uLCB0cnVl
QmxvY2ssIGZhbHNlQmxvY2spOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVGb3JMb29wKEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGNv
bmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMs
IGJvb2wgYiwgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZv
ckxvb3AoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVz
c2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudHMsIGJvb2wgYiwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAg
Rm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZvck5vZGUobV9nbG9iYWxEYXRh
LCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzLCBiKTsKKyAgICAgICAg
Rm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZvck5vZGUobGluZU51bWJlciwg
aW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiwgaXRlciwgc3RhdGVtZW50cywgYik7CiAgICAgICAgIHJl
c3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyLCBFeHByZXNzaW9uTm9kZSogaXRlciwg
U3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQs
IGludCBpbml0U3RhcnQsIGludCBpbml0RW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
KyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3AoaW50IGxpbmVOdW1iZXIsIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJlc3Np
b25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExpbmUs
IGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgRm9ySW5Ob2RlKG1fZ2xvYmFsRGF0YSwgKmlkZW50LCBpbml0aWFsaXplciwg
aXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAt
IGluaXRTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERh
dGEpIEZvckluTm9kZShtX2dsb2JhbERhdGEsIGxpbmVOdW1iZXIsICppZGVudCwgaW5pdGlhbGl6
ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3RhcnQsIGluaXRF
bmQgLSBpbml0U3RhcnQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExp
bmUpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBkaXZvdCAr
IDEsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlRm9ySW5Mb29wKEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2Rl
KiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgZVN0YXJ0LCBpbnQgZURpdm90
LCBpbnQgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUZvckluTG9vcChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lv
bk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBlU3RhcnQsIGludCBl
RGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBGb3JJ
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobV9nbG9iYWxEYXRh
LCBsaHMsIGl0ZXIsIHN0YXRlbWVudHMpOworICAgICAgICBGb3JJbk5vZGUqIHJlc3VsdCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobV9nbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBsaHMs
IGl0ZXIsIHN0YXRlbWVudHMpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kKTsK
ICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVu
ZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlRW1wdHlTdGF0ZW1lbnQoKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlT
dGF0ZW1lbnROb2RlKG1fZ2xvYmFsRGF0YSk7IH0KKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVF
bXB0eVN0YXRlbWVudChpbnQgbGluZU51bWJlcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IEVtcHR5U3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKTsgfQogCi0gICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlVmFyU3RhdGVtZW50KEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBl
bmQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVmFyU3RhdGVtZW50KGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAg
ICAgU3RhdGVtZW50Tm9kZSogcmVzdWx0OwogICAgICAgICBpZiAoIWV4cHIpCi0gICAgICAgICAg
ICByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlTdGF0ZW1lbnROb2RlKG1fZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlTdGF0
ZW1lbnROb2RlKGxpbmVOdW1iZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgVmFyU3RhdGVtZW50Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIp
OworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFZhclN0YXRlbWVudE5v
ZGUobGluZU51bWJlciwgZXhwcik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZVJldHVyblN0YXRlbWVudChFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbiwgaW50IGVTdGFy
dCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZVJldHVyblN0YXRlbWVudChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5k
TGluZSkKICAgICB7Ci0gICAgICAgIFJldHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBSZXR1cm5Ob2RlKG1fZ2xvYmFsRGF0YSwgZXhwcmVzc2lvbik7CisgICAgICAgIFJldHVy
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZXR1cm5Ob2RlKGxpbmVOdW1iZXIs
IGV4cHJlc3Npb24pOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFy
dCwgZUVuZCwgZUVuZCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGlu
ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlQnJlYWtTdGF0ZW1lbnQoaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUs
IGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGlu
dCBsaW5lTnVtYmVyLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVu
ZExpbmUpCiAgICAgewotICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBCcmVha05vZGUobV9nbG9iYWxEYXRhKTsKKyAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtOb2RlKG1fZ2xvYmFsRGF0YSwgbGluZU51bWJlcik7
CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5k
KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCcmVha1N0
YXRlbWVudChjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGVTdGFydCwgaW50IGVFbmQsIGlu
dCBzdGFydExpbmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFr
U3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGVT
dGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAg
ICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtOb2RlKG1fZ2xv
YmFsRGF0YSwgKmlkZW50KTsKKyAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgQnJlYWtOb2RlKGxpbmVOdW1iZXIsICppZGVudCk7CiAgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChpbnQgZVN0
YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIGludCBlU3RhcnQs
IGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENv
bnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShtX2ds
b2JhbERhdGEpOworICAgICAgICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBDb250aW51ZU5vZGUobV9nbG9iYWxEYXRhLCBsaW5lTnVtYmVyKTsKICAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICBy
ZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGlu
ZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBp
bnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBDb250
aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBDb250aW51ZU5vZGUobV9nbG9i
YWxEYXRhLCAqaWRlbnQpOworICAgICAgICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9n
bG9iYWxEYXRhKSBDb250aW51ZU5vZGUobGluZU51bWJlciwgKmlkZW50KTsKICAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICBy
ZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRyeVN0YXRlbWVudChTdGF0ZW1l
bnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGJvb2wgY2F0Y2hIYXNF
dmFsLCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5Qmxv
Y2ssIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZVRyeVN0YXRlbWVudChpbnQgbGluZU51bWJlciwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBib29sIGNhdGNoSGFzRXZhbCwgU3RhdGVtZW50Tm9kZSog
Y2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrLCBpbnQgc3RhcnRMaW5lLCBp
bnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFRyeU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBUcnlOb2RlKG1fZ2xvYmFsRGF0YSwgdHJ5QmxvY2ssICppZGVudCwgY2F0Y2hIYXNF
dmFsLCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2spOworICAgICAgICBUcnlOb2RlKiByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgVHJ5Tm9kZShsaW5lTnVtYmVyLCB0cnlCbG9jaywgKmlkZW50
LCBjYXRjaEhhc0V2YWwsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIGlmIChj
YXRjaEJsb2NrKQogICAgICAgICAgICAgdXNlc0NhdGNoKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
Ci0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlU3dpdGNoU3RhdGVtZW50KEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBDbGF1c2VMaXN0Tm9kZSogZmlyc3RDbGF1c2VzLCBDYXNlQ2xhdXNlTm9kZSogZGVm
YXVsdENsYXVzZSwgQ2xhdXNlTGlzdE5vZGUqIHNlY29uZENsYXVzZXMsIGludCBzdGFydExpbmUs
IGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVN3aXRjaFN0YXRlbWVudChp
bnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIENsYXVzZUxpc3ROb2RlKiBmaXJz
dENsYXVzZXMsIENhc2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSog
c2Vjb25kQ2xhdXNlcywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAg
ICBDYXNlQmxvY2tOb2RlKiBjYXNlcyA9IG5ldyAobV9nbG9iYWxEYXRhKSBDYXNlQmxvY2tOb2Rl
KG1fZ2xvYmFsRGF0YSwgZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2Vz
KTsKLSAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFN3aXRj
aE5vZGUobV9nbG9iYWxEYXRhLCBleHByLCBjYXNlcyk7CisgICAgICAgIENhc2VCbG9ja05vZGUq
IGNhc2VzID0gbmV3IChtX2dsb2JhbERhdGEpIENhc2VCbG9ja05vZGUoZmlyc3RDbGF1c2VzLCBk
ZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsKKyAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIFN3aXRjaE5vZGUobGluZU51bWJlciwgZXhwciwgY2FzZXMp
OwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdoaWxlU3Rh
dGVtZW50KEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGlu
dCBzdGFydExpbmUsIGludCBlbmRMaW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdoaWxl
U3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50
Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAg
ICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdoaWxlTm9kZShtX2ds
b2JhbERhdGEsIGV4cHIsIHN0YXRlbWVudCk7CisgICAgICAgIFdoaWxlTm9kZSogcmVzdWx0ID0g
bmV3IChtX2dsb2JhbERhdGEpIFdoaWxlTm9kZShsaW5lTnVtYmVyLCBleHByLCBzdGF0ZW1lbnQp
OwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURvV2hpbGVT
dGF0ZW1lbnQoU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBFeHByZXNzaW9uTm9kZSogZXhwciwg
aW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRG9X
aGlsZVN0YXRlbWVudChpbnQgbGluZU51bWJlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBF
eHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewot
ICAgICAgICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIERvV2hpbGVO
b2RlKG1fZ2xvYmFsRGF0YSwgc3RhdGVtZW50LCBleHByKTsKKyAgICAgICAgRG9XaGlsZU5vZGUq
IHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBEb1doaWxlTm9kZShsaW5lTnVtYmVyLCBzdGF0
ZW1lbnQsIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2Rl
KiBzdGF0ZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVMYWJlbFN0YXRlbWVudChpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogaWRlbnQs
IFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAg
ICAgICAgTGFiZWxOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTGFiZWxOb2RlKG1f
Z2xvYmFsRGF0YSwgKmlkZW50LCBzdGF0ZW1lbnQpOworICAgICAgICBMYWJlbE5vZGUqIHJlc3Vs
dCA9IG5ldyAobV9nbG9iYWxEYXRhKSBMYWJlbE5vZGUobGluZU51bWJlciwgKmlkZW50LCBzdGF0
ZW1lbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQs
IGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlV2l0aFN0YXRlbWVudChFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9k
ZSogc3RhdGVtZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoaW50IGxpbmVOdW1i
ZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBz
dGFydCwgaW50IGVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewogICAgICAg
ICB1c2VzV2l0aCgpOwotICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERh
dGEpIFdpdGhOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0
YXJ0KTsKKyAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBXaXRo
Tm9kZShsaW5lTnVtYmVyLCBleHByLCBzdGF0ZW1lbnQsIGVuZCwgZW5kIC0gc3RhcnQpOwogICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0gICAgCiAgICAgCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVGhyb3dT
dGF0ZW1lbnQoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVGhyb3dTdGF0
ZW1lbnQoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGlu
dCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgVGhyb3dO
b2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhyb3dOb2RlKG1fZ2xvYmFsRGF0YSwg
ZXhwcik7CisgICAgICAgIFRocm93Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRo
cm93Tm9kZShsaW5lTnVtYmVyLCBleHByKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFy
dCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVEZWJ1Z2dlcihpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
KyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVEZWJ1Z2dlcihpbnQgbGluZU51bWJlciwgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudE5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBEZWJ1Z2dlclN0YXRlbWVudE5vZGUobV9n
bG9iYWxEYXRhKTsKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRGVidWdnZXJTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpOwogICAgICAg
ICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb25zdFN0YXRlbWVu
dChDb25zdERlY2xOb2RlKiBkZWNscywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlQ29uc3RTdGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIENvbnN0
RGVjbE5vZGUqIGRlY2xzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAg
ICAgIENvbnN0U3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnN0
U3RhdGVtZW50Tm9kZShtX2dsb2JhbERhdGEsIGRlY2xzKTsKKyAgICAgICAgQ29uc3RTdGF0ZW1l
bnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29uc3RTdGF0ZW1lbnROb2RlKGxp
bmVOdW1iZXIsIGRlY2xzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBDb25zdERlY2xOb2Rl
KiBhcHBlbmRDb25zdERlY2woQ29uc3REZWNsTm9kZSogdGFpbCwgY29uc3QgSWRlbnRpZmllciog
bmFtZSwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQorICAgIENvbnN0RGVjbE5vZGUqIGFw
cGVuZENvbnN0RGVjbChpbnQgbGluZU51bWJlciwgQ29uc3REZWNsTm9kZSogdGFpbCwgY29uc3Qg
SWRlbnRpZmllciogbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQogICAgIHsKLSAg
ICAgICAgQ29uc3REZWNsTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnN0RGVj
bE5vZGUobV9nbG9iYWxEYXRhLCAqbmFtZSwgaW5pdGlhbGl6ZXIpOworICAgICAgICBDb25zdERl
Y2xOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29uc3REZWNsTm9kZShsaW5lTnVt
YmVyLCAqbmFtZSwgaW5pdGlhbGl6ZXIpOwogICAgICAgICBpZiAodGFpbCkKICAgICAgICAgICAg
IHRhaWwtPm1fbmV4dCA9IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ5OSw3
ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMtPmRh
dGEuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkZW50LCBhdHRycykpOwogICAgIH0KIAotICAgIEV4
cHJlc3Npb25Ob2RlKiBjb21iaW5lQ29tbWFOb2RlcyhFeHByZXNzaW9uTm9kZSogbGlzdCwgRXhw
cmVzc2lvbk5vZGUqIGluaXQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNvbWJpbmVDb21tYU5vZGVz
KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogbGlzdCwgRXhwcmVzc2lvbk5vZGUqIGlu
aXQpCiAgICAgewogICAgICAgICBpZiAoIWxpc3QpCiAgICAgICAgICAgICByZXR1cm4gaW5pdDsK
QEAgLTUwNyw3ICs1MDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb21t
YU5vZGUqPihsaXN0KS0+YXBwZW5kKGluaXQpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobV9n
bG9iYWxEYXRhLCBsaXN0LCBpbml0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBDb21tYU5vZGUobGluZU51bWJlciwgbGlzdCwgaW5pdCk7CiAgICAgfQogCiAgICAgaW50IGV2
YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvdW50OyB9CkBAIC01MzUsMTAgKzUzNSwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChvcGVyYW5kU3RhY2tEZXB0aCA+PSAwKTsKICAg
ICAgICAgbV9iaW5hcnlPcGVyYW5kU3RhY2sucmVzaXplKG1fYmluYXJ5T3BlcmFuZFN0YWNrLnNp
emUoKSAtIGFtb3VudCk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kQmluYXJ5T3BlcmF0aW9uKGlu
dCYgb3BlcmFuZFN0YWNrRGVwdGgsIGludCYsIGNvbnN0IEJpbmFyeU9wZXJhbmQmIGxocywgY29u
c3QgQmluYXJ5T3BlcmFuZCYgcmhzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5T3BlcmF0aW9uKGlu
dCBsaW5lTnVtYmVyLCBpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBpbnQmLCBjb25zdCBCaW5hcnlP
cGVyYW5kJiBsaHMsIGNvbnN0IEJpbmFyeU9wZXJhbmQmIHJocykKICAgICB7CiAgICAgICAgIG9w
ZXJhbmRTdGFja0RlcHRoKys7Ci0gICAgICAgIG1fYmluYXJ5T3BlcmFuZFN0YWNrLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihtYWtlQmluYXJ5Tm9kZShtX2JpbmFyeU9wZXJhdG9yU3RhY2subGFzdCgp
LmZpcnN0LCBsaHMsIHJocyksIEJpbmFyeU9wSW5mbyhsaHMuc2Vjb25kLCByaHMuc2Vjb25kKSkp
OworICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIobWFr
ZUJpbmFyeU5vZGUobGluZU51bWJlciwgbV9iaW5hcnlPcGVyYXRvclN0YWNrLmxhc3QoKS5maXJz
dCwgbGhzLCByaHMpLCBCaW5hcnlPcEluZm8obGhzLnNlY29uZCwgcmhzLnNlY29uZCkpKTsKICAg
ICB9CiAgICAgdm9pZCBvcGVyYXRvclN0YWNrQXBwZW5kKGludCYgb3BlcmF0b3JTdGFja0RlcHRo
LCBpbnQgb3AsIGludCBwcmVjZWRlbmNlKQogICAgIHsKQEAgLTU4MCw5ICs1ODAsOSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFjay5hcHBlbmQoQXNzaWdubWVudEluZm8o
bm9kZSwgc3RhcnQsIGRpdm90LCBhc3NpZ25tZW50Q291bnQsIG9wKSk7CiAgICAgfQogCi0gICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnbm1lbnQoaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0
aCwgRXhwcmVzc2lvbk5vZGUqIHJocywgaW50IGluaXRpYWxBc3NpZ25tZW50Q291bnQsIGludCBj
dXJyZW50QXNzaWdubWVudENvdW50LCBpbnQgbGFzdFRva2VuRW5kKQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVBc3NpZ25tZW50KGludCBsaW5lTnVtYmVyLCBpbnQmIGFzc2lnbm1lbnRTdGFj
a0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwg
aW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGludCBsYXN0VG9rZW5FbmQpCiAgICAgewotICAg
ICAgICBFeHByZXNzaW9uTm9kZSogcmVzdWx0ID0gbWFrZUFzc2lnbk5vZGUobV9hc3NpZ25tZW50
SW5mb1N0YWNrLmxhc3QoKS5tX25vZGUsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9v
cCwgcmhzLCBtX2Fzc2lnbm1lbnRJbmZvU3RhY2subGFzdCgpLm1faW5pdEFzc2lnbm1lbnRzICE9
IGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9p
bml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgbV9hc3NpZ25tZW50SW5m
b1N0YWNrLmxhc3QoKS5tX3N0YXJ0LCBtX2Fzc2lnbm1lbnRJbmZvU3RhY2subGFzdCgpLm1fZGl2
b3QgKyAxLCBsYXN0VG9rZW5FbmQpOworICAgICAgICBFeHByZXNzaW9uTm9kZSogcmVzdWx0ID0g
bWFrZUFzc2lnbk5vZGUobGluZU51bWJlciwgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmxhc3QoKS5t
X25vZGUsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9vcCwgcmhzLCBtX2Fzc2lnbm1l
bnRJbmZvU3RhY2subGFzdCgpLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50
Q291bnQsIG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCkubV9pbml0QXNzaWdubWVudHMgIT0g
Y3VycmVudEFzc2lnbm1lbnRDb3VudCwgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmxhc3QoKS5tX3N0
YXJ0LCBtX2Fzc2lnbm1lbnRJbmZvU3RhY2subGFzdCgpLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5F
bmQpOwogICAgICAgICBtX2Fzc2lnbm1lbnRJbmZvU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAg
ICBhc3NpZ25tZW50U3RhY2tEZXB0aC0tOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjI1
LDEzICs2MjUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgbV9ldmFsQ291bnQrKzsKICAgICAgICAg
bV9zY29wZS5tX2ZlYXR1cmVzIHw9IEV2YWxGZWF0dXJlOwogICAgIH0KLSAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlTnVtYmVyKGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVO
dW1iZXIoaW50IGxpbmVOdW1iZXIsIGRvdWJsZSBkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKG1fZ2xvYmFsRGF0YSwgZCk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTnVtYmVyTm9kZShsaW5lTnVtYmVyLCBkKTsKICAgICB9
CiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgTGV4ZXIqIG1fbGV4
ZXI7CisgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3BlIG1fc2NvcGU7CiAg
ICAgVmVjdG9yPEJpbmFyeU9wZXJhbmQsIDEwPiBtX2JpbmFyeU9wZXJhbmRTdGFjazsKICAgICBW
ZWN0b3I8QXNzaWdubWVudEluZm8sIDEwPiBtX2Fzc2lnbm1lbnRJbmZvU3RhY2s7CkBAIC02NDAs
MzMgKzY0MCwzMyBAQCBwcml2YXRlOgogICAgIGludCBtX2V2YWxDb3VudDsKIH07CiAKLUV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVHlwZU9mTm9kZShFeHByZXNzaW9uTm9kZSogZXhw
cikKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVHlwZU9mTm9kZShpbnQgbGluZU51
bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5v
ZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29s
dmVOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVHlwZU9m
UmVzb2x2ZU5vZGUobV9nbG9iYWxEYXRhLCByZXNvbHZlLT5pZGVudGlmaWVyKCkpOworICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFR5cGVPZlJlc29sdmVOb2RlKGxpbmVOdW1iZXIs
IHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CiAgICAgfQotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgVHlwZU9mVmFsdWVOb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcik7CisgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBUeXBlT2ZWYWx1ZU5vZGUobGluZU51bWJlciwgZXhwcik7CiB9CiAK
LUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShFeHByZXNzaW9uTm9k
ZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCitFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZURlbGV0ZU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWV4cHIt
PmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVW
YWx1ZU5vZGUobV9nbG9iYWxEYXRhLCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBEZWxldGVWYWx1ZU5vZGUobGluZU51bWJlciwgZXhwcik7CiAgICAgaWYgKGV4cHIt
PmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRp
Y19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgRGVsZXRlUmVzb2x2ZU5vZGUobV9nbG9iYWxEYXRhLCByZXNvbHZlLT5pZGVudGlmaWVy
KCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgRGVsZXRlUmVzb2x2ZU5vZGUobGluZU51bWJlciwgcmVzb2x2ZS0+
aWRlbnRpZmllcigpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0K
ICAgICBpZiAoZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tl
dEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUq
PihleHByKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVCcmFja2V0
Tm9kZShtX2dsb2JhbERhdGEsIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCks
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgRGVsZXRlQnJhY2tldE5vZGUobGluZU51bWJlciwgYnJhY2tldC0+YmFz
ZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90KTsKICAgICB9CiAgICAgQVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAg
IERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZXhw
cik7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVEb3ROb2RlKG1fZ2xvYmFs
RGF0YSwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkaXZvdCwgZGl2b3QgLSBzdGFy
dCwgZW5kIC0gZGl2b3QpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRGVsZXRlRG90
Tm9kZShsaW5lTnVtYmVyLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBk
aXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWls
ZGVyOjptYWtlTmVnYXRlTm9kZShFeHByZXNzaW9uTm9kZSogbikKK0V4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlTmVnYXRlTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IG4pCiB7CiAgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsKICAgICAgICAgTnVtYmVyTm9kZSogbnVt
YmVyTm9kZSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihuKTsKQEAgLTY3NCwxMjggKzY3NCwx
MjggQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVObwogICAgICAgICBy
ZXR1cm4gbnVtYmVyTm9kZTsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IE5lZ2F0ZU5vZGUobV9nbG9iYWxEYXRhLCBuKTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIE5lZ2F0ZU5vZGUobGluZU51bWJlciwgbik7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpCitFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKGludCBsaW5lTnVtYmVyLCBF
eHByZXNzaW9uTm9kZSogZXhwcikKIHsKICAgICBpZiAoZXhwci0+aXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZU51bWJlcih+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwciktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdHdpc2VO
b3ROb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcik7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIo
bGluZU51bWJlciwgfnRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIpLT52YWx1
ZSgpKSk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBCaXR3aXNlTm90Tm9kZShsaW5l
TnVtYmVyLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0
Tm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0
Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBleHByMSA9IGV4cHIx
LT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7
CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+
dmFsdWUoKSAqIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOworICAg
ICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxpbmVOdW1iZXIsIHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMSktPnZhbHVlKCkgKiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52
YWx1ZSgpKTsKIAogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgVW5hcnlQbHVzTm9kZShtX2dsb2JhbERhdGEsIGV4cHIyKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxpbmVOdW1iZXIsIGV4cHIyKTsK
IAogICAgIGlmIChleHByMi0+aXNOdW1iZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwcjIpLT52YWx1ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
VW5hcnlQbHVzTm9kZShtX2dsb2JhbERhdGEsIGV4cHIxKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxpbmVOdW1iZXIsIGV4cHIxKTsKIAotICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTXVsdE5vZGUobV9nbG9iYWxEYXRhLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
TXVsdE5vZGUobGluZU51bWJlciwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
IH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEaXZOb2RlKEV4cHJlc3Npb25O
b2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURpdk5vZGUoaW50IGxpbmVOdW1i
ZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgZXhwcjEgPSBleHByMS0+c3RyaXBVbmFyeVBsdXMo
KTsKICAgICBleHByMiA9IGV4cHIyLT5zdHJpcFVuYXJ5UGx1cygpOwogCiAgICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLyBzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIERpdk5vZGUobV9nbG9iYWxEYXRhLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNz
aWdubWVudHMpOworICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxpbmVOdW1iZXIsIHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLyBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERp
dk5vZGUobGluZU51bWJlciwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0K
IAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNb2ROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
CitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5vZGUoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCiB7CiAgICAgZXhwcjEgPSBleHByMS0+c3RyaXBVbmFyeVBsdXMoKTsK
ICAgICBleHByMiA9IGV4cHIyLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIAogICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZU51bWJlcihmbW9kKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCksIHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIE1vZE5vZGUobV9nbG9iYWxEYXRhLCBleHByMSwgZXhwcjIsIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxpbmVOdW1iZXIs
IGZtb2Qoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgTW9kTm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQWRkTm9kZShpbnQg
bGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkg
JiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIoc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSArIHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMiktPnZhbHVlKCkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQWRk
Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIxKS0+dmFsdWUoKSArIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMikt
PnZhbHVlKCkpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQWRkTm9kZShsaW5lTnVt
YmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKIHsKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0g
ZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIoc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAtIHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMiktPnZhbHVlKCkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgU3ViTm9k
ZShtX2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIxKS0+dmFsdWUoKSAtIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZh
bHVlKCkpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgU3ViTm9kZShsaW5lTnVtYmVy
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUxlZnRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZShpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVt
YmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIodG9JbnQzMihzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA8PCAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBMZWZ0U2hpZnROb2RlKG1fZ2xvYmFsRGF0YSwgZXhwcjEsIGV4cHIyLCByaWdo
dEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsaW5lTnVtYmVy
LCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8ICh0
b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYp
KTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlZnRTaGlmdE5vZGUobGluZU51bWJl
ciwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAotRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShpbnQgbGluZU51bWJlciwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIodG9JbnQzMihzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBSaWdodFNoaWZ0Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwg
cmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51
bWJlciwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA+
PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAw
eDFmKSk7CisgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSaWdodFNoaWZ0Tm9kZShsaW5l
TnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVVSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQor
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUoaW50IGxpbmVO
dW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4
cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKHRvVUludDMyKHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUobV9nbG9iYWxEYXRh
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICByZXR1cm4gY3Jl
YXRlTnVtYmVyKGxpbmVOdW1iZXIsIHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVu
c2lnbmVkUmlnaHRTaGlmdE5vZGUobGluZU51bWJlciwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRPck5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0T3JO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNO
dW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJl
cih0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIHwgdG9J
bnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7Ci0gICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBCaXRPck5vZGUobV9nbG9iYWxEYXRhLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxp
bmVOdW1iZXIsIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUo
KSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsK
KyAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdE9yTm9kZShsaW5lTnVtYmVyLCBleHBy
MSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKK0V4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0QW5kTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykK
IHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIodG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwcjEpLT52YWx1ZSgpKSAmIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIy
KS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0QW5kTm9kZSht
X2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSAmIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0
QW5kTm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwog
fQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIodG9JbnQzMihz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSBeIHRvSW50MzIoc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQml0WE9yTm9kZShtX2dsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobGluZU51bWJlciwg
dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSBeIHRvSW50
MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0WE9yTm9kZShsaW5lTnVtYmVyLCBleHByMSwgZXhwcjIs
IHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQorRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9u
Tm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGlu
dCBlbmQpCiB7CiAgICAgaWYgKCFmdW5jLT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKG1fZ2xvYmFsRGF0YSwgZnVu
YywgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobGluZU51bWJlciwg
ZnVuYywgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBpZiAo
ZnVuYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0g
c3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKICAgICAgICAgaWYgKGlkZW50
aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7CiAgICAgICAgICAg
ICB1c2VzRXZhbCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFdmFs
RnVuY3Rpb25DYWxsTm9kZShtX2dsb2JhbERhdGEsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEV2
YWxGdW5jdGlvbkNhbGxOb2RlKGxpbmVOdW1iZXIsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShtX2dsb2JhbERhdGEsIGlkZW50aWZpZXIsIGFy
Z3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobGluZU51bWJlciwgaWRl
bnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9
CiAgICAgaWYgKGZ1bmMtPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNr
ZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2Rl
Kj4oZnVuYyk7Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3ICht
X2dsb2JhbERhdGEpIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKG1fZ2xvYmFsRGF0YSwgYnJhY2tl
dC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUqIG5vZGUg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobGluZU51bWJlciwg
YnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbklu
Zm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICByZXR1
cm4gbm9kZTsKICAgICB9CkBAIC04MDMsMTczICs4MDMsMTczIEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlRnVuY3Rpb24KICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRp
Y19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUq
IG5vZGU7CiAgICAgaWYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVy
dHlOYW1lcy0+Y2FsbCkKLSAgICAgICAgbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZShtX2dsb2JhbERhdGEsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZp
ZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAg
bm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShsaW5lTnVt
YmVyLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAt
IHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgZWxzZSBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0g
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcHBseSkKLSAgICAgICAgbm9kZSA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobV9nbG9iYWxEYXRhLCBkb3Qt
PmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXBwbHlGdW5j
dGlvbkNhbGxEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIo
KSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBlbHNlCi0g
ICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsRG90Tm9kZShtX2ds
b2JhbERhdGEsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRp
dm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9nbG9iYWxE
YXRhKSBGdW5jdGlvbkNhbGxEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgpLCBkb3QtPmlk
ZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAg
ICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZW5kT2Zmc2V0
KCkpOwogICAgIHJldHVybiBub2RlOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZUJpbmFyeU5vZGUoaW50IHRva2VuLCBwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJ
bmZvPiBsaHMsIHBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+IHJocykKK0V4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm9kZShpbnQgbGluZU51bWJlciwgaW50
IHRva2VuLCBwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiBsaHMsIHBhaXI8RXhw
cmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+IHJocykKIHsKICAgICBzd2l0Y2ggKHRva2VuKSB7
CiAgICAgY2FzZSBPUjoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2Fs
T3BOb2RlKG1fZ2xvYmFsRGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbE9yKTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsT3BOb2RlKGxpbmVOdW1i
ZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBPcExvZ2ljYWxPcik7CiAKICAgICBjYXNlIEFORDoK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsT3BOb2RlKG1fZ2xvYmFs
RGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbEFuZCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE9wTm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3Qs
IHJocy5maXJzdCwgT3BMb2dpY2FsQW5kKTsKIAogICAgIGNhc2UgQklUT1I6Ci0gICAgICAgIHJl
dHVybiBtYWtlQml0T3JOb2RlKGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fz
c2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbWFrZUJpdE9yTm9kZShsaW5lTnVtYmVyLCBsaHMu
Zmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2Ug
QklUWE9SOgotICAgICAgICByZXR1cm4gbWFrZUJpdFhPck5vZGUobGhzLmZpcnN0LCByaHMuZmly
c3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlQml0WE9y
Tm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3Np
Z25tZW50KTsKIAogICAgIGNhc2UgQklUQU5EOgotICAgICAgICByZXR1cm4gbWFrZUJpdEFuZE5v
ZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAg
ICAgIHJldHVybiBtYWtlQml0QW5kTm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJz
dCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgRVFFUToKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFcXVhbE5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBFcXVhbE5vZGUobGluZU51bWJlciwgbGhzLmZpcnN0LCByaHMu
Zmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIE5FOgotICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE5vdEVxdWFsTm9kZShtX2dsb2JhbERhdGEsIGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE5vdEVxdWFsTm9kZShsaW5lTnVtYmVyLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgU1RS
RVE6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgU3RyaWN0RXF1YWxOb2RlKG1f
Z2xvYmFsRGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVu
dCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgU3RyaWN0RXF1YWxOb2RlKGxp
bmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQp
OwogCiAgICAgY2FzZSBTVFJORVE6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
Tm90U3RyaWN0RXF1YWxOb2RlKG1fZ2xvYmFsRGF0YSwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJo
cy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgTm90U3RyaWN0RXF1YWxOb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBMVDoKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzTm9kZShtX2dsb2JhbERhdGEsIGxocy5maXJzdCwgcmhz
LmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIExlc3NOb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBHVDoKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBHcmVhdGVyTm9kZShtX2dsb2JhbERhdGEsIGxocy5maXJzdCwg
cmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIEdyZWF0ZXJOb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZp
cnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBMRToKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzRXFOb2RlKG1fZ2xvYmFsRGF0YSwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgTGVzc0VxTm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJo
cy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgR0U6Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRlckVxTm9kZShtX2dsb2JhbERhdGEs
IGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEdyZWF0ZXJFcU5vZGUobGluZU51bWJlciwgbGhz
LmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNl
IElOU1RBTkNFT0Y6IHsKLSAgICAgICAgSW5zdGFuY2VPZk5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgSW5zdGFuY2VPZk5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJz
dCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgSW5zdGFuY2VPZk5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSW5zdGFuY2VPZk5vZGUobGluZU51bWJlciwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAgICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQs
IHJocy5zZWNvbmQuZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAgY2Fz
ZSBJTlRPS0VOOiB7Ci0gICAgICAgIEluTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBJ
bk5vZGUobV9nbG9iYWxEYXRhLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNB
c3NpZ25tZW50KTsKKyAgICAgICAgSW5Ob2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIElu
Tm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3Np
Z25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5z
dGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAKICAgICBjYXNlIExTSElGVDoKLSAgICAgICAgcmV0dXJuIG1ha2VMZWZ0
U2hpZnROb2RlKGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQp
OworICAgICAgICByZXR1cm4gbWFrZUxlZnRTaGlmdE5vZGUobGluZU51bWJlciwgbGhzLmZpcnN0
LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFJTSElG
VDoKLSAgICAgICAgcmV0dXJuIG1ha2VSaWdodFNoaWZ0Tm9kZShsaHMuZmlyc3QsIHJocy5maXJz
dCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VSaWdodFNo
aWZ0Tm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNB
c3NpZ25tZW50KTsKIAogICAgIGNhc2UgVVJTSElGVDoKLSAgICAgICAgcmV0dXJuIG1ha2VVUmln
aHRTaGlmdE5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVu
dCk7CisgICAgICAgIHJldHVybiBtYWtlVVJpZ2h0U2hpZnROb2RlKGxpbmVOdW1iZXIsIGxocy5m
aXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBQ
TFVTOgotICAgICAgICByZXR1cm4gbWFrZUFkZE5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJo
cy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlQWRkTm9kZShsaW5l
TnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
IAogICAgIGNhc2UgTUlOVVM6Ci0gICAgICAgIHJldHVybiBtYWtlU3ViTm9kZShsaHMuZmlyc3Qs
IHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG1h
a2VTdWJOb2RlKGxpbmVOdW1iZXIsIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhh
c0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBUSU1FUzoKLSAgICAgICAgcmV0dXJuIG1ha2VNdWx0
Tm9kZShsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VNdWx0Tm9kZShsaW5lTnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJz
dCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgRElWSURFOgotICAgICAg
ICByZXR1cm4gbWFrZURpdk5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFz
QXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlRGl2Tm9kZShsaW5lTnVtYmVyLCBsaHMu
Zmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2Ug
TU9EOgotICAgICAgICByZXR1cm4gbWFrZU1vZE5vZGUobGhzLmZpcnN0LCByaHMuZmlyc3QsIHJo
cy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBtYWtlTW9kTm9kZShsaW5l
TnVtYmVyLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
ICAgICB9CiAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gMDsKIH0KIAotRXhwcmVzc2lvbk5vZGUq
IEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25Ob2RlKEV4cHJlc3Npb25Ob2RlKiBsb2MsIE9wZXJhdG9y
IG9wLCBFeHByZXNzaW9uTm9kZSogZXhwciwgYm9vbCBsb2NIYXNBc3NpZ25tZW50cywgYm9vbCBl
eHBySGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQorRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25Ob2RlKGludCBsaW5lTnVtYmVyLCBFeHBy
ZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wg
bG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICB1c2VzQXNzaWdubWVudCgpOwogICAgIGlmICghbG9j
LT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWdu
RXJyb3JOb2RlKG1fZ2xvYmFsRGF0YSwgbG9jLCBvcCwgZXhwciwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3Np
Z25FcnJvck5vZGUobGluZU51bWJlciwgbG9jLCBvcCwgZXhwciwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKIAogICAgIGlmIChsb2MtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAg
ICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obG9j
KTsKICAgICAgICAgaWYgKG9wID09IE9wRXF1YWwpIHsKLSAgICAgICAgICAgIEFzc2lnblJlc29s
dmVOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEFzc2lnblJlc29sdmVOb2RlKG1fZ2xv
YmFsRGF0YSwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBleHByLCBleHBySGFzQXNzaWdubWVudHMp
OworICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgQXNzaWduUmVzb2x2ZU5vZGUobGluZU51bWJlciwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBl
eHByLCBleHBySGFzQXNzaWdubWVudHMpOwogICAgICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGUobV9nbG9iYWxEYXRhLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBl
eHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxp
bmVOdW1iZXIsIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25t
ZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9CiAgICAgaWYg
KGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29y
Tm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihsb2MpOwog
ICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgQXNzaWduQnJhY2tldE5vZGUobV9nbG9iYWxEYXRhLCBicmFja2V0LT5iYXNlKCks
IGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fz
c2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQsIGVu
ZCAtIGJyYWNrZXQtPmRpdm90KCkpOwotICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKG1fZ2xvYmFsRGF0
YSwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGV4cHIsIGxvY0hh
c0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFzc2ln
bkJyYWNrZXROb2RlKGxpbmVOdW1iZXIsIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2Ny
aXB0KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNr
ZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2
b3QoKSk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9i
YWxEYXRhKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobGluZU51bWJlciwgYnJhY2tldC0+YmFzZSgp
LCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBy
SGFzQXNzaWdubWVudHMsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAg
ICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQt
PmVuZE9mZnNldCgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEFTU0VSVChs
b2MtPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3Rh
dGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obG9jKTsKICAgICBpZiAob3AgPT0gT3BFcXVhbCkK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25Eb3ROb2RlKG1fZ2xvYmFs
RGF0YSwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBleHByLCBleHBySGFzQXNzaWdu
bWVudHMsIGRvdC0+ZGl2b3QoKSwgZG90LT5kaXZvdCgpIC0gc3RhcnQsIGVuZCAtIGRvdC0+ZGl2
b3QoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduRG90Tm9kZShs
aW5lTnVtYmVyLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4cHJIYXNB
c3NpZ25tZW50cywgZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gZG90
LT5kaXZvdCgpKTsKIAotICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX2dsb2Jh
bERhdGEpIFJlYWRNb2RpZnlEb3ROb2RlKG1fZ2xvYmFsRGF0YSwgZG90LT5iYXNlKCksIGRvdC0+
aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3Qg
LSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3
IChtX2dsb2JhbERhdGEpIFJlYWRNb2RpZnlEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+YmFzZSgp
LCBkb3QtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9u
SW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBub2RlOwog
fQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVByZWZpeE5vZGUoRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkK
K0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZv
dCwgaW50IGVuZCkKIHsKICAgICB1c2VzQXNzaWdubWVudCgpOwogICAgIGlmICghZXhwci0+aXNM
b2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByZWZpeEVycm9y
Tm9kZShtX2dsb2JhbERhdGEsIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0g
ZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByZWZpeEVycm9yTm9k
ZShsaW5lTnVtYmVyLCBleHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
KTsKIAogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5v
ZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByZWZpeFJlc29sdmVOb2RlKG1fZ2xvYmFsRGF0YSwg
cmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcmVmaXhSZXNvbHZlTm9k
ZShsaW5lTnVtYmVyLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0KICAgICBpZiAoZXhwci0+aXNCcmFja2V0QWNjZXNz
b3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRp
Y19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihleHByKTsKLSAgICAgICAgUHJlZml4QnJhY2tl
dE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4QnJhY2tldE5vZGUobV9nbG9i
YWxEYXRhLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgUHJlZml4QnJhY2tldE5vZGUq
IG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4QnJhY2tldE5vZGUobGluZU51bWJlciwg
YnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGRpdm90LCBkaXZvdCAt
IHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZv
KGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICByZXR1
cm4gbm9kZTsKICAgICB9CiAgICAgQVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwog
ICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4o
ZXhwcik7Ci0gICAgUHJlZml4RG90Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBQcmVm
aXhEb3ROb2RlKG1fZ2xvYmFsRGF0YSwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBv
cCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICBQcmVmaXhEb3ROb2Rl
KiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIFByZWZpeERvdE5vZGUobGluZU51bWJlciwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCks
IGRvdC0+c3RhcnRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlUG9zdGZpeE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9w
ZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKK0V4cHJlc3Npb25Ob2Rl
KiBBU1RCdWlsZGVyOjptYWtlUG9zdGZpeE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25O
b2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiB7
CiAgICAgdXNlc0Fzc2lnbm1lbnQoKTsKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4RXJyb3JOb2RlKG1fZ2xvYmFs
RGF0YSwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeEVycm9yTm9kZShsaW5lTnVtYmVy
LCBleHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKIAogICAgIGlm
IChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUg
PSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIFBvc3RmaXhSZXNvbHZlTm9kZShtX2dsb2JhbERhdGEsIHJlc29sdmUtPmlk
ZW50aWZpZXIoKSwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeFJlc29sdmVOb2RlKGxpbmVOdW1i
ZXIsIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJh
Y2tldEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgICAgICBQb3N0Zml4QnJhY2tldE5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeEJyYWNrZXROb2RlKG1fZ2xvYmFsRGF0YSwg
YnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGRpdm90LCBkaXZvdCAt
IHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIFBvc3RmaXhCcmFja2V0Tm9kZSogbm9kZSA9
IG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4QnJhY2tldE5vZGUobGluZU51bWJlciwgYnJhY2tl
dC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CiAgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNr
ZXQtPmRpdm90KCksIGJyYWNrZXQtPmVuZE9mZnNldCgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7
CiAKICAgICB9CiAgICAgQVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERv
dEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZXhwcik7
Ci0gICAgUG9zdGZpeERvdE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUG9zdGZpeERv
dE5vZGUobV9nbG9iYWxEYXRhLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIG9wLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIFBvc3RmaXhEb3ROb2RlKiBu
b2RlID0gbmV3IChtX2dsb2JhbERhdGEpIFBvc3RmaXhEb3ROb2RlKGxpbmVOdW1iZXIsIGRvdC0+
YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7CiAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBk
b3QtPmVuZE9mZnNldCgpKTsKICAgICByZXR1cm4gbm9kZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCShyZXZpc2lvbiA5ODc2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI0NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkpTUGFyc2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJOb2RlSW5mby5o
IgotI2luY2x1ZGUgIkFTVEJ1aWxkZXIuaCIKLSNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgot
I2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRo
cmVhZERhdGEuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwot
Ci1uYW1lc3BhY2UgSlNDIHsKLSNkZWZpbmUgZmFpbCgpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRh
dGVFcnJvck1lc3NhZ2UoKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxXaXRo
VG9rZW4odG9rKSBkbyB7IGlmICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNzYWdlKHRvayk7IHJl
dHVybiAwOyB9IHdoaWxlICgwKQotI2RlZmluZSBmYWlsV2l0aE1lc3NhZ2UobXNnKSBkbyB7IGlm
ICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNzYWdlKG1zZyk7IHJldHVybiAwOyB9IHdoaWxlICgw
KQotI2RlZmluZSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpIGRv
IHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvcldpdGhOYW1lQW5kTWVzc2FnZShiZWZvcmUsIG5h
bWUsIGFmdGVyKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZkZhbHNlKGNv
bmQpIGRvIHsgaWYgKCEoY29uZCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmFpbElm
RmFsc2VXaXRoTWVzc2FnZShjb25kLCBtc2cpIGRvIHsgaWYgKCEoY29uZCkpIGZhaWxXaXRoTWVz
c2FnZShtc2cpOyB9IHdoaWxlICgwKQotI2RlZmluZSBmYWlsSWZGYWxzZVdpdGhOYW1lQW5kTWVz
c2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIG1zZykgZG8geyBpZiAoIShjb25kKSkgZmFpbFdpdGhO
YW1lQW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIG1zZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZh
aWxJZlRydWUoY29uZCkgZG8geyBpZiAoKGNvbmQpKSBmYWlsKCk7IH0gd2hpbGUgKDApCi0jZGVm
aW5lIGZhaWxJZlRydWVXaXRoTWVzc2FnZShjb25kLCBtc2cpIGRvIHsgaWYgKChjb25kKSkgZmFp
bFdpdGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZlRydWVXaXRoTmFt
ZUFuZE1lc3NhZ2UoY29uZCwgYmVmb3JlLCBuYW1lLCBtc2cpIGRvIHsgaWYgKChjb25kKSkgZmFp
bFdpdGhOYW1lQW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIG1zZyk7IH0gd2hpbGUgKDApCi0jZGVm
aW5lIGZhaWxJZlRydWVJZlN0cmljdChjb25kKSBkbyB7IGlmICgoY29uZCkgJiYgc3RyaWN0TW9k
ZSgpKSBmYWlsKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZlRydWVJZlN0cmljdFdpdGhN
ZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAoKGNvbmQpICYmIHN0cmljdE1vZGUoKSkgZmFpbFdp
dGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZlRydWVJZlN0cmljdFdp
dGhOYW1lQW5kTWVzc2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIGFmdGVyKSBkbyB7IGlmICgoY29u
ZCkgJiYgc3RyaWN0TW9kZSgpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwg
YWZ0ZXIpOyB9IHdoaWxlICgwKQotI2RlZmluZSBmYWlsSWZGYWxzZUlmU3RyaWN0KGNvbmQpIGRv
IHsgaWYgKCghKGNvbmQpKSAmJiBzdHJpY3RNb2RlKCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKLSNk
ZWZpbmUgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAo
KCEoY29uZCkpICYmIHN0cmljdE1vZGUoKSkgZmFpbFdpdGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUg
KDApCi0jZGVmaW5lIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoY29uZCwg
YmVmb3JlLCBuYW1lLCBhZnRlcikgZG8geyBpZiAoKCEoY29uZCkpICYmIHN0cmljdE1vZGUoKSkg
ZmFpbFdpdGhOYW1lQW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIGFmdGVyKTsgfSB3aGlsZSAoMCkK
LSNkZWZpbmUgY29uc3VtZU9yRmFpbCh0b2tlblR5cGUpIGRvIHsgaWYgKCFjb25zdW1lKHRva2Vu
VHlwZSkpIGZhaWxXaXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgY29u
c3VtZU9yRmFpbFdpdGhGbGFncyh0b2tlblR5cGUsIGZsYWdzKSBkbyB7IGlmICghY29uc3VtZSh0
b2tlblR5cGUsIGZsYWdzKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxlICgwKQot
I2RlZmluZSBtYXRjaE9yRmFpbCh0b2tlblR5cGUpIGRvIHsgaWYgKCFtYXRjaCh0b2tlblR5cGUp
KSBmYWlsV2l0aFRva2VuKHRva2VuVHlwZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZhaWxJZlN0
YWNrT3ZlcmZsb3coKSBkbyB7IGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY2FuUmVjdXJzZSgpLCAi
Q29kZSBuZXN0ZWQgdG9vIGRlZXBseS4iKTsgfSB3aGlsZSAoMCkKLQotLy8gTWFjcm9zIHRvIG1h
a2UgdGhlIG1vcmUgY29tbW9uIFRyZWVCdWlsZGVyIHR5cGVzIGEgbGl0dGxlIGxlc3MgdmVyYm9z
ZQotI2RlZmluZSBUcmVlU3RhdGVtZW50IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpTdGF0ZW1lbnQK
LSNkZWZpbmUgVHJlZUV4cHJlc3Npb24gdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkV4cHJlc3Npb24K
LSNkZWZpbmUgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZv
cm1hbFBhcmFtZXRlckxpc3QKLSNkZWZpbmUgVHJlZVNvdXJjZUVsZW1lbnRzIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpTb3VyY2VFbGVtZW50cwotI2RlZmluZSBUcmVlQ2xhdXNlIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpDbGF1c2UKLSNkZWZpbmUgVHJlZUNsYXVzZUxpc3QgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OkNsYXVzZUxpc3QKLSNkZWZpbmUgVHJlZUNvbnN0RGVjbExpc3QgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OkNvbnN0RGVjbExpc3QKLSNkZWZpbmUgVHJlZUFyZ3VtZW50cyB0eXBlbmFtZSBU
cmVlQnVpbGRlcjo6QXJndW1lbnRzCi0jZGVmaW5lIFRyZWVBcmd1bWVudHNMaXN0IHR5cGVuYW1l
IFRyZWVCdWlsZGVyOjpBcmd1bWVudHNMaXN0Ci0jZGVmaW5lIFRyZWVGdW5jdGlvbkJvZHkgdHlw
ZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keQotI2RlZmluZSBUcmVlUHJvcGVydHkgdHlw
ZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5Ci0jZGVmaW5lIFRyZWVQcm9wZXJ0eUxpc3QgdHlw
ZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5TGlzdAotCi1DT01QSUxFX0FTU0VSVChMYXN0VW50
YWdnZWRUb2tlbiA8IDY0LCBMZXNzVGhhbjY0VW50YWdnZWRUb2tlbnMpOwotCi1jbGFzcyBKU1Bh
cnNlciB7Ci1wdWJsaWM6Ci0gICAgSlNQYXJzZXIoTGV4ZXIqLCBKU0dsb2JhbERhdGEqLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBib29sIGlzU3RyaWN0Q29udGV4dCwgYm9vbCBpc0Z1bmN0aW9uLCBj
b25zdCBTb3VyY2VDb2RlKik7Ci0gICAgVVN0cmluZyBwYXJzZVByb2dyYW0oKTsKLXByaXZhdGU6
Ci0gICAgc3RydWN0IEFsbG93SW5PdmVycmlkZSB7Ci0gICAgICAgIEFsbG93SW5PdmVycmlkZShK
U1BhcnNlciogcGFyc2VyKQotICAgICAgICAgICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgICAg
ICAgICAsIG1fb2xkQWxsb3dzSW4ocGFyc2VyLT5tX2FsbG93c0luKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwYXJzZXItPm1fYWxsb3dzSW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIH5B
bGxvd0luT3ZlcnJpZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3BhcnNlci0+bV9hbGxv
d3NJbiA9IG1fb2xkQWxsb3dzSW47Ci0gICAgICAgIH0KLSAgICAgICAgSlNQYXJzZXIqIG1fcGFy
c2VyOwotICAgICAgICBib29sIG1fb2xkQWxsb3dzSW47Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1
Y3QgU2NvcGVMYWJlbEluZm8gewotICAgICAgICBTY29wZUxhYmVsSW5mbyhTdHJpbmdJbXBsKiBp
ZGVudCwgYm9vbCBpc0xvb3ApCi0gICAgICAgIDogbV9pZGVudChpZGVudCkKLSAgICAgICAgLCBt
X2lzTG9vcChpc0xvb3ApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdJbXBs
KiBtX2lkZW50OwotICAgICAgICBib29sIG1faXNMb29wOwotICAgIH07Ci0gICAgCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIG5leHQodW5zaWduZWQgbGV4VHlwZSA9IDApCi0gICAgewotICAgICAg
ICBtX2xhc3RMaW5lID0gbV90b2tlbi5tX2luZm8ubGluZTsKLSAgICAgICAgbV9sYXN0VG9rZW5F
bmQgPSBtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXItPnNldExhc3RM
aW5lTnVtYmVyKG1fbGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXIt
PmxleCgmbV90b2tlbi5tX2RhdGEsICZtX3Rva2VuLm1faW5mbywgbGV4VHlwZSwgc3RyaWN0TW9k
ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIG5leHRFeHBlY3RJZGVu
dGlmaWVyKHVuc2lnbmVkIGxleFR5cGUgPSAwKQotICAgIHsKLSAgICAgICAgbV9sYXN0TGluZSA9
IG1fdG9rZW4ubV9pbmZvLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0gbV90b2tlbi5t
X2luZm8uZW5kT2Zmc2V0OwotICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihtX2xh
c3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBlY3RJZGVu
dGlmaWVyKCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4ubV9pbmZvLCBsZXhUeXBlLCBzdHJpY3RN
b2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmV4dFRva2VuSXND
b2xvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sZXhlci0+bmV4dFRva2VuSXNDb2xvbigp
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjb25zdW1lKEpTVG9rZW5UeXBlIGV4
cGVjdGVkLCB1bnNpZ25lZCBmbGFncyA9IDApCi0gICAgewotICAgICAgICBib29sIHJlc3VsdCA9
IG1fdG9rZW4ubV90eXBlID09IGV4cGVjdGVkOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAg
ICAgICAgbmV4dChmbGFncyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAg
QUxXQVlTX0lOTElORSBVU3RyaW5nIGdldFRva2VuKCkgewotICAgICAgICBTb3VyY2VQcm92aWRl
ciogc291cmNlUHJvdmlkZXIgPSBtX3NvdXJjZS0+cHJvdmlkZXIoKTsKLSAgICAgICAgcmV0dXJu
IFVTdHJpbmcoc291cmNlUHJvdmlkZXItPmdldFJhbmdlKHRva2VuU3RhcnQoKSwgdG9rZW5FbmQo
KSkuaW1wbCgpKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIG1hdGNoKEpT
VG9rZW5UeXBlIGV4cGVjdGVkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV90eXBl
ID09IGV4cGVjdGVkOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2VuU3RhcnQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9pbmZvLnN0YXJ0T2Zmc2V0OwotICAg
IH0KLQotICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2VuTGluZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV90b2tlbi5tX2luZm8ubGluZTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGlu
dCB0b2tlbkVuZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90b2tlbi5tX2luZm8uZW5kT2Zm
c2V0OwotICAgIH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBnZXRUb2tlbk5hbWUoSlNUb2tlblR5
cGUgdG9rKSAKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgICAgIGNhc2UgTlVM
TFRPS0VOOiAKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAgIGNhc2UgVFJVRVRP
S0VOOgotICAgICAgICAgICAgcmV0dXJuICJ0cnVlIjsKLSAgICAgICAgY2FzZSBGQUxTRVRPS0VO
OiAKLSAgICAgICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgICAgICBjYXNlIEJSRUFLOiAKLSAg
ICAgICAgICAgIHJldHVybiAiYnJlYWsiOwotICAgICAgICBjYXNlIENBU0U6IAotICAgICAgICAg
ICAgcmV0dXJuICJjYXNlIjsKLSAgICAgICAgY2FzZSBERUZBVUxUOiAKLSAgICAgICAgICAgIHJl
dHVybiAiZGVmdWFsdCI7Ci0gICAgICAgIGNhc2UgRk9SOiAKLSAgICAgICAgICAgIHJldHVybiAi
Zm9yIjsKLSAgICAgICAgY2FzZSBORVc6IAotICAgICAgICAgICAgcmV0dXJuICJuZXciOwotICAg
ICAgICBjYXNlIFZBUjogCi0gICAgICAgICAgICByZXR1cm4gInZhciI7Ci0gICAgICAgIGNhc2Ug
Q09OU1RUT0tFTjogCi0gICAgICAgICAgICByZXR1cm4gImNvbnN0IjsKLSAgICAgICAgY2FzZSBD
T05USU5VRTogCi0gICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKLSAgICAgICAgY2FzZSBG
VU5DVElPTjogCi0gICAgICAgICAgICByZXR1cm4gImZ1bmN0aW9uIjsKLSAgICAgICAgY2FzZSBJ
RjogCi0gICAgICAgICAgICByZXR1cm4gImlmIjsKLSAgICAgICAgY2FzZSBUSElTVE9LRU46IAot
ICAgICAgICAgICAgcmV0dXJuICJ0aGlzIjsKLSAgICAgICAgY2FzZSBETzogCi0gICAgICAgICAg
ICByZXR1cm4gImRvIjsKLSAgICAgICAgY2FzZSBXSElMRTogCi0gICAgICAgICAgICByZXR1cm4g
IndoaWxlIjsKLSAgICAgICAgY2FzZSBTV0lUQ0g6IAotICAgICAgICAgICAgcmV0dXJuICJzd2l0
Y2giOwotICAgICAgICBjYXNlIFdJVEg6IAotICAgICAgICAgICAgcmV0dXJuICJ3aXRoIjsKLSAg
ICAgICAgY2FzZSBUSFJPVzogCi0gICAgICAgICAgICByZXR1cm4gInRocm93IjsKLSAgICAgICAg
Y2FzZSBUUlk6IAotICAgICAgICAgICAgcmV0dXJuICJ0cnkiOwotICAgICAgICBjYXNlIENBVENI
OiAKLSAgICAgICAgICAgIHJldHVybiAiY2F0Y2giOwotICAgICAgICBjYXNlIEZJTkFMTFk6IAot
ICAgICAgICAgICAgcmV0dXJuICJmaW5hbGx5IjsKLSAgICAgICAgY2FzZSBERUJVR0dFUjogCi0g
ICAgICAgICAgICByZXR1cm4gImRlYnVnZ2VyIjsKLSAgICAgICAgY2FzZSBFTFNFOiAKLSAgICAg
ICAgICAgIHJldHVybiAiZWxzZSI7Ci0gICAgICAgIGNhc2UgT1BFTkJSQUNFOiAKLSAgICAgICAg
ICAgIHJldHVybiAieyI7Ci0gICAgICAgIGNhc2UgQ0xPU0VCUkFDRTogCi0gICAgICAgICAgICBy
ZXR1cm4gIn0iOwotICAgICAgICBjYXNlIE9QRU5QQVJFTjogCi0gICAgICAgICAgICByZXR1cm4g
IigiOwotICAgICAgICBjYXNlIENMT1NFUEFSRU46IAotICAgICAgICAgICAgcmV0dXJuICIpIjsK
LSAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogCi0gICAgICAgICAgICByZXR1cm4gIlsiOwotICAg
ICAgICBjYXNlIENMT1NFQlJBQ0tFVDogCi0gICAgICAgICAgICByZXR1cm4gIl0iOwotICAgICAg
ICBjYXNlIENPTU1BOiAKLSAgICAgICAgICAgIHJldHVybiAiLCI7Ci0gICAgICAgIGNhc2UgUVVF
U1RJT046IAotICAgICAgICAgICAgcmV0dXJuICI/IjsKLSAgICAgICAgY2FzZSBTRU1JQ09MT046
IAotICAgICAgICAgICAgcmV0dXJuICI7IjsKLSAgICAgICAgY2FzZSBDT0xPTjogCi0gICAgICAg
ICAgICByZXR1cm4gIjoiOwotICAgICAgICBjYXNlIERPVDogCi0gICAgICAgICAgICByZXR1cm4g
Ii4iOwotICAgICAgICBjYXNlIEVRVUFMOiAKLSAgICAgICAgICAgIHJldHVybiAiPSI7Ci0gICAg
ICAgIGNhc2UgUExVU0VRVUFMOiAKLSAgICAgICAgICAgIHJldHVybiAiKz0iOwotICAgICAgICBj
YXNlIE1JTlVTRVFVQUw6IAotICAgICAgICAgICAgcmV0dXJuICItPSI7Ci0gICAgICAgIGNhc2Ug
TVVMVEVRVUFMOiAKLSAgICAgICAgICAgIHJldHVybiAiKj0iOwotICAgICAgICBjYXNlIERJVkVR
VUFMOiAKLSAgICAgICAgICAgIHJldHVybiAiLz0iOwotICAgICAgICBjYXNlIExTSElGVEVRVUFM
OiAKLSAgICAgICAgICAgIHJldHVybiAiPDw9IjsKLSAgICAgICAgY2FzZSBSU0hJRlRFUVVBTDog
Ci0gICAgICAgICAgICByZXR1cm4gIj4+PSI7Ci0gICAgICAgIGNhc2UgVVJTSElGVEVRVUFMOiAK
LSAgICAgICAgICAgIHJldHVybiAiPj4+PSI7Ci0gICAgICAgIGNhc2UgQU5ERVFVQUw6IAotICAg
ICAgICAgICAgcmV0dXJuICImPSI7Ci0gICAgICAgIGNhc2UgTU9ERVFVQUw6IAotICAgICAgICAg
ICAgcmV0dXJuICIlPSI7Ci0gICAgICAgIGNhc2UgWE9SRVFVQUw6IAotICAgICAgICAgICAgcmV0
dXJuICJePSI7Ci0gICAgICAgIGNhc2UgT1JFUVVBTDogCi0gICAgICAgICAgICByZXR1cm4gInw9
IjsKLSAgICAgICAgY2FzZSBBVVRPUExVU1BMVVM6IAotICAgICAgICBjYXNlIFBMVVNQTFVTOiAK
LSAgICAgICAgICAgIHJldHVybiAiKysiOwotICAgICAgICBjYXNlIEFVVE9NSU5VU01JTlVTOiAK
LSAgICAgICAgY2FzZSBNSU5VU01JTlVTOiAKLSAgICAgICAgICAgIHJldHVybiAiLS0iOwotICAg
ICAgICBjYXNlIEVYQ0xBTUFUSU9OOiAKLSAgICAgICAgICAgIHJldHVybiAiISI7Ci0gICAgICAg
IGNhc2UgVElMREU6IAotICAgICAgICAgICAgcmV0dXJuICJ+IjsKLSAgICAgICAgY2FzZSBUWVBF
T0Y6IAotICAgICAgICAgICAgcmV0dXJuICJ0eXBlb2YiOwotICAgICAgICBjYXNlIFZPSURUT0tF
TjogCi0gICAgICAgICAgICByZXR1cm4gInZvaWQiOwotICAgICAgICBjYXNlIERFTEVURVRPS0VO
OiAKLSAgICAgICAgICAgIHJldHVybiAiZGVsZXRlIjsKLSAgICAgICAgY2FzZSBPUjogCi0gICAg
ICAgICAgICByZXR1cm4gInx8IjsKLSAgICAgICAgY2FzZSBBTkQ6IAotICAgICAgICAgICAgcmV0
dXJuICImJiI7Ci0gICAgICAgIGNhc2UgQklUT1I6IAotICAgICAgICAgICAgcmV0dXJuICJ8IjsK
LSAgICAgICAgY2FzZSBCSVRYT1I6IAotICAgICAgICAgICAgcmV0dXJuICJeIjsKLSAgICAgICAg
Y2FzZSBCSVRBTkQ6IAotICAgICAgICAgICAgcmV0dXJuICImIjsKLSAgICAgICAgY2FzZSBFUUVR
OiAKLSAgICAgICAgICAgIHJldHVybiAiPT0iOwotICAgICAgICBjYXNlIE5FOiAKLSAgICAgICAg
ICAgIHJldHVybiAiIT0iOwotICAgICAgICBjYXNlIFNUUkVROiAKLSAgICAgICAgICAgIHJldHVy
biAiPT09IjsKLSAgICAgICAgY2FzZSBTVFJORVE6IAotICAgICAgICAgICAgcmV0dXJuICIhPT0i
OwotICAgICAgICBjYXNlIExUOiAKLSAgICAgICAgICAgIHJldHVybiAiPCI7Ci0gICAgICAgIGNh
c2UgR1Q6IAotICAgICAgICAgICAgcmV0dXJuICI+IjsKLSAgICAgICAgY2FzZSBMRTogCi0gICAg
ICAgICAgICByZXR1cm4gIjw9IjsKLSAgICAgICAgY2FzZSBHRTogCi0gICAgICAgICAgICByZXR1
cm4gIj49IjsKLSAgICAgICAgY2FzZSBJTlNUQU5DRU9GOiAKLSAgICAgICAgICAgIHJldHVybiAi
aW5zdGFuY2VvZiI7Ci0gICAgICAgIGNhc2UgSU5UT0tFTjogCi0gICAgICAgICAgICByZXR1cm4g
ImluIjsKLSAgICAgICAgY2FzZSBMU0hJRlQ6IAotICAgICAgICAgICAgcmV0dXJuICI8PCI7Ci0g
ICAgICAgIGNhc2UgUlNISUZUOiAKLSAgICAgICAgICAgIHJldHVybiAiPj4iOwotICAgICAgICBj
YXNlIFVSU0hJRlQ6IAotICAgICAgICAgICAgcmV0dXJuICI+Pj4iOwotICAgICAgICBjYXNlIFBM
VVM6IAotICAgICAgICAgICAgcmV0dXJuICIrIjsKLSAgICAgICAgY2FzZSBNSU5VUzogCi0gICAg
ICAgICAgICByZXR1cm4gIi0iOwotICAgICAgICBjYXNlIFRJTUVTOiAKLSAgICAgICAgICAgIHJl
dHVybiAiKiI7Ci0gICAgICAgIGNhc2UgRElWSURFOiAKLSAgICAgICAgICAgIHJldHVybiAiLyI7
Ci0gICAgICAgIGNhc2UgTU9EOiAKLSAgICAgICAgICAgIHJldHVybiAiJSI7Ci0gICAgICAgIGNh
c2UgUkVUVVJOOiAKLSAgICAgICAgY2FzZSBSRVNFUlZFRF9JRl9TVFJJQ1Q6Ci0gICAgICAgIGNh
c2UgUkVTRVJWRUQ6IAotICAgICAgICBjYXNlIE5VTUJFUjoKLSAgICAgICAgY2FzZSBJREVOVDog
Ci0gICAgICAgIGNhc2UgU1RSSU5HOiAKLSAgICAgICAgY2FzZSBFUlJPUlRPSzoKLSAgICAgICAg
Y2FzZSBFT0ZUT0s6IAotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgTGFzdFVu
dGFnZ2VkVG9rZW46IAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAiaW50ZXJuYWwgZXJyb3IiOwotICAg
IH0KLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlU3BlY2lh
bENhc2UoSlNUb2tlblR5cGUgZXhwZWN0ZWRUb2tlbikgCi0gICAgewotICAgICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOwotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkVG9rZW4pIHsKLSAgICAgICAg
Y2FzZSBSRVNFUlZFRF9JRl9TVFJJQ1Q6Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVXNl
IG9mIHJlc2VydmVkIHdvcmQgJyI7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9r
ZW4oKS5pbXBsKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIicgaW4gc3RyaWN0IG1v
ZGUiOwotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFJFU0VSVkVEOgotICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gIlVzZSBvZiByZXNlcnZlZCB3b3JkICciOwotICAgICAgICAgICAgZXJy
b3JNZXNzYWdlICs9IGdldFRva2VuKCkuaW1wbCgpOwotICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ICs9ICInIjsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmltcGwo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBOVU1CRVI6IAotICAgICAgICAg
ICAgZXJyb3JNZXNzYWdlID0gIlVuZXhwZWN0ZWQgbnVtYmVyICciOwotICAgICAgICAgICAgZXJy
b3JNZXNzYWdlICs9IGdldFRva2VuKCkuaW1wbCgpOwotICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ICs9ICInIjsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmltcGwo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBJREVOVDogCi0gICAgICAgICAg
ICBlcnJvck1lc3NhZ2UgPSAiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBidXQgZm91bmQgJyI7Ci0g
ICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7Ci0gICAgICAgICAg
ICBlcnJvck1lc3NhZ2UgKz0gIicgaW5zdGVhZCI7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IGVycm9yTWVzc2FnZS5pbXBsKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgU1RSSU5HOiAKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJVbmV4cGVjdGVkIHN0cmlu
ZyAiOwotICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGdldFRva2VuKCkuaW1wbCgpOwotICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVSUk9SVE9LOiAKLSAgICAgICAgICAgIGVycm9yTWVz
c2FnZSA9ICJVbnJlY29nbml6ZWQgdG9rZW4gJyI7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2Ug
Kz0gZ2V0VG9rZW4oKS5pbXBsKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIiciOwot
ICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVPRlRPSzogIAotICAgICAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSAiVW5leHBlY3RlZCBFT0YiOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIFJFVFVSTjoKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIlJldHVybiBzdGF0
ZW1lbnRzIGFyZSBvbmx5IHZhbGlkIGluc2lkZSBmdW5jdGlvbnMiOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJpbnRlcm5hbCBlcnJvciI7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIE5FVkVSX0lOTElO
RSB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZSgpIAotICAgIHsKLSAgICAgICAgbV9lcnJvciA9IHRy
dWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnZXRUb2tlbk5hbWUobV90b2tlbi5tX3R5
cGUpOwotICAgICAgICBpZiAoIW5hbWUpIAotICAgICAgICAgICAgdXBkYXRlRXJyb3JNZXNzYWdl
U3BlY2lhbENhc2UobV90b2tlbi5tX3R5cGUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBVU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJVbmV4cGVjdGVkIHRva2Vu
ICclcyciLCBuYW1lKS5pbXBsKCkpOwotICAgIH0KLSAgICAKLSAgICBORVZFUl9JTkxJTkUgdm9p
ZCB1cGRhdGVFcnJvck1lc3NhZ2UoSlNUb2tlblR5cGUgZXhwZWN0ZWRUb2tlbikgCi0gICAgewot
ICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGdldFRv
a2VuTmFtZShleHBlY3RlZFRva2VuKTsKLSAgICAgICAgaWYgKG5hbWUpCi0gICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IFVTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIHRva2VuICcl
cyciLCBuYW1lKS5pbXBsKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghZ2V0
VG9rZW5OYW1lKG1fdG9rZW4ubV90eXBlKSkKLSAgICAgICAgICAgICAgICB1cGRhdGVFcnJvck1l
c3NhZ2VTcGVjaWFsQ2FzZShtX3Rva2VuLm1fdHlwZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdXBkYXRlRXJyb3JNZXNzYWdlU3BlY2lhbENhc2UoZXhwZWN0ZWRUb2tlbik7
Ci0gICAgICAgIH0gCi0gICAgfQotICAgIAotICAgIE5FVkVSX0lOTElORSB2b2lkIHVwZGF0ZUVy
cm9yV2l0aE5hbWVBbmRNZXNzYWdlKGNvbnN0IGNoYXIqIGJlZm9yZU1zZywgVVN0cmluZyBuYW1l
LCBjb25zdCBjaGFyKiBhZnRlck1zZykgCi0gICAgewotICAgICAgICBtX2Vycm9yID0gdHJ1ZTsK
LSAgICAgICAgU3RyaW5nIHByZWZpeChiZWZvcmVNc2cpOwotICAgICAgICBTdHJpbmcgcG9zdGZp
eChhZnRlck1zZyk7Ci0gICAgICAgIHByZWZpeCArPSAiICciOwotICAgICAgICBwcmVmaXggKz0g
bmFtZS5pbXBsKCk7Ci0gICAgICAgIHByZWZpeCArPSAiJyAiOwotICAgICAgICBwcmVmaXggKz0g
cG9zdGZpeDsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwcmVmaXguaW1wbCgpOwotICAgIH0K
LSAgICAKLSAgICBORVZFUl9JTkxJTkUgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogbXNnKSAKLSAgICB7ICAgCi0gICAgICAgIG1fZXJyb3IgPSB0cnVlOwotICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IFVTdHJpbmcobXNnKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdGFydExv
b3AoKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydExvb3AoKTsgfQotICAgIHZvaWQgZW5kTG9vcCgp
IHsgY3VycmVudFNjb3BlKCktPmVuZExvb3AoKTsgfQotICAgIHZvaWQgc3RhcnRTd2l0Y2goKSB7
IGN1cnJlbnRTY29wZSgpLT5zdGFydFN3aXRjaCgpOyB9Ci0gICAgdm9pZCBlbmRTd2l0Y2goKSB7
IGN1cnJlbnRTY29wZSgpLT5lbmRTd2l0Y2goKTsgfQotICAgIHZvaWQgc2V0U3RyaWN0TW9kZSgp
IHsgY3VycmVudFNjb3BlKCktPnNldFN0cmljdE1vZGUoKTsgfQotICAgIGJvb2wgc3RyaWN0TW9k
ZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5zdHJpY3RNb2RlKCk7IH0KLSAgICBib29sIGlz
VmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmlzVmFsaWRTdHJpY3RN
b2RlKCk7IH0KLSAgICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciogaWRl
bnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlUGFyYW1ldGVyKGlkZW50KTsgfQot
ICAgIGJvb2wgYnJlYWtJc1ZhbGlkKCkKLSAgICB7Ci0gICAgICAgIFNjb3BlUmVmIGN1cnJlbnQg
PSBjdXJyZW50U2NvcGUoKTsKLSAgICAgICAgd2hpbGUgKCFjdXJyZW50LT5icmVha0lzVmFsaWQo
KSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50Lmhhc0NvbnRhaW5pbmdTY29wZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LmNvbnRhaW5pbmdTY29wZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICBib29sIGNvbnRpbnVlSXNWYWxpZCgpCi0gICAgewotICAgICAgICBTY29wZVJlZiBj
dXJyZW50ID0gY3VycmVudFNjb3BlKCk7Ci0gICAgICAgIHdoaWxlICghY3VycmVudC0+Y29udGlu
dWVJc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudC5oYXNDb250YWluaW5nU2Nv
cGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC5jb250YWluaW5nU2NvcGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgdm9pZCBwdXNoTGFiZWwoY29uc3QgSWRlbnRpZmllciogbGFiZWws
IGJvb2wgaXNMb29wKSB7IGN1cnJlbnRTY29wZSgpLT5wdXNoTGFiZWwobGFiZWwsIGlzTG9vcCk7
IH0KLSAgICB2b2lkIHBvcExhYmVsKCkgeyBjdXJyZW50U2NvcGUoKS0+cG9wTGFiZWwoKTsgfQot
ICAgIFNjb3BlTGFiZWxJbmZvKiBnZXRMYWJlbChjb25zdCBJZGVudGlmaWVyKiBsYWJlbCkKLSAg
ICB7Ci0gICAgICAgIFNjb3BlUmVmIGN1cnJlbnQgPSBjdXJyZW50U2NvcGUoKTsKLSAgICAgICAg
U2NvcGVMYWJlbEluZm8qIHJlc3VsdCA9IDA7Ci0gICAgICAgIHdoaWxlICghKHJlc3VsdCA9IGN1
cnJlbnQtPmdldExhYmVsKGxhYmVsKSkpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudC5oYXND
b250YWluaW5nU2NvcGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50LmNvbnRhaW5pbmdTY29wZSgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZW51bSBTb3VyY2VFbGVtZW50c01vZGUgeyBD
aGVja0ZvclN0cmljdE1vZGUsIERvbnRDaGVja0ZvclN0cmljdE1vZGUgfTsKLSAgICB0ZW1wbGF0
ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNl
RWxlbWVudHMgcGFyc2VTb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChUcmVlQnVp
bGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUpOwotICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJl
ZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgcGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUNvbnN0RGVjbGFyYXRpb24oVHJlZUJ1
aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
cGFyc2VEb1doaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlV2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFy
c2VGb3JTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VCcmVha1N0YXRlbWVudChUcmVlQnVpbGRlciYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUNvbnRp
bnVlU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlUmV0dXJuU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlVGhyb3dT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgcGFyc2VXaXRoU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlU3dpdGNoU3RhdGVt
ZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
Q2xhdXNlTGlzdCBwYXJzZVN3aXRjaENsYXVzZXMoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2UgcGFyc2VTd2l0Y2hEZWZhdWx0Q2xhdXNl
KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoVHJl
ZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlRXhwcmVzc2lvbk9yTGFiZWxT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgcGFyc2VJZlN0YXRlbWVudChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlU3RhdGVtZW50IHBhcnNl
QmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOwotICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVz
c2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxk
ZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJl
ZUV4cHJlc3Npb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlTWVtYmVyRXhwcmVz
c2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKFRyZWVCdWls
ZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRy
ZWVFeHByZXNzaW9uIHBhcnNlQXJyYXlMaXRlcmFsKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNl
T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVN0cmljdE9iamVjdExpdGVy
YWwoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZ
U19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhUcmVlQnVpbGRlciYpOwotICAg
IHRlbXBsYXRlIDxib29sIHN0cmljdCwgY2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUg
VHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1
bmN0aW9uQm9keShUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFM
V0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1
aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRpZmllciomIGxhc3RJZGVudCwg
VHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBpZGVudFN0YXJ0LCBpbnQmIGlu
aXRTdGFydCwgaW50JiBpbml0RW5kKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IEFMV0FZU19JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25zdERlY2xhcmF0aW9uTGlz
dChUcmVlQnVpbGRlciYgY29udGV4dCk7Ci0gICAgZW51bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7
IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1lIH07Ci0gICAgdGVtcGxh
dGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBj
bGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIGNv
bnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QmLCBUcmVlRnVuY3Rpb25C
b2R5JiwgaW50JiBvcGVuQnJhY2UsIGludCYgY2xvc2VCcmFjZSwgaW50JiBib2R5U3RhcnRMaW5l
KTsKLSAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlIHRv
a2VuKTsKLSAgICBib29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7Ci0KLSAgICBib29sIGF1
dG9TZW1pQ29sb24oKQotICAgIHsKLSAgICAgICAgaWYgKG1fdG9rZW4ubV90eXBlID09IFNFTUlD
T0xPTikgewotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7Ci0gICAg
fQotCi0gICAgYm9vbCBjYW5SZWN1cnNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YWNr
LnJlY3Vyc2lvbkNoZWNrKCk7Ci0gICAgfQotICAgIAotICAgIGludCBsYXN0VG9rZW5FbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdFRva2VuRW5kOwotICAgIH0KLQotICAg
IFBhcnNlckFyZW5hIG1fYXJlbmE7Ci0gICAgTGV4ZXIqIG1fbGV4ZXI7Ci0gICAgU3RhY2tCb3Vu
ZHMgbV9zdGFjazsKLSAgICBib29sIG1fZXJyb3I7Ci0gICAgVVN0cmluZyBtX2Vycm9yTWVzc2Fn
ZTsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICBKU1Rva2VuIG1fdG9rZW47
Ci0gICAgYm9vbCBtX2FsbG93c0luOwotICAgIGludCBtX2xhc3RMaW5lOwotICAgIGludCBtX2xh
c3RUb2tlbkVuZDsKLSAgICBpbnQgbV9hc3NpZ25tZW50Q291bnQ7Ci0gICAgaW50IG1fbm9uTEhT
Q291bnQ7Ci0gICAgYm9vbCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQ7Ci0gICAgaW50IG1fc3Rh
dGVtZW50RGVwdGg7Ci0gICAgaW50IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBtX2xhc3RJZGVudGlmaWVyOwotCi0gICAgc3RydWN0IERlcHRoTWFu
YWdlciB7Ci0gICAgICAgIERlcHRoTWFuYWdlcihpbnQqIGRlcHRoKQotICAgICAgICAgICAgOiBt
X29yaWdpbmFsRGVwdGgoKmRlcHRoKQotICAgICAgICAgICAgLCBtX2RlcHRoKGRlcHRoKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5EZXB0aE1hbmFnZXIoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAqbV9kZXB0aCA9IG1fb3JpZ2luYWxEZXB0aDsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9vcmlnaW5hbERlcHRoOwot
ICAgICAgICBpbnQqIG1fZGVwdGg7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgU2NvcGUgewot
ICAgICAgICBTY29wZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNGdW5jdGlvbiwg
Ym9vbCBzdHJpY3RNb2RlKQotICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
LSAgICAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQotICAgICAgICAgICAgLCBt
X3VzZXNFdmFsKGZhbHNlKQotICAgICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24oZmFs
c2UpCi0gICAgICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHModHJ1ZSkKLSAgICAgICAgICAgICwg
bV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCi0gICAgICAgICAgICAsIG1faXNGdW5jdGlvbihpc0Z1
bmN0aW9uKQotICAgICAgICAgICAgLCBtX2lzRnVuY3Rpb25Cb3VuZGFyeShmYWxzZSkKLSAgICAg
ICAgICAgICwgbV9pc1ZhbGlkU3RyaWN0TW9kZSh0cnVlKQotICAgICAgICAgICAgLCBtX2xvb3BE
ZXB0aCgwKQotICAgICAgICAgICAgLCBtX3N3aXRjaERlcHRoKDApCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFNjb3BlKGNvbnN0IFNjb3BlJiByaHMpCi0gICAgICAgICAgICA6IG1f
Z2xvYmFsRGF0YShyaHMubV9nbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBtX3NoYWRvd3NBcmd1
bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKLSAgICAgICAgICAgICwgbV91c2VzRXZhbChy
aHMubV91c2VzRXZhbCkKLSAgICAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKHJocy5t
X25lZWRzRnVsbEFjdGl2YXRpb24pCi0gICAgICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHMocmhz
Lm1fYWxsb3dzTmV3RGVjbHMpCi0gICAgICAgICAgICAsIG1fc3RyaWN0TW9kZShyaHMubV9zdHJp
Y3RNb2RlKQotICAgICAgICAgICAgLCBtX2lzRnVuY3Rpb24ocmhzLm1faXNGdW5jdGlvbikKLSAg
ICAgICAgICAgICwgbV9pc0Z1bmN0aW9uQm91bmRhcnkocmhzLm1faXNGdW5jdGlvbkJvdW5kYXJ5
KQotICAgICAgICAgICAgLCBtX2lzVmFsaWRTdHJpY3RNb2RlKHJocy5tX2lzVmFsaWRTdHJpY3RN
b2RlKQotICAgICAgICAgICAgLCBtX2xvb3BEZXB0aChyaHMubV9sb29wRGVwdGgpCi0gICAgICAg
ICAgICAsIG1fc3dpdGNoRGVwdGgocmhzLm1fc3dpdGNoRGVwdGgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChyaHMubV9sYWJlbHMpIHsKLSAgICAgICAgICAgICAgICBtX2xhYmVscyA9IGFk
b3B0UHRyKG5ldyBMYWJlbFN0YWNrKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICB0eXBlZGVmIExhYmVsU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yIGVuZCA9IHJocy5tX2xhYmVscy0+ZW5kKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IHJocy5tX2xhYmVscy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNjb3BlTGFiZWxJbmZv
KGl0LT5tX2lkZW50LCBpdC0+bV9pc0xvb3ApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgc3RhcnRTd2l0Y2goKSB7IG1fc3dpdGNoRGVwdGgrKzsgfQotICAgICAg
ICB2b2lkIGVuZFN3aXRjaCgpIHsgbV9zd2l0Y2hEZXB0aC0tOyB9Ci0gICAgICAgIHZvaWQgc3Rh
cnRMb29wKCkgeyBtX2xvb3BEZXB0aCsrOyB9Ci0gICAgICAgIHZvaWQgZW5kTG9vcCgpIHsgQVNT
RVJUKG1fbG9vcERlcHRoKTsgbV9sb29wRGVwdGgtLTsgfQotICAgICAgICBib29sIGluTG9vcCgp
IHsgcmV0dXJuICEhbV9sb29wRGVwdGg7IH0KLSAgICAgICAgYm9vbCBicmVha0lzVmFsaWQoKSB7
IHJldHVybiBtX2xvb3BEZXB0aCB8fCBtX3N3aXRjaERlcHRoOyB9Ci0gICAgICAgIGJvb2wgY29u
dGludWVJc1ZhbGlkKCkgeyByZXR1cm4gbV9sb29wRGVwdGg7IH0KLQotICAgICAgICB2b2lkIHB1
c2hMYWJlbChjb25zdCBJZGVudGlmaWVyKiBsYWJlbCwgYm9vbCBpc0xvb3ApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghbV9sYWJlbHMpCi0gICAgICAgICAgICAgICAgbV9sYWJlbHMgPSBh
ZG9wdFB0cihuZXcgTGFiZWxTdGFjayk7Ci0gICAgICAgICAgICBtX2xhYmVscy0+YXBwZW5kKFNj
b3BlTGFiZWxJbmZvKGxhYmVsLT5pbXBsKCksIGlzTG9vcCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBwb3BMYWJlbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xhYmVs
cyk7Ci0gICAgICAgICAgICBBU1NFUlQobV9sYWJlbHMtPnNpemUoKSk7Ci0gICAgICAgICAgICBt
X2xhYmVscy0+cmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2NvcGVMYWJlbElu
Zm8qIGdldExhYmVsKGNvbnN0IElkZW50aWZpZXIqIGxhYmVsKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIW1fbGFiZWxzKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IG1fbGFiZWxzLT5zaXplKCk7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9sYWJlbHMtPmF0KGkgLSAxKS5tX2lkZW50ID09IGxhYmVsLT5pbXBsKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAmbV9sYWJlbHMtPmF0KGkgLSAxKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRJc0Z1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9pc0Z1bmN0aW9uID0g
dHJ1ZTsKLSAgICAgICAgICAgIG1faXNGdW5jdGlvbkJvdW5kYXJ5ID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBib29sIGlzRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzRnVuY3Rpb247IH0KLSAg
ICAgICAgYm9vbCBpc0Z1bmN0aW9uQm91bmRhcnkoKSB7IHJldHVybiBtX2lzRnVuY3Rpb25Cb3Vu
ZGFyeTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBkZWNsYXJlVmFyaWFibGUoY29uc3QgSWRl
bnRpZmllciogaWRlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaXNWYWxpZFN0cmlj
dE1vZGUgPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmIG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzICE9ICppZGVudDsKLSAgICAgICAg
ICAgIG1faXNWYWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRT
dHJpY3RNb2RlOwotICAgICAgICAgICAgbV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnVz
dHJpbmcoKS5pbXBsKCkpOwotICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRTdHJpY3RNb2RlOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGRlY2xhcmVXcml0ZShjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fc3RyaWN0TW9k
ZSk7Ci0gICAgICAgICAgICBtX3dyaXR0ZW5WYXJpYWJsZXMuYWRkKGlkZW50LT5pbXBsKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcmV2ZW50TmV3RGVjbHMoKSB7IG1fYWxsb3dzTmV3
RGVjbHMgPSBmYWxzZTsgfQotICAgICAgICBib29sIGFsbG93c05ld0RlY2xzKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NOZXdEZWNsczsgfQotCi0gICAgICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRl
cihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBp
c0FyZ3VtZW50cyA9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
ZGVudDsKLSAgICAgICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX2RlY2xhcmVkVmFy
aWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSkuc2Vjb25kICYmIG1fZ2xvYmFsRGF0
YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJndW1lbnRzOwotICAgICAg
ICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUgJiYgaXNWYWxp
ZFN0cmljdE1vZGU7Ci0gICAgICAgICAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAgICAgICAgICAg
ICAgbV9zaGFkb3dzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBpc1ZhbGlk
U3RyaWN0TW9kZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCB1c2VWYXJpYWJs
ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgYm9vbCBpc0V2YWwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fdXNlc0V2YWwgfD0gaXNFdmFsOwotICAgICAgICAgICAgbV91c2VkVmFyaWFibGVz
LmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgc2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpIHsgbV9uZWVkc0Z1bGxBY3RpdmF0aW9u
ID0gdHJ1ZTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBjb2xsZWN0RnJlZVZhcmlhYmxlcyhT
Y29wZSogbmVzdGVkU2NvcGUsIGJvb2wgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV91c2VzRXZhbCkKLSAgICAgICAg
ICAgICAgICBtX3VzZXNFdmFsID0gdHJ1ZTsKLSAgICAgICAgICAgIElkZW50aWZpZXJTZXQ6Oml0
ZXJhdG9yIGVuZCA9IG5lc3RlZFNjb3BlLT5tX3VzZWRWYXJpYWJsZXMuZW5kKCk7Ci0gICAgICAg
ICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9IG5lc3RlZFNjb3BlLT5tX3Vz
ZWRWYXJpYWJsZXMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobmVzdGVkU2NvcGUtPm1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKnB0cikpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1fdXNlZFZhcmlh
Ymxlcy5hZGQoKnB0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrQ2xvc2VkVmFy
aWFibGVzKQotICAgICAgICAgICAgICAgICAgICBtX2Nsb3NlZFZhcmlhYmxlcy5hZGQoKnB0cik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmVzdGVkU2NvcGUtPm1fd3JpdHRlblZh
cmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRv
ciBlbmQgPSBuZXN0ZWRTY29wZS0+bV93cml0dGVuVmFyaWFibGVzLmVuZCgpOwotICAgICAgICAg
ICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3IgcHRyID0gbmVzdGVkU2NvcGUtPm1f
d3JpdHRlblZhcmlhYmxlcy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobmVzdGVkU2NvcGUtPm1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMo
KnB0cikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZCgqcHRyKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBnZXRVbmNhcHR1cmVkV3JpdHRlblZhcmlhYmxlcyhJZGVudGlmaWVyU2V0JiB3
cml0dGVuVmFyaWFibGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyU2V0Ojpp
dGVyYXRvciBlbmQgPSBtX3dyaXR0ZW5WYXJpYWJsZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9IG1fd3JpdHRlblZhcmlhYmxlcy5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmICghbV9kZWNsYXJlZFZh
cmlhYmxlcy5jb250YWlucygqcHRyKSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdHRlblZhcmlh
Ymxlcy5hZGQoKnB0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGdldENhcHR1cmVkVmFyaWFibGVzKElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9uZWVkc0Z1bGxBY3RpdmF0aW9uIHx8IG1fdXNl
c0V2YWwpIHsKLSAgICAgICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlcy5zd2FwKG1fZGVjbGFy
ZWRWYXJpYWJsZXMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3IgcHRyID0gbV9jbG9zZWRWYXJp
YWJsZXMuYmVnaW4oKTsgcHRyICE9IG1fY2xvc2VkVmFyaWFibGVzLmVuZCgpOyArK3B0cikgewot
ICAgICAgICAgICAgICAgIGlmICghbV9kZWNsYXJlZFZhcmlhYmxlcy5jb250YWlucygqcHRyKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FwdHVyZWRW
YXJpYWJsZXMuYWRkKCpwdHIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgc2V0U3RyaWN0TW9kZSgpIHsgbV9zdHJpY3RNb2RlID0gdHJ1ZTsgfQotICAgICAgICBib29s
IHN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdE1vZGU7IH0KLSAgICAgICAgYm9v
bCBpc1ZhbGlkU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7
IH0KLSAgICAgICAgYm9vbCBzaGFkb3dzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFk
b3dzQXJndW1lbnRzOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNvcHlDYXB0dXJlZFZhcmlh
Ymxlc1RvVmVjdG9yKGNvbnN0IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBWZWN0
b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4mIHZlY3RvcikKLSAgICAgICAgewotICAgICAgICAgICAg
SWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0gY2FwdHVyZWRWYXJpYWJsZXMuZW5kKCk7Ci0g
ICAgICAgICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gY2FwdHVyZWRWYXJp
YWJsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgdmVjdG9yLmFwcGVuZCgqaXQpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmVjdG9yLnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIHNhdmVGdW5jdGlvbkluZm8oU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGluZm8pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOwotICAgICAgICAgICAg
aW5mby0+dXNlc0V2YWwgPSBtX3VzZXNFdmFsOwotICAgICAgICAgICAgaW5mby0+c3RyaWN0TW9k
ZSA9IG1fc3RyaWN0TW9kZTsKLSAgICAgICAgICAgIGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb24g
PSBtX25lZWRzRnVsbEFjdGl2YXRpb247Ci0gICAgICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJs
ZXNUb1ZlY3RvcihtX3dyaXR0ZW5WYXJpYWJsZXMsIGluZm8tPndyaXR0ZW5WYXJpYWJsZXMpOwot
ICAgICAgICAgICAgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IobV91c2VkVmFyaWFibGVz
LCBpbmZvLT51c2VkVmFyaWFibGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVzdG9y
ZUZ1bmN0aW9uSW5mbyhjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogaW5mbykKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKG1faXNGdW5jdGlvbik7Ci0gICAgICAgICAgICBtX3Vz
ZXNFdmFsID0gaW5mby0+dXNlc0V2YWw7Ci0gICAgICAgICAgICBtX3N0cmljdE1vZGUgPSBpbmZv
LT5zdHJpY3RNb2RlOwotICAgICAgICAgICAgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gaW5mby0+
bmVlZHNGdWxsQWN0aXZhdGlvbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBpbmZvLT51
c2VkVmFyaWFibGVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFkZChpbmZvLT51
c2VkVmFyaWFibGVzW2ldKTsKLSAgICAgICAgICAgIHNpemUgPSBpbmZvLT53cml0dGVuVmFyaWFi
bGVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZChpbmZvLT53cml0dGVu
VmFyaWFibGVzW2ldKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDog
MTsKLSAgICAgICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKLSAgICAgICAgYm9vbCBtX25lZWRzRnVs
bEFjdGl2YXRpb24gOiAxOwotICAgICAgICBib29sIG1fYWxsb3dzTmV3RGVjbHMgOiAxOwotICAg
ICAgICBib29sIG1fc3RyaWN0TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgbV9pc0Z1bmN0aW9uIDog
MTsKLSAgICAgICAgYm9vbCBtX2lzRnVuY3Rpb25Cb3VuZGFyeSA6IDE7Ci0gICAgICAgIGJvb2wg
bV9pc1ZhbGlkU3RyaWN0TW9kZSA6IDE7Ci0gICAgICAgIGludCBtX2xvb3BEZXB0aDsKLSAgICAg
ICAgaW50IG1fc3dpdGNoRGVwdGg7Ci0KLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8U2NvcGVMYWJl
bEluZm8sIDI+IExhYmVsU3RhY2s7Ci0gICAgICAgIE93blB0cjxMYWJlbFN0YWNrPiBtX2xhYmVs
czsKLSAgICAgICAgSWRlbnRpZmllclNldCBtX2RlY2xhcmVkVmFyaWFibGVzOwotICAgICAgICBJ
ZGVudGlmaWVyU2V0IG1fdXNlZFZhcmlhYmxlczsKLSAgICAgICAgSWRlbnRpZmllclNldCBtX2Ns
b3NlZFZhcmlhYmxlczsKLSAgICAgICAgSWRlbnRpZmllclNldCBtX3dyaXR0ZW5WYXJpYWJsZXM7
Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFNjb3BlLCAxMD4gU2NvcGVTdGFjazsKLQot
ICAgIHN0cnVjdCBTY29wZVJlZiB7Ci0gICAgICAgIFNjb3BlUmVmKFNjb3BlU3RhY2sqIHNjb3Bl
U3RhY2ssIHVuc2lnbmVkIGluZGV4KQotICAgICAgICAgICAgOiBtX3Njb3BlU3RhY2soc2NvcGVT
dGFjaykKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAgewotICAgICAgICB9
Ci0gICAgICAgIFNjb3BlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJm1fc2NvcGVTdGFjay0+YXQo
bV9pbmRleCk7IH0KLSAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9Ci0KLSAgICAgICAgYm9vbCBoYXNDb250YWluaW5nU2NvcGUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCAmJiAhbV9zY29wZVN0YWNrLT5hdChtX2luZGV4KS5p
c0Z1bmN0aW9uQm91bmRhcnkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjb3BlUmVmIGNvbnRh
aW5pbmdTY29wZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNDb250YWluaW5n
U2NvcGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gU2NvcGVSZWYobV9zY29wZVN0YWNrLCBtX2lu
ZGV4IC0gMSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNjb3BlU3RhY2sq
IG1fc2NvcGVTdGFjazsKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICB9OwotCi0gICAg
c3RydWN0IEF1dG9Qb3BTY29wZVJlZiA6IHB1YmxpYyBTY29wZVJlZiB7Ci0gICAgICAgIEF1dG9Q
b3BTY29wZVJlZihKU1BhcnNlciogcGFyc2VyLCBTY29wZVJlZiBzY29wZSkKLSAgICAgICAgICAg
IDogU2NvcGVSZWYoc2NvcGUpCi0gICAgICAgICAgICAsIG1fcGFyc2VyKHBhcnNlcikKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkF1dG9Qb3BTY29wZVJlZigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtX3BhcnNlcikKLSAgICAgICAgICAgICAgICBtX3BhcnNlci0+cG9w
U2NvcGUoKnRoaXMsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0UG9wcGVk
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9wYXJzZXIgPSAwOwotICAgICAgICB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBKU1BhcnNlciogbV9wYXJzZXI7Ci0gICAgfTsKLQotICAgIFNj
b3BlUmVmIGN1cnJlbnRTY29wZSgpCi0gICAgewotICAgICAgICByZXR1cm4gU2NvcGVSZWYoJm1f
c2NvcGVTdGFjaywgbV9zY29wZVN0YWNrLnNpemUoKSAtIDEpOwotICAgIH0KLSAgICAKLSAgICBT
Y29wZVJlZiBwdXNoU2NvcGUoKQotICAgIHsKLSAgICAgICAgYm9vbCBpc0Z1bmN0aW9uID0gZmFs
c2U7Ci0gICAgICAgIGJvb2wgaXNTdHJpY3QgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3Njb3Bl
U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpc1N0cmljdCA9IG1fc2NvcGVTdGFjay5s
YXN0KCkuc3RyaWN0TW9kZSgpOwotICAgICAgICAgICAgaXNGdW5jdGlvbiA9IG1fc2NvcGVTdGFj
ay5sYXN0KCkuaXNGdW5jdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG1fc2NvcGVTdGFjay5h
cHBlbmQoU2NvcGUobV9nbG9iYWxEYXRhLCBpc0Z1bmN0aW9uLCBpc1N0cmljdCkpOwotICAgICAg
ICByZXR1cm4gY3VycmVudFNjb3BlKCk7Ci0gICAgfQotCi0gICAgYm9vbCBwb3BTY29wZUludGVy
bmFsKFNjb3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmluZGV4KCkgPT0gbV9zY29w
ZVN0YWNrLnNpemUoKSAtIDEpOwotICAgICAgICBBU1NFUlQobV9zY29wZVN0YWNrLnNpemUoKSA+
IDEpOwotICAgICAgICBib29sIHJlc3VsdCA9IG1fc2NvcGVTdGFja1ttX3Njb3BlU3RhY2suc2l6
ZSgpIC0gMl0uY29sbGVjdEZyZWVWYXJpYWJsZXMoJm1fc2NvcGVTdGFjay5sYXN0KCksIHNob3Vs
ZFRyYWNrQ2xvc2VkVmFyaWFibGVzKTsKLSAgICAgICAgbV9zY29wZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIHBvcFNjb3BlKFNj
b3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBwb3BTY29wZUludGVybmFsKHNjb3BlLCBzaG91bGRUcmFja0Nsb3NlZFZh
cmlhYmxlcyk7Ci0gICAgfQotCi0gICAgYm9vbCBwb3BTY29wZShBdXRvUG9wU2NvcGVSZWYmIHNj
b3BlLCBib29sIHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgc2Nv
cGUuc2V0UG9wcGVkKCk7Ci0gICAgICAgIHJldHVybiBwb3BTY29wZUludGVybmFsKHNjb3BlLCBz
aG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcyk7Ci0gICAgfQotCi0gICAgYm9vbCBkZWNsYXJlVmFy
aWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBp
ID0gbV9zY29wZVN0YWNrLnNpemUoKSAtIDE7Ci0gICAgICAgIEFTU0VSVChpIDwgbV9zY29wZVN0
YWNrLnNpemUoKSk7Ci0gICAgICAgIHdoaWxlICghbV9zY29wZVN0YWNrW2ldLmFsbG93c05ld0Rl
Y2xzKCkpIHsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9zY29w
ZVN0YWNrLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fc2NvcGVTdGFja1tp
XS5kZWNsYXJlVmFyaWFibGUoaWRlbnQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRlY2xhcmVX
cml0ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zeW50
YXhBbHJlYWR5VmFsaWRhdGVkKQotICAgICAgICAgICAgbV9zY29wZVN0YWNrLmxhc3QoKS5kZWNs
YXJlV3JpdGUoaWRlbnQpOwotICAgIH0KLQotICAgIFNjb3BlU3RhY2sgbV9zY29wZVN0YWNrOwot
Ci0gICAgY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGZpbmRDYWNoZWRGdW5jdGlvbklu
Zm8oaW50IG9wZW5CcmFjZVBvcykgCi0gICAgewotICAgICAgICByZXR1cm4gbV9mdW5jdGlvbkNh
Y2hlID8gbV9mdW5jdGlvbkNhY2hlLT5nZXQob3BlbkJyYWNlUG9zKSA6IDA7Ci0gICAgfQotCi0g
ICAgU291cmNlUHJvdmlkZXJDYWNoZSogbV9mdW5jdGlvbkNhY2hlOwotICAgIGNvbnN0IFNvdXJj
ZUNvZGUqIG1fc291cmNlOwotfTsKLQotVVN0cmluZyBqc1BhcnNlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBKU1BhcnNlclN0cmljdG5l
c3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIGNvbnN0IFNvdXJjZUNvZGUq
IHNvdXJjZSkKLXsKLSAgICBKU1BhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YS0+bGV4ZXIsIGdsb2Jh
bERhdGEsIHBhcmFtZXRlcnMsIHN0cmljdG5lc3MgPT0gSlNQYXJzZVN0cmljdCwgcGFyc2VyTW9k
ZSA9PSBKU1BhcnNlRnVuY3Rpb25Db2RlLCBzb3VyY2UpOwotICAgIHJldHVybiBwYXJzZXIucGFy
c2VQcm9ncmFtKCk7Ci19Ci0KLUpTUGFyc2VyOjpKU1BhcnNlcihMZXhlciogbGV4ZXIsIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29s
IGluU3RyaWN0Q29udGV4dCwgYm9vbCBpc0Z1bmN0aW9uLCBjb25zdCBTb3VyY2VDb2RlKiBzb3Vy
Y2UpCi0gICAgOiBtX2xleGVyKGxleGVyKQotICAgICwgbV9zdGFjayhnbG9iYWxEYXRhLT5zdGFj
aygpKQotICAgICwgbV9lcnJvcihmYWxzZSkKLSAgICAsIG1fZXJyb3JNZXNzYWdlKCJQYXJzZSBl
cnJvciIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fYWxsb3dzSW4o
dHJ1ZSkKLSAgICAsIG1fbGFzdExpbmUoMCkKLSAgICAsIG1fbGFzdFRva2VuRW5kKDApCi0gICAg
LCBtX2Fzc2lnbm1lbnRDb3VudCgwKQotICAgICwgbV9ub25MSFNDb3VudCgwKQotICAgICwgbV9z
eW50YXhBbHJlYWR5VmFsaWRhdGVkKHNvdXJjZS0+cHJvdmlkZXIoKS0+aXNWYWxpZCgpKQotICAg
ICwgbV9zdGF0ZW1lbnREZXB0aCgwKQotICAgICwgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
KDApCi0gICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCi0gICAgLCBtX2Z1bmN0aW9uQ2FjaGUobV9s
ZXhlci0+c291cmNlUHJvdmlkZXIoKS0+Y2FjaGUoKSkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkK
LXsKLSAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwotICAgIGlmIChpc0Z1bmN0aW9u
KQotICAgICAgICBzY29wZS0+c2V0SXNGdW5jdGlvbigpOwotICAgIGlmIChpblN0cmljdENvbnRl
eHQpCi0gICAgICAgIHNjb3BlLT5zZXRTdHJpY3RNb2RlKCk7Ci0gICAgaWYgKHBhcmFtZXRlcnMp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMtPnNpemUoKTsg
aSsrKQotICAgICAgICAgICAgc2NvcGUtPmRlY2xhcmVQYXJhbWV0ZXIoJnBhcmFtZXRlcnMtPmF0
KGkpKTsKLSAgICB9Ci0gICAgbmV4dCgpOwotICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVy
KHRva2VuTGluZSgpKTsKLX0KLQotVVN0cmluZyBKU1BhcnNlcjo6cGFyc2VQcm9ncmFtKCkKLXsK
LSAgICB1bnNpZ25lZCBvbGRGdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1f
ZnVuY3Rpb25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7Ci0gICAgQVNUQnVpbGRlciBjb250ZXh0KG1f
Z2xvYmFsRGF0YSwgbV9sZXhlcik7Ci0gICAgaWYgKG1fbGV4ZXItPmlzUmVwYXJzaW5nKCkpCi0g
ICAgICAgIG1fc3RhdGVtZW50RGVwdGgtLTsKLSAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRT
Y29wZSgpOwotICAgIFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291cmNl
RWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKLSAgICBpZiAoIXNvdXJjZUVs
ZW1lbnRzIHx8ICFjb25zdW1lKEVPRlRPSykpCi0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2Fn
ZTsKLSAgICBJZGVudGlmaWVyU2V0IGNhcHR1cmVkVmFyaWFibGVzOwotICAgIHNjb3BlLT5nZXRD
YXB0dXJlZFZhcmlhYmxlcyhjYXB0dXJlZFZhcmlhYmxlcyk7Ci0gICAgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzID0gY29udGV4dC5mZWF0dXJlcygpOwotICAgIGlmIChzY29wZS0+c3RyaWN0TW9kZSgp
KQotICAgICAgICBmZWF0dXJlcyB8PSBTdHJpY3RNb2RlRmVhdHVyZTsKLSAgICBpZiAoc2NvcGUt
PnNoYWRvd3NBcmd1bWVudHMoKSkKLSAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50
c0ZlYXR1cmU7Ci0gICAgCi0gICAgdW5zaWduZWQgZnVuY3Rpb25DYWNoZVNpemUgPSBtX2Z1bmN0
aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVTaXplKCkgOiAwOwotICAgIGlmIChmdW5j
dGlvbkNhY2hlU2l6ZSAhPSBvbGRGdW5jdGlvbkNhY2hlU2l6ZSkKLSAgICAgICAgbV9sZXhlci0+
c291cmNlUHJvdmlkZXIoKS0+bm90aWZ5Q2FjaGVTaXplQ2hhbmdlZChmdW5jdGlvbkNhY2hlU2l6
ZSAtIG9sZEZ1bmN0aW9uQ2FjaGVTaXplKTsKLQotICAgIG1fZ2xvYmFsRGF0YS0+cGFyc2VyLT5k
aWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LnZhckRlY2xhcmF0aW9ucygp
LCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFu
dHMoKSwgY2FwdHVyZWRWYXJpYWJsZXMpOwotICAgIHJldHVybiBVU3RyaW5nKCk7Ci19Ci0KLWJv
b2wgSlNQYXJzZXI6OmFsbG93QXV0b21hdGljU2VtaWNvbG9uKCkKLXsKLSAgICByZXR1cm4gbWF0
Y2goQ0xPU0VCUkFDRSkgfHwgbWF0Y2goRU9GVE9LKSB8fCBtX2xleGVyLT5wcmV2VGVybWluYXRv
cigpOwotfQotCi10ZW1wbGF0ZSA8SlNQYXJzZXI6OlNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIEpTUGFyc2VyOjpwYXJzZVNvdXJj
ZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIFRyZWVTb3VyY2VFbGVtZW50
cyBzb3VyY2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsKLSAgICBi
b29sIHNlZW5Ob25EaXJlY3RpdmUgPSBmYWxzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBkaXJl
Y3RpdmUgPSAwOwotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2luZm8uc3Rh
cnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgb2xkTGFzdExpbmVOdW1iZXIgPSBtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpOwotICAgIHVuc2lnbmVkIG9sZExpbmVOdW1iZXIgPSBtX2xleGVyLT5saW5l
TnVtYmVyKCk7Ci0gICAgYm9vbCBoYXNTZXRTdHJpY3QgPSBmYWxzZTsKLSAgICB3aGlsZSAoVHJl
ZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCBkaXJlY3RpdmUp
KSB7Ci0gICAgICAgIGlmIChtb2RlID09IENoZWNrRm9yU3RyaWN0TW9kZSAmJiAhc2Vlbk5vbkRp
cmVjdGl2ZSkgewotICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICAgICAgICAg
IGlmICghaGFzU2V0U3RyaWN0ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dXNlU3Ry
aWN0SWRlbnRpZmllciA9PSAqZGlyZWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFN0
cmljdE1vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzU2V0U3RyaWN0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoaXNWYWxpZFN0cmljdE1vZGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbGV4ZXItPnNldE9mZnNldChzdGFydE9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9sZXhlci0+c2V0TGFz
dExpbmVOdW1iZXIob2xkTGFzdExpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBtX2xl
eGVyLT5zZXRMaW5lTnVtYmVyKG9sZExpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBm
YWlsSWZUcnVlKG1fZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzZWVuTm9u
RGlyZWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjb250ZXh0LmFwcGVuZFN0YXRl
bWVudChzb3VyY2VFbGVtZW50cywgc3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAobV9lcnJv
cikKLSAgICAgICAgZmFpbCgpOwotICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2VyOjpwYXJzZVZh
ckRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChW
QVIpKTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kID0gMDsKLSAg
ICBpbnQgc2NyYXRjaDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBzY3JhdGNoMSA9IDA7Ci0gICAg
VHJlZUV4cHJlc3Npb24gc2NyYXRjaDIgPSAwOwotICAgIGludCBzY3JhdGNoMyA9IDA7Ci0gICAg
VHJlZUV4cHJlc3Npb24gdmFyRGVjbHMgPSBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChjb250ZXh0
LCBzY3JhdGNoLCBzY3JhdGNoMSwgc2NyYXRjaDIsIHNjcmF0Y2gzLCBzY3JhdGNoMywgc2NyYXRj
aDMpOwotICAgIGZhaWxJZlRydWUobV9lcnJvcik7Ci0gICAgZmFpbElmRmFsc2UoYXV0b1NlbWlD
b2xvbigpKTsKLQotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVZhclN0YXRlbWVudCh2YXJEZWNs
cywgc3RhcnQsIGVuZCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250
ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChDT05TVFRPS0VOKSk7Ci0gICAgaW50IHN0YXJ0ID0g
dG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZCA9IDA7Ci0gICAgVHJlZUNvbnN0RGVjbExpc3QgY29u
c3REZWNscyA9IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoY29udGV4dCk7Ci0gICAgZmFpbElm
VHJ1ZShtX2Vycm9yKTsKLSAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIAot
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0RGVjbHMsIHN0YXJ0
LCBlbmQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
SlNQYXJzZXI6OnBhcnNlRG9XaGlsZVN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsK
LSAgICBBU1NFUlQobWF0Y2goRE8pKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7
Ci0gICAgbmV4dCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7Ci0gICAgc3Rh
cnRMb29wKCk7Ci0gICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChj
b250ZXh0LCB1bnVzZWQpOwotICAgIGVuZExvb3AoKTsKLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1l
bnQpOwotICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgY29uc3VtZU9yRmFpbChX
SElMRSk7Ci0gICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotICAgIFRyZWVFeHByZXNzaW9u
IGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7
Ci0gICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLSAgICBpZiAobWF0Y2goU0VNSUNPTE9O
KSkKLSAgICAgICAgbmV4dCgpOyAvLyBBbHdheXMgcGVyZm9ybXMgYXV0b21hdGljIHNlbWljb2xv
biBpbnNlcnRpb24uCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRG9XaGlsZVN0YXRlbWVudChz
dGF0ZW1lbnQsIGV4cHIsIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VXaGlsZVN0YXRlbWVu
dChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQobWF0Y2goV0hJTEUpKTsKLSAg
ICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgbmV4dCgpOwotICAgIGNvbnN1bWVP
ckZhaWwoT1BFTlBBUkVOKTsKLSAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBlbmRMaW5lID0g
dG9rZW5MaW5lKCk7Ci0gICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAgIHN0YXJ0TG9vcCgpOwotICAgIFRyZWVTdGF0ZW1l
bnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKLSAgICBlbmRM
b29wKCk7Ci0gICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKLSAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVXaGlsZVN0YXRlbWVudChleHByLCBzdGF0ZW1lbnQsIHN0YXJ0TGluZSwgZW5kTGluZSk7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQYXJz
ZXI6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRl
Y2xhcmF0aW9ucywgY29uc3QgSWRlbnRpZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24m
IGxhc3RJbml0aWFsaXplciwgaW50JiBpZGVudFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBp
bml0RW5kKQotewotICAgIFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gMDsKLSAgICBkbyB7Ci0g
ICAgICAgIGRlY2xhcmF0aW9ucysrOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIG1hdGNoT3JG
YWlsKElERU5UKTsKLQotICAgICAgICBpbnQgdmFyU3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAg
ICAgIGlkZW50U3RhcnQgPSB2YXJTdGFydDsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFt
ZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBsYXN0SWRlbnQgPSBuYW1lOwotICAg
ICAgICBuZXh0KCk7Ci0gICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIgPSBtYXRjaChFUVVBTCk7
Ci0gICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoZGVjbGFyZVZh
cmlhYmxlKG5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSB2YXJpYWJsZSBuYW1lZCIsIG5hbWUtPmlt
cGwoKSwgImluIHN0cmljdCBtb2RlLiIpOwotICAgICAgICBjb250ZXh0LmFkZFZhcihuYW1lLCAo
aGFzSW5pdGlhbGl6ZXIgfHwgKCFtX2FsbG93c0luICYmIG1hdGNoKElOVE9LRU4pKSkgPyBEZWNs
YXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIgOiAwKTsKLSAgICAgICAgaWYgKGhhc0luaXRp
YWxpemVyKSB7Ci0gICAgICAgICAgICBpbnQgdmFyRGl2b3QgPSB0b2tlblN0YXJ0KCkgKyAxOwot
ICAgICAgICAgICAgaW5pdFN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICAgICAgbmV4dChU
cmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCi0gICAgICAgICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7Ci0gICAgICAgICAg
ICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
Y29udGV4dCk7Ci0gICAgICAgICAgICBpbml0RW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAg
ICAgICBsYXN0SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKLSAgICAgICAgICAgIGZhaWxJZkZh
bHNlKGluaXRpYWxpemVyKTsKLQotICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IGNv
bnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZSgqbmFtZSwgaW5pdGlhbGl6ZXIsIGluaXRpYWxBc3Np
Z25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgdmFyU3RhcnQsIHZhckRpdm90LCBsYXN0VG9r
ZW5FbmQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZhckRlY2xzKQotICAgICAgICAgICAgICAgIHZh
ckRlY2xzID0gbm9kZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2YXJEZWNs
cyA9IGNvbnRleHQuY29tYmluZUNvbW1hTm9kZXModmFyRGVjbHMsIG5vZGUpOwotICAgICAgICB9
Ci0gICAgfSB3aGlsZSAobWF0Y2goQ09NTUEpKTsKLSAgICByZXR1cm4gdmFyRGVjbHM7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNvbnN0RGVjbExpc3QgSlNQYXJzZXI6
OnBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAg
ZmFpbElmVHJ1ZShzdHJpY3RNb2RlKCkpOwotICAgIFRyZWVDb25zdERlY2xMaXN0IGNvbnN0RGVj
bHMgPSAwOwotICAgIFRyZWVDb25zdERlY2xMaXN0IHRhaWwgPSAwOwotICAgIGRvIHsKLSAgICAg
ICAgbmV4dCgpOwotICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgbmV4dCgpOwot
ICAgICAgICBib29sIGhhc0luaXRpYWxpemVyID0gbWF0Y2goRVFVQUwpOwotICAgICAgICBkZWNs
YXJlVmFyaWFibGUobmFtZSk7Ci0gICAgICAgIGNvbnRleHQuYWRkVmFyKG5hbWUsIERlY2xhcmF0
aW9uU3RhY2tzOjpJc0NvbnN0YW50IHwgKGhhc0luaXRpYWxpemVyID8gRGVjbGFyYXRpb25TdGFj
a3M6Okhhc0luaXRpYWxpemVyIDogMCkpOwotICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFs
aXplciA9IDA7Ci0gICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgewotICAgICAgICAgICAgbmV4
dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCi0gICAgICAg
ICAgICBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGFpbCA9IGNvbnRleHQuYXBwZW5kQ29uc3REZWNsKHRhaWwsIG5h
bWUsIGluaXRpYWxpemVyKTsKLSAgICAgICAgaWYgKCFjb25zdERlY2xzKQotICAgICAgICAgICAg
Y29uc3REZWNscyA9IHRhaWw7Ci0gICAgfSB3aGlsZSAobWF0Y2goQ09NTUEpKTsKLSAgICByZXR1
cm4gY29uc3REZWNsczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IEpTUGFyc2VyOjpwYXJzZUZvclN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkK
LXsKLSAgICBBU1NFUlQobWF0Y2goRk9SKSk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGlu
ZSgpOwotICAgIG5leHQoKTsKLSAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7Ci0gICAgaW50
IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKLSAgICBpbnQgZGVjbGFyYXRpb25zID0gMDsK
LSAgICBpbnQgZGVjbHNTdGFydCA9IDA7Ci0gICAgaW50IGRlY2xzRW5kID0gMDsKLSAgICBUcmVl
RXhwcmVzc2lvbiBkZWNscyA9IDA7Ci0gICAgYm9vbCBoYXNEZWNsYXJhdGlvbiA9IGZhbHNlOwot
ICAgIGlmIChtYXRjaChWQVIpKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICBmb3IgKHZhciBJREVO
VCBpbiBleHByZXNzaW9uKSBzdGF0ZW1lbnQKLSAgICAgICAgIGZvciAodmFyIElERU5UID0gZXhw
cmVzc2lvbiBpbiBleHByZXNzaW9uKSBzdGF0ZW1lbnQKLSAgICAgICAgIGZvciAodmFyIHZhckRl
Y2xhcmF0aW9uTGlzdDsgZXhwcmVzc2lvbk9wdDsgZXhwcmVzc2lvbk9wdCkKLSAgICAgICAgICov
Ci0gICAgICAgIGhhc0RlY2xhcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogZm9ySW5UYXJnZXQgPSAwOwotICAgICAgICBUcmVlRXhwcmVzc2lvbiBmb3JJbkluaXRpYWxp
emVyID0gMDsKLSAgICAgICAgbV9hbGxvd3NJbiA9IGZhbHNlOwotICAgICAgICBpbnQgaW5pdFN0
YXJ0ID0gMDsKLSAgICAgICAgaW50IGluaXRFbmQgPSAwOwotICAgICAgICBkZWNscyA9IHBhcnNl
VmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQsIGRlY2xhcmF0aW9ucywgZm9ySW5UYXJnZXQsIGZv
ckluSW5pdGlhbGl6ZXIsIGRlY2xzU3RhcnQsIGluaXRTdGFydCwgaW5pdEVuZCk7Ci0gICAgICAg
IG1fYWxsb3dzSW4gPSB0cnVlOwotICAgICAgICBpZiAobV9lcnJvcikKLSAgICAgICAgICAgIGZh
aWwoKTsKLQotICAgICAgICAvLyBSZW1haW5kZXIgb2YgYSBzdGFuZGFyZCBmb3IgbG9vcCBpcyBo
YW5kbGVkIGlkZW50aWNhbGx5Ci0gICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAg
ICAgICAgZ290byBzdGFuZGFyZEZvckxvb3A7Ci0KLSAgICAgICAgZmFpbElmRmFsc2UoZGVjbGFy
YXRpb25zID09IDEpOwotCi0gICAgICAgIC8vIEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFy
YXRpb24KLSAgICAgICAgaW50IGluTG9jYXRpb24gPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGNv
bnN1bWVPckZhaWwoSU5UT0tFTik7Ci0KLSAgICAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBh
cnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAg
ICAgIGludCBleHByRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0KLSAgICAgICAgaW50IGVuZExpbmUg
PSB0b2tlbkxpbmUoKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLQotICAg
ICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAgICAgICBzdGFydExvb3AoKTsK
LSAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0
LCB1bnVzZWQpOwotICAgICAgICBlbmRMb29wKCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKHN0YXRl
bWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKGZvckluVGFy
Z2V0LCBmb3JJbkluaXRpYWxpemVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGluTG9j
YXRpb24sIGV4cHJFbmQsIGluaXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsK
LSAgICB9Ci0KLSAgICBpZiAoIW1hdGNoKFNFTUlDT0xPTikpIHsKLSAgICAgICAgbV9hbGxvd3NJ
biA9IGZhbHNlOwotICAgICAgICBkZWNsc1N0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBk
ZWNscyA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZGVjbHNFbmQgPSBsYXN0
VG9rZW5FbmQoKTsKLSAgICAgICAgbV9hbGxvd3NJbiA9IHRydWU7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKGRlY2xzKTsKLSAgICB9Ci0KLSAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkgewotICAgIHN0
YW5kYXJkRm9yTG9vcDoKLSAgICAgICAgLy8gU3RhbmRhcmQgZm9yIGxvb3AKLSAgICAgICAgbmV4
dCgpOwotICAgICAgICBUcmVlRXhwcmVzc2lvbiBjb25kaXRpb24gPSAwOwotCi0gICAgICAgIGlm
ICghbWF0Y2goU0VNSUNPTE9OKSkgewotICAgICAgICAgICAgY29uZGl0aW9uID0gcGFyc2VFeHBy
ZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UoY29uZGl0aW9uKTsKLSAg
ICAgICAgfQotICAgICAgICBjb25zdW1lT3JGYWlsKFNFTUlDT0xPTik7Ci0KLSAgICAgICAgVHJl
ZUV4cHJlc3Npb24gaW5jcmVtZW50ID0gMDsKLSAgICAgICAgaWYgKCFtYXRjaChDTE9TRVBBUkVO
KSkgewotICAgICAgICAgICAgaW5jcmVtZW50ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwot
ICAgICAgICAgICAgZmFpbElmRmFsc2UoaW5jcmVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBp
bnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFS
RU4pOwotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAgICAgICBzdGFy
dExvb3AoKTsKLSAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVu
dChjb250ZXh0LCB1bnVzZWQpOwotICAgICAgICBlbmRMb29wKCk7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKHN0YXRlbWVudCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckxvb3AoZGVj
bHMsIGNvbmRpdGlvbiwgaW5jcmVtZW50LCBzdGF0ZW1lbnQsIGhhc0RlY2xhcmF0aW9uLCBzdGFy
dExpbmUsIGVuZExpbmUpOwotICAgIH0KLQotICAgIC8vIEZvci1pbiBsb29wCi0gICAgZmFpbElm
RmFsc2Uobm9uTEhTQ291bnQgPT0gbV9ub25MSFNDb3VudCk7Ci0gICAgY29uc3VtZU9yRmFpbChJ
TlRPS0VOKTsKLSAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRl
eHQpOwotICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBleHByRW5kID0gbGFzdFRva2Vu
RW5kKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBjb25zdW1lT3JGYWls
KENMT1NFUEFSRU4pOwotICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7Ci0gICAgc3Rh
cnRMb29wKCk7Ci0gICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChj
b250ZXh0LCB1bnVzZWQpOwotICAgIGVuZExvb3AoKTsKLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1l
bnQpOwotICAgIAotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChkZWNscywgZXhw
ciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBl
bmRMaW5lKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IEpTUGFyc2VyOjpwYXJzZUJyZWFrU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewot
ICAgIEFTU0VSVChtYXRjaChCUkVBSykpOwotICAgIGludCBzdGFydENvbCA9IHRva2VuU3RhcnQo
KTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9r
ZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0K
LSAgICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7Ci0gICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3Nh
Z2UoYnJlYWtJc1ZhbGlkKCksICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNo
IG9yIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFr
U3RhdGVtZW50KHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci0gICAgfQot
ICAgIG1hdGNoT3JGYWlsKElERU5UKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1f
dG9rZW4ubV9kYXRhLmlkZW50OwotICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGdl
dExhYmVsKGlkZW50KSwgIkxhYmVsIiwgaWRlbnQtPmltcGwoKSwgImlzIG5vdCBkZWZpbmVkIik7
Ci0gICAgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0g
ICAgbmV4dCgpOwotICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQoaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0
YXJ0TGluZSwgZW5kTGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VDb250aW51ZVN0YXRlbWVudChUcmVlQnVpbGRlciYg
Y29udGV4dCkKLXsKLSAgICBBU1NFUlQobWF0Y2goQ09OVElOVUUpKTsKLSAgICBpbnQgc3RhcnRD
b2wgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgaW50
IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7
Ci0gICAgbmV4dCgpOwotCi0gICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewotICAgICAgICBmYWls
SWZGYWxzZVdpdGhNZXNzYWdlKGNvbnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5
IHZhbGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5k
TGluZSk7Ci0gICAgfQotICAgIG1hdGNoT3JGYWlsKElERU5UKTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgIFNjb3BlTGFiZWxJbmZvKiBs
YWJlbCA9IGdldExhYmVsKGlkZW50KTsKLSAgICBmYWlsSWZGYWxzZVdpdGhOYW1lQW5kTWVzc2Fn
ZShsYWJlbCwgIkxhYmVsIiwgaWRlbnQtPmltcGwoKSwgImlzIG5vdCBkZWZpbmVkIik7Ci0gICAg
ZmFpbElmRmFsc2VXaXRoTWVzc2FnZShsYWJlbC0+bV9pc0xvb3AsICInY29udGludWUnIGlzIG9u
bHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1lbnQiKTsKLSAgICBlbmRDb2wgPSB0b2tlbkVu
ZCgpOwotICAgIGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBuZXh0KCk7Ci0gICAgZmFpbElm
RmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51
ZVN0YXRlbWVudChpZGVudCwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFyc2Vy
OjpwYXJzZVJldHVyblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NF
UlQobWF0Y2goUkVUVVJOKSk7Ci0gICAgZmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlzRnVu
Y3Rpb24oKSk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRM
aW5lID0gc3RhcnRMaW5lOwotICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQg
ZW5kID0gdG9rZW5FbmQoKTsKLSAgICBuZXh0KCk7Ci0gICAgLy8gV2UgZG8gdGhlIGF1dG8gc2Vt
aWNvbG9uIGNoZWNrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlIGFuIGV4cHJlc3Npb24KLSAg
ICAvLyBhcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYSBsaW5lIGJyZWFrIGFmdGVyIHRoZSByZXR1
cm4gY29ycmVjdGx5IHRlcm1pbmF0ZXMKLSAgICAvLyB0aGUgc3RhdGVtZW50Ci0gICAgaWYgKG1h
dGNoKFNFTUlDT0xPTikpCi0gICAgICAgIGVuZExpbmUgID0gdG9rZW5MaW5lKCk7Ci0gICAgaWYg
KGF1dG9TZW1pQ29sb24oKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJuU3Rh
dGVtZW50KDAsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci0gICAgVHJlZUV4cHJl
c3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShl
eHByKTsKLSAgICBlbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICBpZiAobWF0Y2goU0VNSUNPTE9O
KSkKLSAgICAgICAgZW5kTGluZSAgPSB0b2tlbkxpbmUoKTsKLSAgICBmYWlsSWZGYWxzZShhdXRv
U2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChl
eHByLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlVGhyb3dTdGF0ZW1l
bnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKFRIUk9XKSk7Ci0g
ICAgaW50IGVTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5M
aW5lKCk7Ci0gICAgbmV4dCgpOwotICAgIAotICAgIGZhaWxJZlRydWUoYXV0b1NlbWlDb2xvbigp
KTsKLQotICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7
Ci0gICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgaW50IGVFbmQgPSBsYXN0VG9rZW5FbmQoKTsK
LSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1p
Q29sb24oKSk7Ci0KLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaHJvd1N0YXRlbWVudChleHBy
LCBlU3RhcnQsIGVFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBKU1BhcnNlcjo6cGFyc2VXaXRoU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VSVChtYXRjaChXSVRIKSk7Ci0gICAg
ZmFpbElmVHJ1ZVdpdGhNZXNzYWdlKHN0cmljdE1vZGUoKSwgIid3aXRoJyBzdGF0ZW1lbnRzIGFy
ZSBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICBjdXJyZW50U2NvcGUoKS0+c2V0TmVl
ZHNGdWxsQWN0aXZhdGlvbigpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAg
ICBuZXh0KCk7Ci0gICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotICAgIGludCBzdGFydCA9
IHRva2VuU3RhcnQoKTsKLSAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9u
KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBlbmQgPSBsYXN0VG9r
ZW5FbmQoKTsKLQotICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgY29uc3VtZU9y
RmFpbChDTE9TRVBBUkVOKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAg
IFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2Vk
KTsKLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwotCi0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlV2l0aFN0YXRlbWVudChleHByLCBzdGF0ZW1lbnQsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwg
ZW5kTGluZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBKU1BhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17
Ci0gICAgQVNTRVJUKG1hdGNoKFNXSVRDSCkpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxp
bmUoKTsKLSAgICBuZXh0KCk7Ci0gICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotICAgIFRy
ZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElm
RmFsc2UoZXhwcik7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBjb25zdW1l
T3JGYWlsKENMT1NFUEFSRU4pOwotICAgIGNvbnN1bWVPckZhaWwoT1BFTkJSQUNFKTsKLSAgICBz
dGFydFN3aXRjaCgpOwotICAgIFRyZWVDbGF1c2VMaXN0IGZpcnN0Q2xhdXNlcyA9IHBhcnNlU3dp
dGNoQ2xhdXNlcyhjb250ZXh0KTsKLSAgICBmYWlsSWZUcnVlKG1fZXJyb3IpOwotCi0gICAgVHJl
ZUNsYXVzZSBkZWZhdWx0Q2xhdXNlID0gcGFyc2VTd2l0Y2hEZWZhdWx0Q2xhdXNlKGNvbnRleHQp
OwotICAgIGZhaWxJZlRydWUobV9lcnJvcik7Ci0KLSAgICBUcmVlQ2xhdXNlTGlzdCBzZWNvbmRD
bGF1c2VzID0gcGFyc2VTd2l0Y2hDbGF1c2VzKGNvbnRleHQpOwotICAgIGZhaWxJZlRydWUobV9l
cnJvcik7Ci0gICAgZW5kU3dpdGNoKCk7Ci0gICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFKTsK
LQotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVN3aXRjaFN0YXRlbWVudChleHByLCBmaXJzdENs
YXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMsIHN0YXJ0TGluZSwgZW5kTGluZSk7
Ci0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhdXNlTGlzdCBKU1Bh
cnNlcjo6cGFyc2VTd2l0Y2hDbGF1c2VzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIGlm
ICghbWF0Y2goQ0FTRSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5leHQoKTsKLSAgICBUcmVl
RXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgZmFp
bElmRmFsc2UoY29uZGl0aW9uKTsKLSAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKLSAgICBUcmVl
U291cmNlRWxlbWVudHMgc3RhdGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHM8RG9udENoZWNr
Rm9yU3RyaWN0TW9kZT4oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50cyk7Ci0g
ICAgVHJlZUNsYXVzZSBjbGF1c2UgPSBjb250ZXh0LmNyZWF0ZUNsYXVzZShjb25kaXRpb24sIHN0
YXRlbWVudHMpOwotICAgIFRyZWVDbGF1c2VMaXN0IGNsYXVzZUxpc3QgPSBjb250ZXh0LmNyZWF0
ZUNsYXVzZUxpc3QoY2xhdXNlKTsKLSAgICBUcmVlQ2xhdXNlTGlzdCB0YWlsID0gY2xhdXNlTGlz
dDsKLQotICAgIHdoaWxlIChtYXRjaChDQVNFKSkgewotICAgICAgICBuZXh0KCk7Ci0gICAgICAg
IFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAg
ICAgICAgZmFpbElmRmFsc2UoY29uZGl0aW9uKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChDT0xP
Tik7Ci0gICAgICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzdGF0ZW1lbnRzID0gcGFyc2VTb3VyY2VF
bGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKLSAgICAgICAgZmFpbElm
RmFsc2Uoc3RhdGVtZW50cyk7Ci0gICAgICAgIGNsYXVzZSA9IGNvbnRleHQuY3JlYXRlQ2xhdXNl
KGNvbmRpdGlvbiwgc3RhdGVtZW50cyk7Ci0gICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZUNs
YXVzZUxpc3QodGFpbCwgY2xhdXNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXVzZUxpc3Q7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXVzZSBKU1BhcnNlcjo6cGFy
c2VTd2l0Y2hEZWZhdWx0Q2xhdXNlKFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIGlmICgh
bWF0Y2goREVGQVVMVCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5leHQoKTsKLSAgICBjb25z
dW1lT3JGYWlsKENPTE9OKTsKLSAgICBUcmVlU291cmNlRWxlbWVudHMgc3RhdGVtZW50cyA9IHBh
cnNlU291cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0TW9kZT4oY29udGV4dCk7Ci0gICAg
ZmFpbElmRmFsc2Uoc3RhdGVtZW50cyk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ2xhdXNl
KDAsIHN0YXRlbWVudHMpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0
KQotewotICAgIEFTU0VSVChtYXRjaChUUlkpKTsKLSAgICBUcmVlU3RhdGVtZW50IHRyeUJsb2Nr
ID0gMDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwotICAgIGJvb2wgY2F0Y2hIYXNFdmFsID0gZmFsc2U7
Ci0gICAgVHJlZVN0YXRlbWVudCBjYXRjaEJsb2NrID0gMDsKLSAgICBUcmVlU3RhdGVtZW50IGZp
bmFsbHlCbG9jayA9IDA7Ci0gICAgaW50IGZpcnN0TGluZSA9IHRva2VuTGluZSgpOwotICAgIG5l
eHQoKTsKLSAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UpOwotCi0gICAgdHJ5QmxvY2sgPSBwYXJz
ZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKHRyeUJsb2NrKTsKLSAg
ICBpbnQgbGFzdExpbmUgPSBtX2xhc3RMaW5lOwotCi0gICAgaWYgKG1hdGNoKENBVENIKSkgewot
ICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpOwotICAgICAg
ICBuZXh0KCk7Ci0gICAgICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsKLSAgICAgICAgbWF0
Y2hPckZhaWwoSURFTlQpOwotICAgICAgICBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50Owot
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgIEF1dG9Qb3BTY29wZVJlZiBjYXRjaFNjb3BlKHRoaXMs
IHB1c2hTY29wZSgpKTsKLSAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVz
c2FnZShjYXRjaFNjb3BlLT5kZWNsYXJlVmFyaWFibGUoaWRlbnQpLCAiQ2Fubm90IGRlY2xhcmUg
YSB2YXJpYWJsZSBuYW1lZCIsIGlkZW50LT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZSIpOwotICAg
ICAgICBjYXRjaFNjb3BlLT5wcmV2ZW50TmV3RGVjbHMoKTsKLSAgICAgICAgY29uc3VtZU9yRmFp
bChDTE9TRVBBUkVOKTsKLSAgICAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFKTsKLSAgICAgICAg
aW50IGluaXRpYWxFdmFsQ291bnQgPSBjb250ZXh0LmV2YWxDb3VudCgpOwotICAgICAgICBjYXRj
aEJsb2NrID0gcGFyc2VCbG9ja1N0YXRlbWVudChjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFs
c2VXaXRoTWVzc2FnZShjYXRjaEJsb2NrLCAiJ3RyeScgbXVzdCBoYXZlIGEgY2F0Y2ggb3IgZmlu
YWxseSBibG9jayIpOwotICAgICAgICBjYXRjaEhhc0V2YWwgPSBpbml0aWFsRXZhbENvdW50ICE9
IGNvbnRleHQuZXZhbENvdW50KCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGNhdGNo
U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKLSAgICB9Ci0KLSAg
ICBpZiAobWF0Y2goRklOQUxMWSkpIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBtYXRjaE9y
RmFpbChPUEVOQlJBQ0UpOwotICAgICAgICBmaW5hbGx5QmxvY2sgPSBwYXJzZUJsb2NrU3RhdGVt
ZW50KGNvbnRleHQpOwotICAgICAgICBmYWlsSWZGYWxzZShmaW5hbGx5QmxvY2spOwotICAgIH0K
LSAgICBmYWlsSWZGYWxzZShjYXRjaEJsb2NrIHx8IGZpbmFsbHlCbG9jayk7Ci0gICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlVHJ5U3RhdGVtZW50KHRyeUJsb2NrLCBpZGVudCwgY2F0Y2hIYXNFdmFs
LCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2ssIGZpcnN0TGluZSwgbGFzdExpbmUpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNl
RGVidWdnZXJTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG1h
dGNoKERFQlVHR0VSKSk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGlu
dCBlbmRMaW5lID0gc3RhcnRMaW5lOwotICAgIG5leHQoKTsKLSAgICBpZiAobWF0Y2goU0VNSUNP
TE9OKSkKLSAgICAgICAgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZmFpbElmRmFsc2Uo
YXV0b1NlbWlDb2xvbigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVEZWJ1Z2dlcihzdGFy
dExpbmUsIGVuZExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlQmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCi17Ci0gICAgQVNTRVJUKG1hdGNoKE9QRU5CUkFDRSkpOwotICAgIGludCBzdGFydCA9IHRv
a2VuTGluZSgpOwotICAgIG5leHQoKTsKLSAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsKLSAg
ICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVu
dCgwLCBzdGFydCwgbV9sYXN0TGluZSk7Ci0gICAgfQotICAgIFRyZWVTb3VyY2VFbGVtZW50cyBz
dWJ0cmVlID0gcGFyc2VTb3VyY2VFbGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250
ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShzdWJ0cmVlKTsKLSAgICBtYXRjaE9yRmFpbChDTE9TRUJS
QUNFKTsKLSAgICBuZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1l
bnQoc3VidHJlZSwgc3RhcnQsIG1fbGFzdExpbmUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNlU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlKQotewotICAgIERlcHRo
TWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7Ci0gICAgbV9zdGF0ZW1l
bnREZXB0aCsrOwotICAgIGRpcmVjdGl2ZSA9IDA7Ci0gICAgaW50IG5vblRyaXZpYWxFeHByZXNz
aW9uQ291bnQgPSAwOwotICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBzd2l0Y2ggKG1f
dG9rZW4ubV90eXBlKSB7Ci0gICAgY2FzZSBPUEVOQlJBQ0U6Ci0gICAgICAgIHJldHVybiBwYXJz
ZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgVkFSOgotICAgICAgICByZXR1cm4g
cGFyc2VWYXJEZWNsYXJhdGlvbihjb250ZXh0KTsKLSAgICBjYXNlIENPTlNUVE9LRU46Ci0gICAg
ICAgIHJldHVybiBwYXJzZUNvbnN0RGVjbGFyYXRpb24oY29udGV4dCk7Ci0gICAgY2FzZSBGVU5D
VElPTjoKLSAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhNZXNzYWdlKG1fc3RhdGVtZW50
RGVwdGggPT0gMSwgIkZ1bmN0aW9ucyBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gYSBuZXN0ZWQgYmxv
Y2sgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbihjb250ZXh0KTsKLSAgICBjYXNlIFNFTUlDT0xPTjoKLSAgICAgICAgbmV4dCgpOwotICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFbXB0eVN0YXRlbWVudCgpOwotICAgIGNhc2UgSUY6
Ci0gICAgICAgIHJldHVybiBwYXJzZUlmU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgRE86
Ci0gICAgICAgIHJldHVybiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgY2Fz
ZSBXSElMRToKLSAgICAgICAgcmV0dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQoY29udGV4dCk7Ci0g
ICAgY2FzZSBGT1I6Ci0gICAgICAgIHJldHVybiBwYXJzZUZvclN0YXRlbWVudChjb250ZXh0KTsK
LSAgICBjYXNlIENPTlRJTlVFOgotICAgICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVu
dChjb250ZXh0KTsKLSAgICBjYXNlIEJSRUFLOgotICAgICAgICByZXR1cm4gcGFyc2VCcmVha1N0
YXRlbWVudChjb250ZXh0KTsKLSAgICBjYXNlIFJFVFVSTjoKLSAgICAgICAgcmV0dXJuIHBhcnNl
UmV0dXJuU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgV0lUSDoKLSAgICAgICAgcmV0dXJu
IHBhcnNlV2l0aFN0YXRlbWVudChjb250ZXh0KTsKLSAgICBjYXNlIFNXSVRDSDoKLSAgICAgICAg
cmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgVEhST1c6Ci0g
ICAgICAgIHJldHVybiBwYXJzZVRocm93U3RhdGVtZW50KGNvbnRleHQpOwotICAgIGNhc2UgVFJZ
OgotICAgICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgY2FzZSBE
RUJVR0dFUjoKLSAgICAgICAgcmV0dXJuIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoY29udGV4dCk7
Ci0gICAgY2FzZSBFT0ZUT0s6Ci0gICAgY2FzZSBDQVNFOgotICAgIGNhc2UgQ0xPU0VCUkFDRToK
LSAgICBjYXNlIERFRkFVTFQ6Ci0gICAgICAgIC8vIFRoZXNlIHRva2VucyBpbXBseSB0aGUgZW5k
IG9mIGEgc2V0IG9mIHNvdXJjZSBlbGVtZW50cwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNl
IElERU5UOgotICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChj
b250ZXh0KTsKLSAgICBjYXNlIFNUUklORzoKLSAgICAgICAgZGlyZWN0aXZlID0gbV90b2tlbi5t
X2RhdGEuaWRlbnQ7Ci0gICAgICAgIG5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQgPSBtX25vblRy
aXZpYWxFeHByZXNzaW9uQ291bnQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHJlZVN0YXRlbWVu
dCBleHByU3RhdGVtZW50ID0gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHQpOwotICAg
ICAgICBpZiAoZGlyZWN0aXZlICYmIG5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQgIT0gbV9ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50KQotICAgICAgICAgICAgZGlyZWN0aXZlID0gMDsKLSAgICAg
ICAgcmV0dXJuIGV4cHJTdGF0ZW1lbnQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IEpTUGFyc2VyOjpwYXJzZUZvcm1hbFBh
cmFtZXRlcnMoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgbWF0Y2hPckZhaWwoSURFTlQp
OwotICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoZGVjbGFyZVBhcmFt
ZXRlcihtX3Rva2VuLm1fZGF0YS5pZGVudCksICJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBu
YW1lZCIsIG1fdG9rZW4ubV9kYXRhLmlkZW50LT5pbXBsKCksICIgaW4gc3RyaWN0IG1vZGUiKTsK
LSAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0ID0gY29udGV4dC5jcmVhdGVGb3JtYWxQ
YXJhbWV0ZXJMaXN0KCptX3Rva2VuLm1fZGF0YS5pZGVudCk7Ci0gICAgVHJlZUZvcm1hbFBhcmFt
ZXRlckxpc3QgdGFpbCA9IGxpc3Q7Ci0gICAgbmV4dCgpOwotICAgIHdoaWxlIChtYXRjaChDT01N
QSkpIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAg
ICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoZGVjbGFyZVBhcmFtZXRl
cihpZGVudCksICJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCIsIGlkZW50LT5pbXBs
KCksICJpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHRhaWwgPSBj
b250ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QodGFpbCwgKmlkZW50KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1
bmN0aW9uQm9keSBKU1BhcnNlcjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRl
eHQpCi17Ci0gICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQotICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RyaWN0TW9kZSgpKTsKLSAgICBEZXB0aE1hbmFnZXIgc3Rh
dGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOwotICAgIG1fc3RhdGVtZW50RGVwdGggPSAw
OwotICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWls
ZGVyKG1fZ2xvYmFsRGF0YSwgbV9sZXhlcik7Ci0gICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VF
bGVtZW50czxDaGVja0ZvclN0cmljdE1vZGU+KGJvZHlCdWlsZGVyKSk7Ci0gICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0cmljdE1vZGUoKSk7Ci19Ci0KLXRlbXBsYXRlIDxK
U1BhcnNlcjo6RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0lu
Q29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBKU1BhcnNlcjo6cGFyc2VG
dW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIqJiBuYW1l
LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywgVHJlZUZ1bmN0aW9uQm9keSYg
Ym9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGludCYgY2xvc2VCcmFjZVBvcywgaW50JiBib2R5U3Rh
cnRMaW5lKQotewotICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hT
Y29wZSgpKTsKLSAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7Ci0gICAgaWYgKG1h
dGNoKElERU5UKSkgewotICAgICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAg
ICAgIGZhaWxJZlRydWVXaXRoTWVzc2FnZSgqbmFtZSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPnVuZGVyc2NvcmVQcm90bywgIkNhbm5vdCBuYW1lIGEgZnVuY3Rpb24gX19wcm90b19f
Iik7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgaWYgKCFuYW1lSXNJbkNvbnRhaW5pbmdTY29w
ZSkKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZnVuY3Rpb25TY29wZS0+ZGVjbGFy
ZVZhcmlhYmxlKG5hbWUpKTsKLSAgICB9IGVsc2UgaWYgKHJlcXVpcmVtZW50cyA9PSBGdW5jdGlv
bk5lZWRzTmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN1bWVPckZhaWwoT1BF
TlBBUkVOKTsKLSAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgIHBhcmFtZXRl
cnMgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZhbHNl
KHBhcmFtZXRlcnMpOwotICAgIH0KLSAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwotICAg
IG1hdGNoT3JGYWlsKE9QRU5CUkFDRSk7Ci0KLSAgICBvcGVuQnJhY2VQb3MgPSBtX3Rva2VuLm1f
ZGF0YS5pbnRWYWx1ZTsKLSAgICBib2R5U3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0KLSAgICAv
LyBJZiB3ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVzZSB0aGUg
Y2FjaGVkIGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlv
bi4KLSAgICBpZiAoY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGNhY2hlZEluZm8gPSBU
cmVlQnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8o
b3BlbkJyYWNlUG9zKSA6IDApIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBzdHJpY3QgY29u
dGV4dCwgdGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIG11c3Qgc2F5IGl0IHdhcyBzdHJpY3QgdG9v
LgotICAgICAgICBBU1NFUlQoIXN0cmljdE1vZGUoKSB8fCBjYWNoZWRJbmZvLT5zdHJpY3RNb2Rl
KTsKLSAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KGNhY2hlZEluZm8t
PnN0cmljdE1vZGUpOwotCi0gICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGdW5jdGlvbklu
Zm8oY2FjaGVkSW5mbyk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2Nv
cGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKLQotICAgICAgICBjbG9z
ZUJyYWNlUG9zID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVBvczsKLSAgICAgICAgbV90b2tlbiA9
IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VUb2tlbigpOwotICAgICAgICBtX2xleGVyLT5zZXRPZmZz
ZXQobV90b2tlbi5tX2luZm8uZW5kT2Zmc2V0KTsKLSAgICAgICAgbV9sZXhlci0+c2V0TGluZU51
bWJlcihtX3Rva2VuLm1faW5mby5saW5lKTsKLQotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIG5leHQoKTsKLQotICAgIGJvZHkgPSBwYXJzZUZ1bmN0
aW9uQm9keShjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShib2R5KTsKLSAgICBpZiAoZnVuY3Rp
b25TY29wZS0+c3RyaWN0TW9kZSgpICYmIG5hbWUpIHsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhO
YW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
bmFtZSwgIkZ1bmN0aW9uIG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3Ry
aWN0IG1vZGUiKTsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBuYW1lIiwgbmFt
ZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7Ci0gICAgfQotICAgIGNs
b3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKLSAgICAKLSAgICAvLyBDYWNo
ZSB0aGUgdG9rZW5pemVyIHN0YXRlIGFuZCB0aGUgZnVuY3Rpb24gc2NvcGUgdGhlIGZpcnN0IHRp
bWUgdGhlIGZ1bmN0aW9uIGlzIHBhcnNlZC4KLSAgICAvLyBBbnkgZnV0dXJlIHJlcGFyc2luZyBj
YW4gdGhlbiBza2lwIHRoZSBmdW5jdGlvbi4KLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1G
dW5jdGlvbkxlbmd0aFRvQ2FjaGUgPSA2NDsKLSAgICBPd25QdHI8U291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0+IG5ld0luZm87Ci0gICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gY2xvc2VCcmFjZVBvcyAt
IG9wZW5CcmFjZVBvczsKLSAgICBpZiAoVHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUg
JiYgbV9mdW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9uTGVu
Z3RoVG9DYWNoZSkgewotICAgICAgICBuZXdJbmZvID0gYWRvcHRQdHIobmV3IFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtKG1fdG9rZW4ubV9pbmZvLmxpbmUsIGNsb3NlQnJhY2VQb3MpKTsKLSAgICAg
ICAgZnVuY3Rpb25TY29wZS0+c2F2ZUZ1bmN0aW9uSW5mbyhuZXdJbmZvLmdldCgpKTsKLSAgICB9
Ci0gICAgCi0gICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxk
ZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOwotICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0Up
OwotCi0gICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVCeXRl
U2l6ZSA9IG5ld0luZm8tPmFwcHJveGltYXRlQnl0ZVNpemUoKTsKLSAgICAgICAgbV9mdW5jdGlv
bkNhY2hlLT5hZGQob3BlbkJyYWNlUG9zLCBuZXdJbmZvLnJlbGVhc2UoKSwgYXBwcm94aW1hdGVC
eXRlU2l6ZSk7Ci0gICAgfQotCi0gICAgbmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJzZXI6OnBhcnNl
RnVuY3Rpb25EZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQo
bWF0Y2goRlVOQ1RJT04pKTsKLSAgICBuZXh0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogbmFt
ZSA9IDA7Ci0gICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7Ci0gICAg
VHJlZUZ1bmN0aW9uQm9keSBib2R5ID0gMDsKLSAgICBpbnQgb3BlbkJyYWNlUG9zID0gMDsKLSAg
ICBpbnQgY2xvc2VCcmFjZVBvcyA9IDA7Ci0gICAgaW50IGJvZHlTdGFydExpbmUgPSAwOwotICAg
IGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5lZWRzTmFtZSwgdHJ1ZT4o
Y29udGV4dCwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNl
UG9zLCBib2R5U3RhcnRMaW5lKSkpOwotICAgIGZhaWxJZkZhbHNlKG5hbWUpOwotICAgIGZhaWxJ
ZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUpKTsKLSAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJh
Y2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwotfQotCi1z
dHJ1Y3QgTGFiZWxJbmZvIHsKLSAgICBMYWJlbEluZm8oY29uc3QgSWRlbnRpZmllciogaWRlbnQs
IGludCBzdGFydCwgaW50IGVuZCkKLSAgICAgICAgOiBtX2lkZW50KGlkZW50KQotICAgICAgICAs
IG1fc3RhcnQoc3RhcnQpCi0gICAgICAgICwgbV9lbmQoZW5kKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBtX2lkZW50OwotICAgIGludCBtX3N0YXJ0OwotICAgIGludCBt
X2VuZDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBK
U1BhcnNlcjo6cGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChUcmVlQnVpbGRlciYgY29u
dGV4dCkKLXsKLQotICAgIC8qIEV4cHJlc3Npb24gYW5kIExhYmVsIHN0YXRlbWVudHMgYXJlIGFt
YmlndW91cyBhdCBMTCgxKSwgc28gd2UgaGF2ZSBhCi0gICAgICogc3BlY2lhbCBjYXNlIHRoYXQg
bG9va3MgZm9yIGEgY29sb24gYXMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dC4KLSAg
ICAgKi8KLSAgICBWZWN0b3I8TGFiZWxJbmZvPiBsYWJlbHM7Ci0KLSAgICBkbyB7Ci0gICAgICAg
IGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAgaW50IHN0YXJ0TGluZSA9IHRva2Vu
TGluZSgpOwotICAgICAgICBpZiAoIW5leHRUb2tlbklzQ29sb24oKSkgewotICAgICAgICAgICAg
Ly8gSWYgd2UgaGl0IHRoaXMgcGF0aCB3ZSdyZSBtYWtpbmcgYSBleHByZXNzaW9uIHN0YXRlbWVu
dCwgd2hpY2gKLSAgICAgICAgICAgIC8vIGJ5IGRlZmluaXRpb24gY2FuJ3QgbWFrZSB1c2Ugb2Yg
Y29udGludWUvYnJlYWsgc28gd2UgY2FuIGp1c3QKLSAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkg
bGFiZWxzIHdlIG1pZ2h0IGhhdmUgYWNjdW11bGF0ZWQuCi0gICAgICAgICAgICBUcmVlRXhwcmVz
c2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAg
ZmFpbElmRmFsc2UoZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShhdXRvU2Vt
aUNvbG9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVu
dChleHByZXNzaW9uLCBzdGFydExpbmUsIG1fbGFzdExpbmUpOwotICAgICAgICB9Ci0gICAgICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAg
IGludCBlbmQgPSB0b2tlbkVuZCgpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGNvbnN1bWVP
ckZhaWwoQ09MT04pOwotICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewot
ICAgICAgICAgICAgLy8gVGhpcyBpcyBPKE5eMikgb3ZlciB0aGUgY3VycmVudCBsaXN0IG9mIGNv
bnNlY3V0aXZlIGxhYmVscywgYnV0IEkKLSAgICAgICAgICAgIC8vIGhhdmUgbmV2ZXIgc2VlbiBt
b3JlIHRoYW4gb25lIGxhYmVsIGluIGEgcm93IGluIHRoZSByZWFsIHdvcmxkLgotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAg
ICAgICAgZmFpbElmVHJ1ZShpZGVudC0+aW1wbCgpID09IGxhYmVsc1tpXS5tX2lkZW50LT5pbXBs
KCkpOwotICAgICAgICAgICAgZmFpbElmVHJ1ZShnZXRMYWJlbChpZGVudCkpOwotICAgICAgICAg
ICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8oaWRlbnQsIHN0YXJ0LCBlbmQpKTsKLSAgICAgICAg
fQotICAgIH0gd2hpbGUgKG1hdGNoKElERU5UKSk7Ci0gICAgYm9vbCBpc0xvb3AgPSBmYWxzZTsK
LSAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgY2FzZSBGT1I6Ci0gICAgY2FzZSBX
SElMRToKLSAgICBjYXNlIERPOgotICAgICAgICBpc0xvb3AgPSB0cnVlOwotICAgICAgICBicmVh
azsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjb25zdCBJZGVu
dGlmaWVyKiB1bnVzZWQgPSAwOwotICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKQotICAg
ICAgICAgICAgcHVzaExhYmVsKGxhYmVsc1tpXS5tX2lkZW50LCBpc0xvb3ApOwotICAgIH0KLSAg
ICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNl
ZCk7Ci0gICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBwb3BMYWJl
bCgpOwotICAgIH0KLSAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IExhYmVsSW5m
byYgaW5mbyA9IGxhYmVsc1tsYWJlbHMuc2l6ZSgpIC0gaSAtIDFdOwotICAgICAgICBzdGF0ZW1l
bnQgPSBjb250ZXh0LmNyZWF0ZUxhYmVsU3RhdGVtZW50KGluZm8ubV9pZGVudCwgc3RhdGVtZW50
LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQpOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGVtZW50
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgSlNQYXJz
ZXI6OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAg
ICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgVHJlZUV4cHJlc3Npb24gZXhwcmVz
c2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShleHByZXNz
aW9uKTsKLSAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQoZXhwcmVzc2lvbiwgc3RhcnRMaW5lLCBtX2xhc3RMaW5l
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IEpTUGFy
c2VyOjpwYXJzZUlmU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIEFTU0VS
VChtYXRjaChJRikpOwotCi0gICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7Ci0gICAgbmV4dCgp
OwotCi0gICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOwotCi0gICAgVHJlZUV4cHJlc3Npb24g
Y29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKGNv
bmRpdGlvbik7Ci0gICAgaW50IGVuZCA9IHRva2VuTGluZSgpOwotICAgIGNvbnN1bWVPckZhaWwo
Q0xPU0VQQVJFTik7Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwotICAgIFRy
ZWVTdGF0ZW1lbnQgdHJ1ZUJsb2NrID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsK
LSAgICBmYWlsSWZGYWxzZSh0cnVlQmxvY2spOwotCi0gICAgaWYgKCFtYXRjaChFTFNFKSkKLSAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlSWZTdGF0ZW1lbnQoY29uZGl0aW9uLCB0cnVlQmxv
Y2ssIHN0YXJ0LCBlbmQpOwotICAgIAotICAgIFZlY3RvcjxUcmVlRXhwcmVzc2lvbj4gZXhwclN0
YWNrOwotICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IHBvc1N0YWNrOwotICAgIFZlY3RvcjxU
cmVlU3RhdGVtZW50PiBzdGF0ZW1lbnRTdGFjazsKLSAgICBib29sIHRyYWlsaW5nRWxzZSA9IGZh
bHNlOwotICAgIGRvIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBpZiAoIW1hdGNoKElGKSkg
ewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKLSAgICAgICAgICAg
IFRyZWVTdGF0ZW1lbnQgYmxvY2sgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOwot
ICAgICAgICAgICAgZmFpbElmRmFsc2UoYmxvY2spOwotICAgICAgICAgICAgc3RhdGVtZW50U3Rh
Y2suYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgICAgIHRyYWlsaW5nRWxzZSA9IHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW5uZXJTdGFydCA9IHRva2Vu
TGluZSgpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdW1lT3JGYWls
KE9QRU5QQVJFTik7Ci0gICAgICAgIAotICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbm5lckNvbmRp
dGlvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFsc2UoaW5u
ZXJDb25kaXRpb24pOwotICAgICAgICBpbnQgaW5uZXJFbmQgPSB0b2tlbkxpbmUoKTsKLSAgICAg
ICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciog
dW51c2VkID0gMDsKLSAgICAgICAgVHJlZVN0YXRlbWVudCBpbm5lclRydWVCbG9jayA9IHBhcnNl
U3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKGlubmVyVHJ1
ZUJsb2NrKTsgICAgIAotICAgICAgICBleHByU3RhY2suYXBwZW5kKGlubmVyQ29uZGl0aW9uKTsK
LSAgICAgICAgcG9zU3RhY2suYXBwZW5kKG1ha2VfcGFpcihpbm5lclN0YXJ0LCBpbm5lckVuZCkp
OwotICAgICAgICBzdGF0ZW1lbnRTdGFjay5hcHBlbmQoaW5uZXJUcnVlQmxvY2spOwotICAgIH0g
d2hpbGUgKG1hdGNoKEVMU0UpKTsKLQotICAgIGlmICghdHJhaWxpbmdFbHNlKSB7Ci0gICAgICAg
IFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IGV4cHJTdGFjay5sYXN0KCk7Ci0gICAgICAgIGV4
cHJTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIFRyZWVTdGF0ZW1lbnQgdHJ1ZUJsb2NrID0g
c3RhdGVtZW50U3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZW1lbnRTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgIHBhaXI8aW50LCBpbnQ+IHBvcyA9IHBvc1N0YWNrLmxhc3QoKTsKLSAgICAg
ICAgcG9zU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBzdGF0ZW1lbnRTdGFjay5hcHBlbmQo
Y29udGV4dC5jcmVhdGVJZlN0YXRlbWVudChjb25kaXRpb24sIHRydWVCbG9jaywgcG9zLmZpcnN0
LCBwb3Muc2Vjb25kKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFleHByU3RhY2suaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IGV4cHJTdGFjay5sYXN0KCk7
Ci0gICAgICAgIGV4cHJTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIFRyZWVTdGF0ZW1lbnQg
ZmFsc2VCbG9jayA9IHN0YXRlbWVudFN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGVtZW50U3Rh
Y2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBUcmVlU3RhdGVtZW50IHRydWVCbG9jayA9IHN0YXRl
bWVudFN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGVtZW50U3RhY2sucmVtb3ZlTGFzdCgpOwot
ICAgICAgICBwYWlyPGludCwgaW50PiBwb3MgPSBwb3NTdGFjay5sYXN0KCk7Ci0gICAgICAgIHBv
c1N0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgc3RhdGVtZW50U3RhY2suYXBwZW5kKGNvbnRl
eHQuY3JlYXRlSWZTdGF0ZW1lbnQoY29uZGl0aW9uLCB0cnVlQmxvY2ssIGZhbHNlQmxvY2ssIHBv
cy5maXJzdCwgcG9zLnNlY29uZCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVJZlN0YXRlbWVudChjb25kaXRpb24sIHRydWVCbG9jaywgc3RhdGVtZW50U3RhY2subGFz
dCgpLCBzdGFydCwgZW5kKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBKU1BhcnNlcjo6cGFyc2VFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0
KQotewotICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBUcmVlRXhwcmVzc2lvbiBub2Rl
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShu
b2RlKTsKLSAgICBpZiAoIW1hdGNoKENPTU1BKSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
bmV4dCgpOwotICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgIG1fbm9uTEhT
Q291bnQrKzsKLSAgICBUcmVlRXhwcmVzc2lvbiByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UocmlnaHQpOwotICAgIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpDb21tYSBjb21tYU5vZGUgPSBjb250ZXh0LmNyZWF0ZUNvbW1hRXhwcihub2Rl
LCByaWdodCk7Ci0gICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgewotICAgICAgICBuZXh0KFRyZWVC
dWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKLSAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBmYWlsSWZGYWxzZShyaWdodCk7Ci0gICAg
ICAgIGNvbnRleHQuYXBwZW5kVG9Db21tYShjb21tYU5vZGUsIHJpZ2h0KTsKLSAgICB9Ci0gICAg
cmV0dXJuIGNvbW1hTm9kZTsKLX0KLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQotewotICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBpbnQg
c3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGluaXRpYWxBc3NpZ25tZW50Q291bnQgPSBt
X2Fzc2lnbm1lbnRDb3VudDsKLSAgICBpbnQgaW5pdGlhbE5vbkxIU0NvdW50ID0gbV9ub25MSFND
b3VudDsKLSAgICBUcmVlRXhwcmVzc2lvbiBsaHMgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lv
bihjb250ZXh0KTsKLSAgICBmYWlsSWZGYWxzZShsaHMpOwotICAgIGlmIChpbml0aWFsTm9uTEhT
Q291bnQgIT0gbV9ub25MSFNDb3VudCkKLSAgICAgICAgcmV0dXJuIGxoczsKLQotICAgIGludCBh
c3NpZ25tZW50U3RhY2sgPSAwOwotICAgIE9wZXJhdG9yIG9wOwotICAgIGJvb2wgaGFkQXNzaWdu
bWVudCA9IGZhbHNlOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN3aXRjaCAobV90b2tl
bi5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBFUVVBTDogb3AgPSBPcEVxdWFsOyBicmVhazsKLSAg
ICAgICAgY2FzZSBQTFVTRVFVQUw6IG9wID0gT3BQbHVzRXE7IGJyZWFrOwotICAgICAgICBjYXNl
IE1JTlVTRVFVQUw6IG9wID0gT3BNaW51c0VxOyBicmVhazsKLSAgICAgICAgY2FzZSBNVUxURVFV
QUw6IG9wID0gT3BNdWx0RXE7IGJyZWFrOwotICAgICAgICBjYXNlIERJVkVRVUFMOiBvcCA9IE9w
RGl2RXE7IGJyZWFrOwotICAgICAgICBjYXNlIExTSElGVEVRVUFMOiBvcCA9IE9wTFNoaWZ0OyBi
cmVhazsKLSAgICAgICAgY2FzZSBSU0hJRlRFUVVBTDogb3AgPSBPcFJTaGlmdDsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgVVJTSElGVEVRVUFMOiBvcCA9IE9wVVJTaGlmdDsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQU5ERVFVQUw6IG9wID0gT3BBbmRFcTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE9SRVFV
QUw6IG9wID0gT3BYT3JFcTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgT1JFUVVBTDogb3AgPSBPcE9y
RXE7IGJyZWFrOwotICAgICAgICBjYXNlIE1PREVRVUFMOiBvcCA9IE9wTW9kRXE7IGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgIGhhZEFzc2lnbm1lbnQg
PSB0cnVlOwotICAgICAgICBjb250ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3NpZ25tZW50
U3RhY2ssIGxocywgc3RhcnQsIHRva2VuU3RhcnQoKSwgbV9hc3NpZ25tZW50Q291bnQsIG9wKTsK
LSAgICAgICAgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIG1fYXNzaWdubWVudENvdW50
Kys7Ci0gICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAgICAg
ICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fbGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29s
dmUobGhzKSkgewotICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX2xhc3RJZGVudGlmaWVyLCAiJ2V2
YWwnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgZmFp
bElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5h
cmd1bWVudHMgPT0gKm1fbGFzdElkZW50aWZpZXIsICInYXJndW1lbnRzJyBjYW5ub3QgYmUgbW9k
aWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgICAgIGRlY2xhcmVXcml0ZShtX2xhc3RJ
ZGVudGlmaWVyKTsKLSAgICAgICAgICAgIG1fbGFzdElkZW50aWZpZXIgPSAwOwotICAgICAgICB9
Ci0gICAgICAgIGxocyA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGNvbnRleHQpOwotICAg
ICAgICBmYWlsSWZGYWxzZShsaHMpOwotICAgICAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9
IG1fbm9uTEhTQ291bnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci1lbmQ6Ci0gICAgaWYg
KGhhZEFzc2lnbm1lbnQpCi0gICAgICAgIG1fbm9uTEhTQ291bnQrKzsKLQotICAgIGlmICghVHJl
ZUJ1aWxkZXI6OkNyZWF0ZXNBU1QpCi0gICAgICAgIHJldHVybiBsaHM7Ci0KLSAgICB3aGlsZSAo
YXNzaWdubWVudFN0YWNrKQotICAgICAgICBsaHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQo
YXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVu
dENvdW50LCBsYXN0VG9rZW5FbmQoKSk7Ci0KLSAgICByZXR1cm4gbGhzOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZUNvbmRp
dGlvbmFsRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKLXsKLSAgICBUcmVlRXhwcmVz
c2lvbiBjb25kID0gcGFyc2VCaW5hcnlFeHByZXNzaW9uKGNvbnRleHQpOwotICAgIGZhaWxJZkZh
bHNlKGNvbmQpOwotICAgIGlmICghbWF0Y2goUVVFU1RJT04pKQotICAgICAgICByZXR1cm4gY29u
ZDsKLSAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICBtX25vbkxIU0NvdW50
Kys7Ci0gICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0gICAgVHJlZUV4
cHJlc3Npb24gbGhzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBj
b25zdW1lT3JGYWlsV2l0aEZsYWdzKENPTE9OLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5n
cyk7Ci0KLSAgICBUcmVlRXhwcmVzc2lvbiByaHMgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKHJocyk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlQ29uZGl0aW9uYWxFeHByKGNvbmQsIGxocywgcmhzKTsKLX0KLQotQUxXQVlTX0lOTElORSBz
dGF0aWMgYm9vbCBpc1VuYXJ5T3AoSlNUb2tlblR5cGUgdG9rZW4pCi17Ci0gICAgcmV0dXJuIHRv
a2VuICYgVW5hcnlPcFRva2VuRmxhZzsKLX0KLQotaW50IEpTUGFyc2VyOjppc0JpbmFyeU9wZXJh
dG9yKEpTVG9rZW5UeXBlIHRva2VuKQotewotICAgIGlmIChtX2FsbG93c0luKQotICAgICAgICBy
ZXR1cm4gdG9rZW4gJiAoQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrIDw8IEJpbmFyeU9wVG9r
ZW5BbGxvd3NJblByZWNlZGVuY2VBZGRpdGlvbmFsU2hpZnQpOwotICAgIHJldHVybiB0b2tlbiAm
IEJpbmFyeU9wVG9rZW5QcmVjZWRlbmNlTWFzazsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBKU1BhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uKFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQotewotCi0gICAgaW50IG9wZXJhbmRTdGFja0RlcHRoID0gMDsK
LSAgICBpbnQgb3BlcmF0b3JTdGFja0RlcHRoID0gMDsKLSAgICB0eXBlbmFtZSBUcmVlQnVpbGRl
cjo6QmluYXJ5RXhwckNvbnRleHQgYmluYXJ5RXhwckNvbnRleHQoY29udGV4dCk7Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgaW50IGV4cHJTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAg
ICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50OwotICAgICAgICBU
cmVlRXhwcmVzc2lvbiBjdXJyZW50ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oY29udGV4dCk7Ci0g
ICAgICAgIGZhaWxJZkZhbHNlKGN1cnJlbnQpOwotCi0gICAgICAgIGNvbnRleHQuYXBwZW5kQmlu
YXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0YWNrRGVwdGgsIGN1cnJlbnQsIGV4cHJTdGFydCwg
bGFzdFRva2VuRW5kKCksIGxhc3RUb2tlbkVuZCgpLCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9h
c3NpZ25tZW50Q291bnQpOwotICAgICAgICBpbnQgcHJlY2VkZW5jZSA9IGlzQmluYXJ5T3BlcmF0
b3IobV90b2tlbi5tX3R5cGUpOwotICAgICAgICBpZiAoIXByZWNlZGVuY2UpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAg
IG1fbm9uTEhTQ291bnQrKzsKLSAgICAgICAgaW50IG9wZXJhdG9yVG9rZW4gPSBtX3Rva2VuLm1f
dHlwZTsKLSAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0KLSAg
ICAgICAgd2hpbGUgKG9wZXJhdG9yU3RhY2tEZXB0aCAmJiAgY29udGV4dC5vcGVyYXRvclN0YWNr
SGFzSGlnaGVyUHJlY2VkZW5jZShvcGVyYXRvclN0YWNrRGVwdGgsIHByZWNlZGVuY2UpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQob3BlcmFuZFN0YWNrRGVwdGggPiAxKTsKLQotICAgICAgICAgICAg
dHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgcmhzID0gY29udGV4dC5nZXRGcm9t
T3BlcmFuZFN0YWNrKC0xKTsKLSAgICAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5h
cnlPcGVyYW5kIGxocyA9IGNvbnRleHQuZ2V0RnJvbU9wZXJhbmRTdGFjaygtMik7Ci0gICAgICAg
ICAgICBjb250ZXh0LnNocmlua09wZXJhbmRTdGFja0J5KG9wZXJhbmRTdGFja0RlcHRoLCAyKTsK
LSAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5T3BlcmF0aW9uKG9wZXJhbmRTdGFja0Rl
cHRoLCBvcGVyYXRvclN0YWNrRGVwdGgsIGxocywgcmhzKTsKLSAgICAgICAgICAgIGNvbnRleHQu
b3BlcmF0b3JTdGFja1BvcChvcGVyYXRvclN0YWNrRGVwdGgpOwotICAgICAgICB9Ci0gICAgICAg
IGNvbnRleHQub3BlcmF0b3JTdGFja0FwcGVuZChvcGVyYXRvclN0YWNrRGVwdGgsIG9wZXJhdG9y
VG9rZW4sIHByZWNlZGVuY2UpOwotICAgIH0KLSAgICB3aGlsZSAob3BlcmF0b3JTdGFja0RlcHRo
KSB7Ci0gICAgICAgIEFTU0VSVChvcGVyYW5kU3RhY2tEZXB0aCA+IDEpOwotCi0gICAgICAgIHR5
cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlPcGVyYW5kIHJocyA9IGNvbnRleHQuZ2V0RnJvbU9w
ZXJhbmRTdGFjaygtMSk7Ci0gICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlPcGVy
YW5kIGxocyA9IGNvbnRleHQuZ2V0RnJvbU9wZXJhbmRTdGFjaygtMik7Ci0gICAgICAgIGNvbnRl
eHQuc2hyaW5rT3BlcmFuZFN0YWNrQnkob3BlcmFuZFN0YWNrRGVwdGgsIDIpOwotICAgICAgICBj
b250ZXh0LmFwcGVuZEJpbmFyeU9wZXJhdGlvbihvcGVyYW5kU3RhY2tEZXB0aCwgb3BlcmF0b3JT
dGFja0RlcHRoLCBsaHMsIHJocyk7Ci0gICAgICAgIGNvbnRleHQub3BlcmF0b3JTdGFja1BvcChv
cGVyYXRvclN0YWNrRGVwdGgpOwotICAgIH0KLSAgICByZXR1cm4gY29udGV4dC5wb3BPcGVyYW5k
U3RhY2sob3BlcmFuZFN0YWNrRGVwdGgpOwotfQotCi0KLXRlbXBsYXRlIDxib29sIGNvbXBsZXRl
LCBjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IEpTUGFyc2VyOjpwYXJzZVByb3BlcnR5
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQotewotICAgIGJvb2wgd2FzSWRlbnQgPSBmYWxzZTsKLSAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0gICAgbmFtZWRQcm9wZXJ0eToKLSAgICBjYXNl
IElERU5UOgotICAgICAgICB3YXNJZGVudCA9IHRydWU7Ci0gICAgY2FzZSBTVFJJTkc6IHsKLSAg
ICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAg
ICAgICAgaWYgKGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0
YS0+cHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPnNldCkpKQotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6Okln
bm9yZVJlc2VydmVkV29yZHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250
QnVpbGRLZXl3b3Jkcyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKENPTE9OKSkgewotICAgICAgICAg
ICAgbmV4dCgpOwotICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShub2RlKTsK
LSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZVByb3BlcnR5PGNvbXBs
ZXRlPihpZGVudCwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZmFpbElmRmFsc2Uod2FzSWRlbnQpOwotICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGFjY2Vzc29yTmFtZSA9IDA7Ci0gICAgICAgIFRy
ZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAwOwotICAgICAgICBUcmVlRnVuY3Rp
b25Cb2R5IGJvZHkgPSAwOwotICAgICAgICBpbnQgb3BlbkJyYWNlUG9zID0gMDsKLSAgICAgICAg
aW50IGNsb3NlQnJhY2VQb3MgPSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0g
ICAgICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlOwotICAgICAgICBpZiAoKmlkZW50ID09IG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0KQotICAgICAgICAgICAgdHlwZSA9IFByb3Bl
cnR5Tm9kZTo6R2V0dGVyOwotICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5zZXQpCi0gICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpT
ZXR0ZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTmVlZHNOYW1lLCBmYWxzZT4oY29udGV4
dCwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJh
Y2VQb3MsIGJvZHlTdGFydExpbmUpKSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRl
IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KHR5cGUsIGFjY2Vzc29yTmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3Rh
cnRMaW5lLCBtX2xhc3RMaW5lKTsKLSAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKLSAgICAgICAg
ZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwotICAgICAg
ICBuZXh0KCk7Ci0gICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04pOwotICAgICAgICBUcmVlRXhw
cmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAg
ICAgZmFpbElmRmFsc2Uobm9kZSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNy
ZWF0ZVByb3BlcnR5PGNvbXBsZXRlPihtX2dsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgbm9kZSwg
UHJvcGVydHlOb2RlOjpDb25zdGFudCk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZh
aWxJZkZhbHNlKG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZyk7Ci0gICAgICAgIGdv
dG8gbmFtZWRQcm9wZXJ0eTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3Npb24gSlNQYXJzZXI6OnBhcnNlT2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRl
ciYgY29udGV4dCkKLXsKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5pbnRW
YWx1ZTsKLSAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5CUkFDRSwgVHJlZUJ1aWxkZXI6
OkRvbnRCdWlsZFN0cmluZ3MpOwotCi0gICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7Ci0gICAg
ICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0ZXJhbCgp
OwotICAgIH0KLQotICAgIFRyZWVQcm9wZXJ0eSBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHk8ZmFs
c2U+KGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKLSAgICBpZiAoIW1fc3lu
dGF4QWxyZWFkeVZhbGlkYXRlZCAmJiBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICE9IFByb3Bl
cnR5Tm9kZTo6Q29uc3RhbnQpIHsKLSAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KTsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VTdHJpY3RPYmplY3RM
aXRlcmFsKGNvbnRleHQpOwotICAgIH0KLSAgICBUcmVlUHJvcGVydHlMaXN0IHByb3BlcnR5TGlz
dCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KHByb3BlcnR5KTsKLSAgICBUcmVlUHJvcGVy
dHlMaXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7Ci0gICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgewot
ICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKLSAgICAgICAgLy8g
YWxsb3cgZXh0cmEgY29tbWEsIHNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTM5Ci0gICAgICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHk8ZmFsc2U+KGNvbnRleHQpOwot
ICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7Ci0gICAgICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkICYmIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgIT0gUHJvcGVydHlOb2Rl
OjpDb25zdGFudCkgewotICAgICAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KHN0YXJ0T2Zmc2V0
KTsKLSAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0cmljdE9i
amVjdExpdGVyYWwoY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGFpbCA9IGNvbnRleHQu
Y3JlYXRlUHJvcGVydHlMaXN0KHByb3BlcnR5LCB0YWlsKTsKLSAgICB9Ci0KLSAgICBjb25zdW1l
T3JGYWlsKENMT1NFQlJBQ0UpOwotCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlT2JqZWN0TGl0
ZXJhbChwcm9wZXJ0eUxpc3QpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCi17Ci0gICAgY29uc3VtZU9yRmFpbChPUEVOQlJBQ0UpOwotICAgIAotICAg
IGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwoKTsKLSAgICB9Ci0gICAgCi0gICAgVHJlZVBy
b3BlcnR5IHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eTx0cnVlPihjb250ZXh0KTsKLSAgICBmYWls
SWZGYWxzZShwcm9wZXJ0eSk7Ci0gICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJp
bmdJbXBsPiwgdW5zaWduZWQsIElkZW50aWZpZXJSZXBIYXNoPiBPYmplY3RWYWxpZGF0aW9uTWFw
OwotICAgIE9iamVjdFZhbGlkYXRpb25NYXAgb2JqZWN0VmFsaWRhdG9yOwotICAgIC8vIEFkZCB0
aGUgZmlyc3QgcHJvcGVydHkKLSAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkKLSAg
ICAgICAgb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwo
KSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7Ci0gICAgCi0gICAgVHJlZVByb3BlcnR5TGlz
dCBwcm9wZXJ0eUxpc3QgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChwcm9wZXJ0eSk7Ci0g
ICAgVHJlZVByb3BlcnR5TGlzdCB0YWlsID0gcHJvcGVydHlMaXN0OwotICAgIHdoaWxlIChtYXRj
aChDT01NQSkpIHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICAvLyBhbGxvdyBleHRyYSBjb21t
YSwgc2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MzkKLSAgICAg
ICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBy
b3BlcnR5ID0gcGFyc2VQcm9wZXJ0eTx0cnVlPihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFs
c2UocHJvcGVydHkpOwotICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewot
ICAgICAgICAgICAgc3RkOjpwYWlyPE9iamVjdFZhbGlkYXRpb25NYXA6Oml0ZXJhdG9yLCBib29s
PiBwcm9wZXJ0eUVudHJ5SXRlciA9IG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1l
KHByb3BlcnR5KS5pbXBsKCksIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOwotICAgICAgICAg
ICAgaWYgKCFwcm9wZXJ0eUVudHJ5SXRlci5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBmYWls
SWZUcnVlKHByb3BlcnR5RW50cnlJdGVyLmZpcnN0LT5zZWNvbmQgPT0gUHJvcGVydHlOb2RlOjpD
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnlJdGVyLmZpcnN0
LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnlJdGVyLmZpcnN0LT5zZWNv
bmQgfD0gY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHksIHRh
aWwpOwotICAgIH0KLSAgICAKLSAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0UpOwotICAgIAot
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwocHJvcGVydHlMaXN0KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBKU1BhcnNlcjo6
cGFyc2VBcnJheUxpdGVyYWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgY29uc3VtZU9y
RmFpbFdpdGhGbGFncyhPUEVOQlJBQ0tFVCwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3Mp
OwotCi0gICAgaW50IGVsaXNpb25zID0gMDsKLSAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7Ci0g
ICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAgICAgICBlbGlz
aW9ucysrOwotICAgIH0KLSAgICBpZiAobWF0Y2goQ0xPU0VCUkFDS0VUKSkgewotICAgICAgICBu
ZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQXJyYXkoZWxpc2lvbnMpOwotICAgIH0KLQotICAgIFRyZWVFeHByZXNzaW9uIGVs
ZW0gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgIGZhaWxJZkZhbHNl
KGVsZW0pOwotICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpFbGVtZW50TGlzdCBlbGVtZW50TGlz
dCA9IGNvbnRleHQuY3JlYXRlRWxlbWVudExpc3QoZWxpc2lvbnMsIGVsZW0pOwotICAgIHR5cGVu
YW1lIFRyZWVCdWlsZGVyOjpFbGVtZW50TGlzdCB0YWlsID0gZWxlbWVudExpc3Q7Ci0gICAgZWxp
c2lvbnMgPSAwOwotICAgIHdoaWxlIChtYXRjaChDT01NQSkpIHsKLSAgICAgICAgbmV4dChUcmVl
QnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7Ci0gICAgICAgIGVsaXNpb25zID0gMDsKLQotICAg
ICAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAg
ICAgICBlbGlzaW9ucysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoKENMT1NFQlJB
Q0tFVCkpIHsKLSAgICAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3Mp
OwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJyYXkoZWxpc2lvbnMsIGVsZW1l
bnRMaXN0KTsKLSAgICAgICAgfQotICAgICAgICBUcmVlRXhwcmVzc2lvbiBlbGVtID0gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFsc2UoZWxlbSk7
Ci0gICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnRMaXN0KHRhaWwsIGVsaXNpb25z
LCBlbGVtKTsKLSAgICB9Ci0KLSAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7Ci0KLSAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJheShlbGVtZW50TGlzdCk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gSlNQYXJzZXI6OnBhcnNlUHJpbWFy
eUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgc3dpdGNoIChtX3Rva2Vu
Lm1fdHlwZSkgewotICAgIGNhc2UgT1BFTkJSQUNFOgotICAgICAgICBpZiAoc3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsK
LSAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKLSAgICBjYXNlIE9Q
RU5CUkFDS0VUOgotICAgICAgICByZXR1cm4gcGFyc2VBcnJheUxpdGVyYWwoY29udGV4dCk7Ci0g
ICAgY2FzZSBPUEVOUEFSRU46IHsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBpbnQgb2xkTm9u
TEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwotICAgICAgICBUcmVlRXhwcmVzc2lvbiByZXN1bHQg
PSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgIG1fbm9uTEhTQ291bnQgPSBvbGRO
b25MSFNDb3VudDsKLSAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKLQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjYXNlIFRISVNUT0tFTjogewotICAgICAgICBu
ZXh0KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRoaXNFeHByKCk7Ci0gICAgfQotICAgIGNh
c2UgSURFTlQ6IHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBu
ZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCk7Ci0gICAgICAgIG1fbGFzdElk
ZW50aWZpZXIgPSBpZGVudDsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmVzb2x2ZShp
ZGVudCwgc3RhcnQpOwotICAgIH0KLSAgICBjYXNlIFNUUklORzogewotICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBuZXh0KCk7
Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVN0cmluZyhpZGVudCk7Ci0gICAgfQotICAg
IGNhc2UgTlVNQkVSOiB7Ci0gICAgICAgIGRvdWJsZSBkID0gbV90b2tlbi5tX2RhdGEuZG91Ymxl
VmFsdWU7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlTnVt
YmVyRXhwcihkKTsKLSAgICB9Ci0gICAgY2FzZSBOVUxMVE9LRU46IHsKLSAgICAgICAgbmV4dCgp
OwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVOdWxsKCk7Ci0gICAgfQotICAgIGNhc2Ug
VFJVRVRPS0VOOiB7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlQm9vbGVhbih0cnVlKTsKLSAgICB9Ci0gICAgY2FzZSBGQUxTRVRPS0VOOiB7Ci0gICAgICAg
IG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQm9vbGVhbihmYWxzZSk7Ci0g
ICAgfQotICAgIGNhc2UgRElWRVFVQUw6Ci0gICAgY2FzZSBESVZJREU6IHsKLSAgICAgICAgLyog
cmVnZXhwICovCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHBhdHRlcm47Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGZsYWdzOwotICAgICAgICBpZiAobWF0Y2goRElWRVFVQUwpKQotICAg
ICAgICAgICAgZmFpbElmRmFsc2UobV9sZXhlci0+c2NhblJlZ0V4cChwYXR0ZXJuLCBmbGFncywg
Jz0nKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1fbGV4ZXItPnNj
YW5SZWdFeHAocGF0dGVybiwgZmxhZ3MpKTsKLQotICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0
YXJ0KCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24gcmUgPSBjb250
ZXh0LmNyZWF0ZVJlZ0V4cCgqcGF0dGVybiwgKmZsYWdzLCBzdGFydCk7Ci0gICAgICAgIGlmICgh
cmUpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHlhcnJFcnJvck1zZyA9IFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4tPnVzdHJpbmcoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZXJyb3JN
ZXNzYWdlLmlzTnVsbCgpKTsKLSAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSh5YXJyRXJyb3JN
c2cpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZTsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgZmFpbCgpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlQXJndW1lbnRzIEpTUGFyc2VyOjpwYXJzZUFyZ3VtZW50cyhUcmVlQnVpbGRlciYgY29u
dGV4dCkKLXsKLSAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5QQVJFTiwgVHJlZUJ1aWxk
ZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAgIGlmIChtYXRjaChDTE9TRVBBUkVOKSkgewotICAg
ICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsKLSAgICAgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlQXJndW1lbnRzKCk7Ci0gICAgfQotICAgIFRyZWVFeHByZXNzaW9uIGZp
cnN0QXJnID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICBmYWlsSWZG
YWxzZShmaXJzdEFyZyk7Ci0KLSAgICBUcmVlQXJndW1lbnRzTGlzdCBhcmdMaXN0ID0gY29udGV4
dC5jcmVhdGVBcmd1bWVudHNMaXN0KGZpcnN0QXJnKTsKLSAgICBUcmVlQXJndW1lbnRzTGlzdCB0
YWlsID0gYXJnTGlzdDsKLSAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7Ci0gICAgICAgIG5leHQo
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwotICAgICAgICBUcmVlRXhwcmVzc2lvbiBh
cmcgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBmYWlsSWZG
YWxzZShhcmcpOwotICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVBcmd1bWVudHNMaXN0KHRh
aWwsIGFyZyk7Ci0gICAgfQotICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7Ci0gICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlQXJndW1lbnRzKGFyZ0xpc3QpOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIEpTUGFyc2VyOjpwYXJzZU1lbWJlckV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgVHJlZUV4cHJlc3Npb24gYmFzZSA9
IDA7Ci0gICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBleHByZXNzaW9uU3Rh
cnQgPSBzdGFydDsKLSAgICBpbnQgbmV3Q291bnQgPSAwOwotICAgIHdoaWxlIChtYXRjaChORVcp
KSB7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgbmV3Q291bnQrKzsKLSAgICB9Ci0KLSAgICBp
ZiAobWF0Y2goRlVOQ1RJT04pKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAm
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAgVHJl
ZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlv
bkJvZHkgYm9keSA9IDA7Ci0gICAgICAgIGludCBvcGVuQnJhY2VQb3MgPSAwOwotICAgICAgICBp
bnQgY2xvc2VCcmFjZVBvcyA9IDA7Ci0gICAgICAgIGludCBib2R5U3RhcnRMaW5lID0gMDsKLSAg
ICAgICAgbmV4dCgpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVu
Y3Rpb25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIG5hbWUsIHBhcmFtZXRlcnMsIGJv
ZHksIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSkpKTsKLSAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKG5hbWUsIGJvZHksIHBhcmFtZXRl
cnMsIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGlu
ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNv
bnRleHQpOwotCi0gICAgZmFpbElmRmFsc2UoYmFzZSk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAgICAgICBjYXNlIE9QRU5CUkFDS0VU
OiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAg
ICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgICAgICBuZXh0
KCk7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwotICAgICAg
ICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50OwotICAgICAg
ICAgICAgVHJlZUV4cHJlc3Npb24gcHJvcGVydHkgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7
Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdu
bWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVu
ZCwgdG9rZW5FbmQoKSk7Ci0gICAgICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7
Ci0gICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAg
bV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpZiAobmV3Q291bnQp
IHsKLSAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwotICAgICAgICAgICAgICAgIGlmIChtYXRj
aChPUEVOUEFSRU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleHByRW5kID0gbGFzdFRv
a2VuRW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0g
cGFyc2VBcmd1bWVudHMoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5l
d0V4cHIoYmFzZSwgYXJndW1lbnRzLCBzdGFydCwgZXhwckVuZCwgbGFzdFRva2VuRW5kKCkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVOZXdFeHByKGJhc2UsIHN0YXJ0LCBsYXN0VG9rZW5FbmQoKSk7ICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBub25MSFNDb3Vu
dCA9IG1fbm9uTEhTQ291bnQ7Ci0gICAgICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9
IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2Fs
bE5vZGUoYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxh
c3RUb2tlbkVuZCgpKTsKLSAgICAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291
bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIERPVDogewotICAgICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7
Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAg
ICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMgfCBU
cmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwotICAgICAgICAgICAgbWF0Y2hPckZhaWwo
SURFTlQpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKGJhc2Us
IG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRv
a2VuRW5kKCkpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVz
c2lvbjsKLSAgICAgICAgfQotICAgIH0KLWVuZE1lbWJlckV4cHJlc3Npb246Ci0gICAgd2hpbGUg
KG5ld0NvdW50LS0pCi0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIoYmFzZSwg
c3RhcnQsIGxhc3RUb2tlbkVuZCgpKTsKLSAgICByZXR1cm4gYmFzZTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBKU1BhcnNlcjo6cGFyc2VVbmFyeUV4
cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCi17Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxk
ZXI6OlVuYXJ5RXhwckNvbnRleHQgdW5hcnlFeHByQ29udGV4dChjb250ZXh0KTsKLSAgICBBbGxv
d0luT3ZlcnJpZGUgYWxsb3dJbk92ZXJyaWRlKHRoaXMpOwotICAgIGludCB0b2tlblN0YWNrRGVw
dGggPSAwOwotICAgIGJvb2wgbW9kaWZpZXNFeHByID0gZmFsc2U7Ci0gICAgYm9vbCByZXF1aXJl
c0xFeHByID0gZmFsc2U7Ci0gICAgd2hpbGUgKGlzVW5hcnlPcChtX3Rva2VuLm1fdHlwZSkpIHsK
LSAgICAgICAgaWYgKHN0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgc3dpdGNoIChtX3Rva2Vu
Lm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBQTFVTUExVUzoKLSAgICAgICAgICAgIGNhc2Ug
TUlOVVNNSU5VUzoKLSAgICAgICAgICAgIGNhc2UgQVVUT1BMVVNQTFVTOgotICAgICAgICAgICAg
Y2FzZSBBVVRPTUlOVVNNSU5VUzoKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHJlcXVpcmVz
TEV4cHIpOwotICAgICAgICAgICAgICAgIG1vZGlmaWVzRXhwciA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgcmVxdWlyZXNMRXhwciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERFTEVURVRPS0VOOgotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocmVx
dWlyZXNMRXhwcik7Ci0gICAgICAgICAgICAgICAgcmVxdWlyZXNMRXhwciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGZhaWxJZlRydWUocmVxdWlyZXNMRXhwcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9ub25MSFNDb3VudCsrOwotICAgICAgICBj
b250ZXh0LmFwcGVuZFVuYXJ5VG9rZW4odG9rZW5TdGFja0RlcHRoLCBtX3Rva2VuLm1fdHlwZSwg
dG9rZW5TdGFydCgpKTsKLSAgICAgICAgbmV4dCgpOwotICAgICAgICBtX25vblRyaXZpYWxFeHBy
ZXNzaW9uQ291bnQrKzsKLSAgICB9Ci0gICAgaW50IHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnQo
KTsKLSAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VNZW1iZXJFeHByZXNzaW9uKGNvbnRl
eHQpOwotICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMg
PSBmYWxzZTsKLSAgICBpZiAoc3RyaWN0TW9kZSgpICYmICFtX3N5bnRheEFscmVhZHlWYWxpZGF0
ZWQpIHsKLSAgICAgICAgaWYgKGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpKSB7Ci0gICAgICAgICAg
ICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX2xhc3RJZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+ZXZhbCB8fCAqbV9sYXN0SWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKLSAgICAgICAgfQotICAgIH0KLSAgICBmYWlsSWZU
cnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMgJiYgbW9kaWZp
ZXNFeHByLCAiJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlm
aWVkIGluIHN0cmljdCBtb2RlIik7Ci0gICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAg
IGNhc2UgUExVU1BMVVM6Ci0gICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwot
ICAgICAgICBtX25vbkxIU0NvdW50Kys7Ci0gICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0
Zml4Tm9kZShleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCB0
b2tlbkVuZCgpKTsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKLSAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1lbnRzLCAiJyIsIG1f
bGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBt
b2RlIik7Ci0gICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChyZXF1aXJlc0xFeHByKTsKLSAgICAg
ICAgbmV4dCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1JTlVTTUlOVVM6Ci0gICAgICAg
IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICBtX25vbkxIU0NvdW50Kys7
Ci0gICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShleHByLCBPcE1pbnVzTWlu
dXMsIHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCkpOwotICAgICAgICBt
X2Fzc2lnbm1lbnRDb3VudCsrOwotICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFu
ZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgp
LCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0KHJlcXVpcmVzTEV4cHIpOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGludCBlbmQg
PSBsYXN0VG9rZW5FbmQoKTsKLQotICAgIGlmICghVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QgJiYg
KG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCB8fCAhc3RyaWN0TW9kZSgpKSkKLSAgICAgICAgcmV0
dXJuIGV4cHI7Ci0KLSAgICB3aGlsZSAodG9rZW5TdGFja0RlcHRoKSB7Ci0gICAgICAgIHN3aXRj
aCAoY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0VHlwZSh0b2tlblN0YWNrRGVwdGgpKSB7Ci0g
ICAgICAgIGNhc2UgRVhDTEFNQVRJT046Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5jcmVh
dGVMb2dpY2FsTm90KGV4cHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVElM
REU6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlQml0d2lzZU5vdE5vZGUoZXhwcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNSU5VUzoKLSAgICAgICAgICAgIGV4
cHIgPSBjb250ZXh0Lm1ha2VOZWdhdGVOb2RlKGV4cHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUExVUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0LmNyZWF0ZVVuYXJ5
UGx1cyhleHByKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBMVVNQTFVTOgot
ICAgICAgICBjYXNlIEFVVE9QTFVTUExVUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1h
a2VQcmVmaXhOb2RlKGV4cHIsIE9wUGx1c1BsdXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFz
dFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEsIGVuZCk7Ci0gICAgICAg
ICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTUlOVVNNSU5VUzoKLSAgICAgICAgY2FzZSBBVVRPTUlOVVNNSU5VUzoKLSAgICAgICAgICAg
IGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGV4cHIsIE9wTWludXNNaW51cywgY29udGV4
dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0
ICsgMSwgZW5kKTsKLSAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUWVBFT0Y6Ci0gICAgICAgICAgICBleHByID0gY29udGV4
dC5tYWtlVHlwZU9mTm9kZShleHByKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFZPSURUT0tFTjoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0LmNyZWF0ZVZvaWQoZXhwcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERUxFVEVUT0tFTjoKLSAgICAgICAg
ICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShjb250ZXh0LmlzUmVzb2x2
ZShleHByKSwgIkNhbm5vdCBkZWxldGUgdW5xdWFsaWZpZWQgcHJvcGVydHkiLCBtX2xhc3RJZGVu
dGlmaWVyLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgZXhwciA9IGNv
bnRleHQubWFrZURlbGV0ZU5vZGUoZXhwciwgY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0U3Rh
cnQodG9rZW5TdGFja0RlcHRoKSwgZW5kLCBlbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSBzb21ldGhpbmcgaGFz
IGdvbmUgaG9ycmlibHkgaG9ycmlibHkgd3JvbmcKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3ViRXhwclN0YXJ0ID0gY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0
U3RhcnQodG9rZW5TdGFja0RlcHRoKTsKLSAgICAgICAgY29udGV4dC51bmFyeVRva2VuU3RhY2tS
ZW1vdmVMYXN0KHRva2VuU3RhY2tEZXB0aCk7Ci0gICAgfQotICAgIHJldHVybiBleHByOwotfQot
Ci19Ci0KLW5hbWVzcGFjZSBXVEYKLXsKLSAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVjdG9yVHJh
aXRzPEpTQzo6SlNQYXJzZXI6OlNjb3BlPiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsg
Ly8gTm90IGFsbCBTY29wZSBkYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1BhcnNlci5oCShyZXZpc2lvbiA5
ODc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSlNQYXJzZXJf
aAotI2RlZmluZSBKU1BhcnNlcl9oCi0KLSNpbmNsdWRlICJVU3RyaW5nLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7Ci1j
bGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNHbG9iYWxEYXRhOwotY2xhc3MgU291cmNlQ29kZTsK
LQotZW51bSB7Ci0gICAgVW5hcnlPcFRva2VuRmxhZyA9IDY0LAotICAgIEtleXdvcmRUb2tlbkZs
YWcgPSAxMjgsCi0gICAgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCA9IDgsCi0gICAgQmlu
YXJ5T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9uYWxTaGlmdCA9IDQsCi0gICAgQmlu
YXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrID0gMTUgPDwgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VT
aGlmdCwKLX07Ci0KLSNkZWZpbmUgQklOQVJZX09QX1BSRUNFREVOQ0UocHJlYykgKCgocHJlYykg
PDwgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCkgfCAoKHByZWMpIDw8IChCaW5hcnlPcFRv
a2VuUHJlY2VkZW5jZVNoaWZ0ICsgQmluYXJ5T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0
aW9uYWxTaGlmdCkpKQotI2RlZmluZSBJTl9PUF9QUkVDRURFTkNFKHByZWMpICgocHJlYykgPDwg
KEJpbmFyeU9wVG9rZW5QcmVjZWRlbmNlU2hpZnQgKyBCaW5hcnlPcFRva2VuQWxsb3dzSW5QcmVj
ZWRlbmNlQWRkaXRpb25hbFNoaWZ0KSkKLQotZW51bSBKU1Rva2VuVHlwZSB7Ci0gICAgTlVMTFRP
S0VOID0gS2V5d29yZFRva2VuRmxhZywKLSAgICBUUlVFVE9LRU4sCi0gICAgRkFMU0VUT0tFTiwK
LSAgICBCUkVBSywKLSAgICBDQVNFLAotICAgIERFRkFVTFQsCi0gICAgRk9SLAotICAgIE5FVywK
LSAgICBWQVIsCi0gICAgQ09OU1RUT0tFTiwKLSAgICBDT05USU5VRSwKLSAgICBGVU5DVElPTiwK
LSAgICBSRVRVUk4sCi0gICAgSUYsCi0gICAgVEhJU1RPS0VOLAotICAgIERPLAotICAgIFdISUxF
LAotICAgIFNXSVRDSCwKLSAgICBXSVRILAotICAgIFJFU0VSVkVELAotICAgIFJFU0VSVkVEX0lG
X1NUUklDVCwKLSAgICBUSFJPVywKLSAgICBUUlksCi0gICAgQ0FUQ0gsCi0gICAgRklOQUxMWSwK
LSAgICBERUJVR0dFUiwKLSAgICBFTFNFLAotICAgIE9QRU5CUkFDRSA9IDAsCi0gICAgQ0xPU0VC
UkFDRSwKLSAgICBPUEVOUEFSRU4sCi0gICAgQ0xPU0VQQVJFTiwKLSAgICBPUEVOQlJBQ0tFVCwK
LSAgICBDTE9TRUJSQUNLRVQsCi0gICAgQ09NTUEsCi0gICAgUVVFU1RJT04sCi0gICAgTlVNQkVS
LAotICAgIElERU5ULAotICAgIFNUUklORywKLSAgICBTRU1JQ09MT04sCi0gICAgQ09MT04sCi0g
ICAgRE9ULAotICAgIEVSUk9SVE9LLAotICAgIEVPRlRPSywKLSAgICBFUVVBTCwKLSAgICBQTFVT
RVFVQUwsCi0gICAgTUlOVVNFUVVBTCwKLSAgICBNVUxURVFVQUwsCi0gICAgRElWRVFVQUwsCi0g
ICAgTFNISUZURVFVQUwsCi0gICAgUlNISUZURVFVQUwsCi0gICAgVVJTSElGVEVRVUFMLAotICAg
IEFOREVRVUFMLAotICAgIE1PREVRVUFMLAotICAgIFhPUkVRVUFMLAotICAgIE9SRVFVQUwsCi0g
ICAgTGFzdFVudGFnZ2VkVG9rZW4sCi0KLSAgICAvLyBCZWdpbiB0YWdnZWQgdG9rZW5zCi0gICAg
UExVU1BMVVMgPSAwIHwgVW5hcnlPcFRva2VuRmxhZywKLSAgICBNSU5VU01JTlVTID0gMSB8IFVu
YXJ5T3BUb2tlbkZsYWcsCi0gICAgRVhDTEFNQVRJT04gPSAyIHwgVW5hcnlPcFRva2VuRmxhZywK
LSAgICBUSUxERSA9IDMgfCBVbmFyeU9wVG9rZW5GbGFnLAotICAgIEFVVE9QTFVTUExVUyA9IDQg
fCBVbmFyeU9wVG9rZW5GbGFnLAotICAgIEFVVE9NSU5VU01JTlVTID0gNSB8IFVuYXJ5T3BUb2tl
bkZsYWcsCi0gICAgVFlQRU9GID0gNiB8IFVuYXJ5T3BUb2tlbkZsYWcgfCBLZXl3b3JkVG9rZW5G
bGFnLAotICAgIFZPSURUT0tFTiA9IDcgfCBVbmFyeU9wVG9rZW5GbGFnIHwgS2V5d29yZFRva2Vu
RmxhZywKLSAgICBERUxFVEVUT0tFTiA9IDggfCBVbmFyeU9wVG9rZW5GbGFnIHwgS2V5d29yZFRv
a2VuRmxhZywKLSAgICBPUiA9IDAgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxKSwKLSAgICBBTkQg
PSAxIHwgQklOQVJZX09QX1BSRUNFREVOQ0UoMiksCi0gICAgQklUT1IgPSAyIHwgQklOQVJZX09Q
X1BSRUNFREVOQ0UoMyksCi0gICAgQklUWE9SID0gMyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDQp
LAotICAgIEJJVEFORCA9IDQgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSg1KSwKLSAgICBFUUVRID0g
NSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAotICAgIE5FID0gNiB8IEJJTkFSWV9PUF9QUkVD
RURFTkNFKDYpLAotICAgIFNUUkVRID0gNyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAotICAg
IFNUUk5FUSA9IDggfCBCSU5BUllfT1BfUFJFQ0VERU5DRSg2KSwKLSAgICBMVCA9IDkgfCBCSU5B
UllfT1BfUFJFQ0VERU5DRSg3KSwKLSAgICBHVCA9IDEwIHwgQklOQVJZX09QX1BSRUNFREVOQ0Uo
NyksCi0gICAgTEUgPSAxMSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAotICAgIEdFID0gMTIg
fCBCSU5BUllfT1BfUFJFQ0VERU5DRSg3KSwKLSAgICBJTlNUQU5DRU9GID0gMTMgfCBCSU5BUllf
T1BfUFJFQ0VERU5DRSg3KSB8IEtleXdvcmRUb2tlbkZsYWcsCi0gICAgSU5UT0tFTiA9IDE0IHwg
SU5fT1BfUFJFQ0VERU5DRSg3KSB8IEtleXdvcmRUb2tlbkZsYWcsCi0gICAgTFNISUZUID0gMTUg
fCBCSU5BUllfT1BfUFJFQ0VERU5DRSg4KSwKLSAgICBSU0hJRlQgPSAxNiB8IEJJTkFSWV9PUF9Q
UkVDRURFTkNFKDgpLAotICAgIFVSU0hJRlQgPSAxNyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDgp
LAotICAgIFBMVVMgPSAxOCB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDkpIHwgVW5hcnlPcFRva2Vu
RmxhZywKLSAgICBNSU5VUyA9IDE5IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoOSkgfCBVbmFyeU9w
VG9rZW5GbGFnLAotICAgIFRJTUVTID0gMjAgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxMCksCi0g
ICAgRElWSURFID0gMjEgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxMCksCi0gICAgTU9EID0gMjIg
fCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxMCkKLX07Ci0KLXVuaW9uIEpTVG9rZW5EYXRhIHsKLSAg
ICBpbnQgaW50VmFsdWU7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50OwotfTsKLQotc3RydWN0IEpTVG9rZW5JbmZvIHsKLSAgICBKU1Rva2VuSW5m
bygpIDogbGluZSgwKSB7fQotICAgIGludCBsaW5lOwotICAgIGludCBzdGFydE9mZnNldDsKLSAg
ICBpbnQgZW5kT2Zmc2V0OwotfTsKLQotc3RydWN0IEpTVG9rZW4gewotICAgIEpTVG9rZW5UeXBl
IG1fdHlwZTsKLSAgICBKU1Rva2VuRGF0YSBtX2RhdGE7Ci0gICAgSlNUb2tlbkluZm8gbV9pbmZv
OwotfTsKLQotZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNl
U3RyaWN0IH07Ci1lbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJz
ZUZ1bmN0aW9uQ29kZSB9OwotCi1VU3RyaW5nIGpzUGFyc2UoSlNHbG9iYWxEYXRhKiwgRnVuY3Rp
b25QYXJhbWV0ZXJzKiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUsIGNvbnN0IFNv
dXJjZUNvZGUqKTsKLX0KLSNlbmRpZiAvLyBKU1BhcnNlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDE3
IEBACiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLSNp
bmNsdWRlICJKU1BhcnNlci5oIgogI2luY2x1ZGUgIktleXdvcmRMb29rdXAuaCIKLSNpbmNsdWRl
ICJMb29rdXAuaCIKICNpbmNsdWRlICJMZXhlci5sdXQuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK0tleXdvcmRzOjpLZXl3b3JkcyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fa2V5d29y
ZFRhYmxlKEpTQzo6bWFpblRhYmxlKQoreworfQogCiBlbnVtIENoYXJhY3RlclR5cGUgewogICAg
IC8vIFR5cGVzIGZvciB0aGUgbWFpbiBzd2l0Y2gKQEAgLTIyNSwxMyArMjI5LDExIEBAIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUkKIExleGVyOjpMZXhlcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBtX2lzUmVwYXJzaW5nKGZhbHNlKQogICAgICwgbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgLCBtX2tleXdvcmRUYWJsZShKU0M6Om1haW5UYWJs
ZSkKIHsKIH0KIAogTGV4ZXI6On5MZXhlcigpCiB7Ci0gICAgbV9rZXl3b3JkVGFibGUuZGVsZXRl
VGFibGUoKTsKIH0KICAgICAKIFVTdHJpbmcgTGV4ZXI6OmdldEludmFsaWRDaGFyTWVzc2FnZSgp
CkBAIC0yNjcsOSArMjY5LDkgQEAgQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI6OmN1cnJlbnRPZmZz
ZXQoKQogICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyKCkgLSBtX2NvZGVTdGFydDsKIH0KIAot
dm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckFyZW5h
JiBhcmVuYSkKK3ZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJzZXJBcmVuYSogYXJlbmEpCiB7Ci0gICAgbV9hcmVuYSA9ICZhcmVuYS5pZGVudGlmaWVyQXJl
bmEoKTsKKyAgICBtX2FyZW5hID0gJmFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKTsKIAogICAgIG1f
bGluZU51bWJlciA9IHNvdXJjZS5maXJzdExpbmUoKTsKICAgICBtX2RlbGltaXRlZCA9IGZhbHNl
OwpAQCAtNDkwLDcgKzQ5Miw3IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZp
ZXI+IEEKICAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOwogICAgICAgICAv
LyBLZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJlIHdhcyBhbiBcdVhYWFgg
aW4gdGhlIGlkZW50aWZpZXIuCiAgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0
aCkgewotICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fa2V5d29yZFRhYmxl
LmVudHJ5KG1fZ2xvYmFsRGF0YSwgKmlkZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRy
eSogZW50cnkgPSBtX2dsb2JhbERhdGEtPmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CiAg
ICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkp
OwogICAgICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7
CkBAIC01MDQsMTEgKzUwNiw2IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZp
ZXI+IEEKICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLWJvb2wgTGV4ZXI6OmlzS2V5d29yZChjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICByZXR1cm4gbV9rZXl3b3JkVGFibGUuZW50cnko
bV9nbG9iYWxEYXRhLCBpZGVudCk7Ci19Ci0KIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3Ry
aW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSog
dG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCiB7CiAgICAgaW50IHN0cmluZ1F1b3RlQ2hhcmFj
dGVyID0gbV9jdXJyZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAko
cmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkgQEAKICNpZm5kZWYgTGV4ZXJfaAogI2RlZmlu
ZSBMZXhlcl9oCiAKLSNpbmNsdWRlICJKU1BhcnNlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgog
I2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCisjaW5jbHVkZSAiUGFyc2VyVG9rZW5zLmgiCiAjaW5j
bHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtMzUsMjAyICszNSwyMjYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICBjbGFzcyBSZWdFeHA7Ci0KLSAgICBjbGFzcyBMZXhlciB7Ci0gICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExleGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgcHVibGljOgotICAgICAgICAvLyBDaGFyYWN0ZXIgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4K
LSAgICAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZVNwYWNlKGludCBjaGFyYWN0ZXIpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBpc0xpbmVUZXJtaW5hdG9yKGludCBjaGFyYWN0ZXIpOwotICAgICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciBjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKTsKLSAgICAgICAg
c3RhdGljIFVDaGFyIGNvbnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBj
NCk7Ci0KLSAgICAgICAgLy8gRnVuY3Rpb25zIHRvIHNldCB1cCBwYXJzaW5nLgotICAgICAgICB2
b2lkIHNldENvZGUoY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckFyZW5hJik7Ci0gICAgICAgIHZv
aWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1faXNSZXBhcnNpbmcgPSB0cnVlOyB9Ci0gICAgICAgIGJv
b2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwYXJzaW5nOyB9Ci0KLSAgICAg
ICAgLy8gRnVuY3Rpb25zIGZvciB0aGUgcGFyc2VyIGl0c2VsZi4KLSAgICAgICAgZW51bSBMZXhU
eXBlIHsKLSAgICAgICAgICAgIElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAKLSAgICAgICAgICAg
IERvbnRCdWlsZFN0cmluZ3MgPSAyLAotICAgICAgICAgICAgRG9udEJ1aWxkS2V5d29yZHMgPSA0
Ci0gICAgICAgIH07Ci0gICAgICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0YSosIEpTVG9r
ZW5JbmZvKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7Ci0gICAgICAgIGJvb2wgbmV4dFRv
a2VuSXNDb2xvbigpOwotICAgICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZU51bWJlcjsgfQotICAgICAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBsYXN0TGlu
ZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KLSAgICAgICAg
aW50IGxhc3RMaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQot
ICAgICAgICBib29sIHByZXZUZXJtaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hdG9y
OyB9Ci0gICAgICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xv
c2VCcmFjZSwgaW50IGZpcnN0TGluZSk7Ci0gICAgICAgIGJvb2wgc2NhblJlZ0V4cChjb25zdCBJ
ZGVudGlmaWVyKiYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciomIGZsYWdzLCBVQ2hhciBwYXR0
ZXJuUHJlZml4ID0gMCk7Ci0gICAgICAgIGJvb2wgc2tpcFJlZ0V4cCgpOwotCi0gICAgICAgIC8v
IEZ1bmN0aW9ucyBmb3IgdXNlIGFmdGVyIHBhcnNpbmcuCi0gICAgICAgIGJvb2wgc2F3RXJyb3Io
KSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KLSAgICAgICAgdm9pZCBj
bGVhcigpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCgpIHsgcmV0dXJuIG1fY29kZSAtIG1f
Y29kZVN0YXJ0OyB9Ci0gICAgICAgIHZvaWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fZXJyb3IgPSAwOwotICAgICAgICAgICAgbV9sZXhFcnJvck1lc3Nh
Z2UgPSBVU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2NvZGUgPSBtX2NvZGVTdGFydCArIG9mZnNl
dDsKLSAgICAgICAgICAgIG1fYnVmZmVyOC5yZXNpemUoMCk7Ci0gICAgICAgICAgICBtX2J1ZmZl
cjE2LnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2Vx
dWVuY2UKLSAgICAgICAgICAgIG1fY3VycmVudCA9IC0xOwotICAgICAgICAgICAgaWYgKExJS0VM
WShtX2NvZGUgPCBtX2NvZGVFbmQpKQotICAgICAgICAgICAgICAgIG1fY3VycmVudCA9ICptX2Nv
ZGU7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2xpbmVOdW1iZXIgPSBsaW5lOwotICAgICAgICB9Ci0KLSAg
ICAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2UtPnByb3ZpZGVyKCk7IH0KLSAgICAgICAgCi0gICAgICAgIEpTVG9rZW5UeXBlIGxleEV4
cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCBKU1Rva2VuSW5mbyosIHVuc2lnbmVkLCBib29s
IHN0cmljdE1vZGUpOwotCi0gICAgICAgIGJvb2wgaXNLZXl3b3JkKGNvbnN0IElkZW50aWZpZXIm
KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7Ci0K
LSAgICAgICAgTGV4ZXIoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIH5MZXhlcigpOwotCi0gICAg
ICAgIHZvaWQgcmVjb3JkOChpbnQpOwotICAgICAgICB2b2lkIHJlY29yZDE2KGludCk7Ci0gICAg
ICAgIHZvaWQgcmVjb3JkMTYoVUNoYXIpOwotCi0gICAgICAgIHZvaWQgY29weUNvZGVXaXRob3V0
Qk9NcygpOwotCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzaGlmdCgpOwotICAgICAgICBB
TFdBWVNfSU5MSU5FIGludCBwZWVrKGludCBvZmZzZXQpOwotICAgICAgICBpbnQgZ2V0VW5pY29k
ZUNoYXJhY3RlcigpOwotICAgICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKLQotICAg
ICAgICBVU3RyaW5nIGdldEludmFsaWRDaGFyTWVzc2FnZSgpOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7Ci0gICAgICAgIEFMV0FZ
U19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQoKSBjb25zdDsKLQotICAgICAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKTsKLQotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGFzdFRv
a2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7Ci0KLSAgICAgICAgZW51bSBTaGlmdFR5cGUgeyBE
b0JvdW5kc0NoZWNrLCBEb05vdEJvdW5kc0NoZWNrIH07Ci0gICAgICAgIHRlbXBsYXRlIDxpbnQg
c2hpZnRBbW91bnQsIFNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVjaz4gdm9pZCBpbnRlcm5hbFNo
aWZ0KCk7Ci0gICAgICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKik7Ci0gICAg
ICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkSWRlbnRpZmllcnM+IEFMV0FZU19JTkxJTkUg
SlNUb2tlblR5cGUgcGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgdW5zaWduZWQsIGJvb2wg
c3RyaWN0TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4g
QUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RN
b2RlKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhcnNlSGV4KGRvdWJsZSYgcmV0dXJu
VmFsdWUpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VPY3RhbChkb3VibGUmIHJl
dHVyblZhbHVlKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlRGVjaW1hbChkb3Vi
bGUmIHJldHVyblZhbHVlKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhcnNlTnVtYmVy
QWZ0ZXJEZWNpbWFsUG9pbnQoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlTnVt
YmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cGFyc2VNdWx0aWxpbmVDb21tZW50KCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5ID0gMzI7Ci0KLSAgICAgICAgaW50IG1fbGluZU51bWJl
cjsKLSAgICAgICAgaW50IG1fbGFzdExpbmVOdW1iZXI7Ci0KLSAgICAgICAgVmVjdG9yPGNoYXI+
IG1fYnVmZmVyODsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjE2OwotICAgICAgICBi
b29sIG1fdGVybWluYXRvcjsKLSAgICAgICAgYm9vbCBtX2RlbGltaXRlZDsgLy8gZW5jb3VudGVy
ZWQgZGVsaW1pdGVyIGxpa2UgIiciIGFuZCAifSIgb24gbGFzdCBydW4KLSAgICAgICAgaW50IG1f
bGFzdFRva2VuOwotCi0gICAgICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgICAg
ICBjb25zdCBVQ2hhciogbV9jb2RlOwotICAgICAgICBjb25zdCBVQ2hhciogbV9jb2RlU3RhcnQ7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NvZGVFbmQ7Ci0gICAgICAgIGJvb2wgbV9pc1JlcGFy
c2luZzsKLSAgICAgICAgYm9vbCBtX2F0TGluZVN0YXJ0OwotICAgICAgICBib29sIG1fZXJyb3I7
Ci0gICAgICAgIFVTdHJpbmcgbV9sZXhFcnJvck1lc3NhZ2U7Ci0KLSAgICAgICAgLy8gY3VycmVu
dCBhbmQgZm9sbG93aW5nIHVuaWNvZGUgY2hhcmFjdGVycyAoaW50IHRvIGFsbG93IGZvciAtMSBm
b3IgZW5kLW9mLWZpbGUgbWFya2VyKQotICAgICAgICBpbnQgbV9jdXJyZW50OwotCi0gICAgICAg
IElkZW50aWZpZXJBcmVuYSogbV9hcmVuYTsKLQotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xv
YmFsRGF0YTsKLQotICAgICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7Ci0gICAg
fTsKLQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNlKGludCBjaCkK
K2NsYXNzIEtleXdvcmRzIHsKK3B1YmxpYzoKKyAgICBib29sIGlzS2V5d29yZChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0FTQ0lJKGNoKSA/
IChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAweEIgfHwgY2ggPT0gMHhDKSA6IChX
VEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UoY2gpIHx8IGNoID09IDB4RkVGRik7CisgICAg
ICAgIHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsIGlkZW50KTsKICAg
ICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OmlzTGluZVRlcm1pbmF0b3IoaW50
IGNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoID09ICdccicgfHwgY2ggPT0gJ1xuJyB8fCAo
Y2ggJiB+MSkgPT0gMHgyMDI4OwotICAgIH0KLQotICAgIGlubGluZSB1bnNpZ25lZCBjaGFyIExl
eGVyOjpjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKQorICAgIAorICAgIGNvbnN0IEhhc2hFbnRy
eSogZ2V0S2V5d29yZChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVlKGMxKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShj
Mik7CisgICAgICAgIHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsIGlk
ZW50KTsKICAgICB9Ci0KLSAgICBpbmxpbmUgVUNoYXIgTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGlu
dCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICAKKyAgICBLZXl3b3JkcyhKU0dsb2JhbERhdGEqKTsK
KyAgICAKKyAgICB+S2V5d29yZHMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChjb252ZXJ0SGV4
KGMxLCBjMikgPDwgOCkgfCBjb252ZXJ0SGV4KGMzLCBjNCk7CisgICAgICAgIG1fa2V5d29yZFRh
YmxlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
SWRlbnRpZmllciogTGV4ZXI6Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKQorICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIGNv
bnN0IEhhc2hUYWJsZSBtX2tleXdvcmRUYWJsZTsKK307CisKK2NsYXNzIFJlZ0V4cDsKKworY2xh
c3MgTGV4ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExleGVyKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIExleGVyKEpTR2xvYmFsRGF0YSopOwor
ICAgIH5MZXhlcigpOworCisgICAgLy8gQ2hhcmFjdGVyIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMu
CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZVNwYWNlKGludCBjaGFyYWN0ZXIpOworICAgIHN0YXRp
YyBib29sIGlzTGluZVRlcm1pbmF0b3IoaW50IGNoYXJhY3Rlcik7CisgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgY29udmVydEhleChpbnQgYzEsIGludCBjMik7CisgICAgc3RhdGljIFVDaGFyIGNv
bnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCk7CisKKyAgICAvLyBG
dW5jdGlvbnMgdG8gc2V0IHVwIHBhcnNpbmcuCisgICAgdm9pZCBzZXRDb2RlKGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJBcmVuYSopOworICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1faXNS
ZXBhcnNpbmcgPSB0cnVlOyB9CisgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNSZXBhcnNpbmc7IH0KKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgdGhlIHBhcnNlciBpdHNl
bGYuCisgICAgZW51bSBMZXhUeXBlIHsKKyAgICAgICAgSWdub3JlUmVzZXJ2ZWRXb3JkcyA9IDEs
IAorICAgICAgICBEb250QnVpbGRTdHJpbmdzID0gMiwKKyAgICAgICAgRG9udEJ1aWxkS2V5d29y
ZHMgPSA0CisgICAgfTsKKyAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbkRhdGEqLCBKU1Rva2Vu
SW5mbyosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIGJvb2wgbmV4dFRva2VuSXND
b2xvbigpOworICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVy
OyB9CisgICAgdm9pZCBzZXRMYXN0TGluZU51bWJlcihpbnQgbGFzdExpbmVOdW1iZXIpIHsgbV9s
YXN0TGluZU51bWJlciA9IGxhc3RMaW5lTnVtYmVyOyB9CisgICAgaW50IGxhc3RMaW5lTnVtYmVy
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQorICAgIGJvb2wgcHJldlRlcm1p
bmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0b3I7IH0KKyAgICBTb3VyY2VDb2RlIHNv
dXJjZUNvZGUoaW50IG9wZW5CcmFjZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUpOwor
ICAgIGJvb2wgc2NhblJlZ0V4cChjb25zdCBJZGVudGlmaWVyKiYgcGF0dGVybiwgY29uc3QgSWRl
bnRpZmllciomIGZsYWdzLCBVQ2hhciBwYXR0ZXJuUHJlZml4ID0gMCk7CisgICAgYm9vbCBza2lw
UmVnRXhwKCk7CisKKyAgICAvLyBGdW5jdGlvbnMgZm9yIHVzZSBhZnRlciBwYXJzaW5nLgorICAg
IGJvb2wgc2F3RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgVVN0cmluZyBn
ZXRFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xleEVycm9yTWVzc2FnZTsgfQorICAg
IHZvaWQgY2xlYXIoKTsKKyAgICBpbnQgY3VycmVudE9mZnNldCgpIHsgcmV0dXJuIG1fY29kZSAt
IG1fY29kZVN0YXJ0OyB9CisgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIG1fZXJyb3IgPSAwOworICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IFVTdHJpbmco
KTsKKyAgICAgICAgbV9jb2RlID0gbV9jb2RlU3RhcnQgKyBvZmZzZXQ7CisgICAgICAgIG1fYnVm
ZmVyOC5yZXNpemUoMCk7CisgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOworICAgICAgICAv
LyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlCisgICAgICAgIG1fY3VycmVudCA9IC0x
OworICAgICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCisgICAgICAgICAgICBt
X2N1cnJlbnQgPSAqbV9jb2RlOworICAgIH0KKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxp
bmUpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xv
YmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgbV9saW5lTnVtYmVyID0gbGlu
ZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpsZXhFeHBl
Y3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0b2tlbklu
Zm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCgobGV4VHlwZSAmIElnbm9yZVJlc2VydmVkV29yZHMpKTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIHN0YXJ0ID0gbV9jb2RlOwotICAgICAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBtX2NvZGVFbmQ7Ci0gICAgICAgIGlmIChwdHIgPj0g
ZW5kKSB7Ci0gICAgICAgICAgICBBU1NFUlQocHRyID09IGVuZCk7Ci0gICAgICAgICAgICBnb3Rv
IHNsb3dDYXNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghV1RGOjppc0FTQ0lJQWxwaGEoKnB0
cikpCi0gICAgICAgICAgICBnb3RvIHNsb3dDYXNlOworICAgIFNvdXJjZVByb3ZpZGVyKiBzb3Vy
Y2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CisgICAg
CisgICAgSlNUb2tlblR5cGUgbGV4RXhwZWN0SWRlbnRpZmllcihKU1Rva2VuRGF0YSosIEpTVG9r
ZW5JbmZvKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKworICAgIHZvaWQgcmVjb3JkOChpbnQpOworICAgIHZv
aWQgcmVjb3JkMTYoaW50KTsKKyAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKKworICAgIHZvaWQg
Y29weUNvZGVXaXRob3V0Qk9NcygpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNoaWZ0KCk7
CisgICAgQUxXQVlTX0lOTElORSBpbnQgcGVlayhpbnQgb2Zmc2V0KTsKKyAgICBpbnQgZ2V0VW5p
Y29kZUNoYXJhY3RlcigpOworICAgIHZvaWQgc2hpZnRMaW5lVGVybWluYXRvcigpOworCisgICAg
VVN0cmluZyBnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSBpbnQg
Y3VycmVudE9mZnNldCgpIGNvbnN0OworCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyKiBtYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCk7CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkg
Y29uc3Q7CisKKyAgICBlbnVtIFNoaWZ0VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRz
Q2hlY2sgfTsKKyAgICB0ZW1wbGF0ZSA8aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxk
Qm91bmRzQ2hlY2s+IHZvaWQgaW50ZXJuYWxTaGlmdCgpOworICAgIHRlbXBsYXRlIDxib29sIHNo
b3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3
b3JkKEpTVG9rZW5EYXRhKik7CisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlm
aWVycz4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRh
dGEqLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRCdWlsZFN0cmluZ3M+IEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZVN0cmluZyhKU1Rva2VuRGF0
YSosIGJvb2wgc3RyaWN0TW9kZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhcnNlSGV4KGRv
dWJsZSYgcmV0dXJuVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZU9jdGFsKGRv
dWJsZSYgcmV0dXJuVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZURlY2ltYWwo
ZG91YmxlJiByZXR1cm5WYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhcnNlTnVtYmVy
QWZ0ZXJEZWNpbWFsUG9pbnQoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VOdW1iZXJB
ZnRlckV4cG9uZW50SW5kaWNhdG9yKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlTXVs
dGlsaW5lQ29tbWVudCgpOworCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbml0aWFsUmVhZEJ1
ZmZlckNhcGFjaXR5ID0gMzI7CisKKyAgICBpbnQgbV9saW5lTnVtYmVyOworICAgIGludCBtX2xh
c3RMaW5lTnVtYmVyOworCisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyODsKKyAgICBWZWN0b3I8
VUNoYXI+IG1fYnVmZmVyMTY7CisgICAgYm9vbCBtX3Rlcm1pbmF0b3I7CisgICAgYm9vbCBtX2Rl
bGltaXRlZDsgLy8gZW5jb3VudGVyZWQgZGVsaW1pdGVyIGxpa2UgIiciIGFuZCAifSIgb24gbGFz
dCBydW4KKyAgICBpbnQgbV9sYXN0VG9rZW47CisKKyAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3Nv
dXJjZTsKKyAgICBjb25zdCBVQ2hhciogbV9jb2RlOworICAgIGNvbnN0IFVDaGFyKiBtX2NvZGVT
dGFydDsKKyAgICBjb25zdCBVQ2hhciogbV9jb2RlRW5kOworICAgIGJvb2wgbV9pc1JlcGFyc2lu
ZzsKKyAgICBib29sIG1fYXRMaW5lU3RhcnQ7CisgICAgYm9vbCBtX2Vycm9yOworICAgIFVTdHJp
bmcgbV9sZXhFcnJvck1lc3NhZ2U7CisKKyAgICAvLyBjdXJyZW50IGFuZCBmb2xsb3dpbmcgdW5p
Y29kZSBjaGFyYWN0ZXJzIChpbnQgdG8gYWxsb3cgZm9yIC0xIGZvciBlbmQtb2YtZmlsZSBtYXJr
ZXIpCisgICAgaW50IG1fY3VycmVudDsKKworICAgIElkZW50aWZpZXJBcmVuYSogbV9hcmVuYTsK
KworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworfTsKKworQUxXQVlTX0lOTElORSBi
b29sIExleGVyOjppc1doaXRlU3BhY2UoaW50IGNoKQoreworICAgIHJldHVybiBpc0FTQ0lJKGNo
KSA/IChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAweEIgfHwgY2ggPT0gMHhDKSA6
IChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UoY2gpIHx8IGNoID09IDB4RkVGRik7Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcihpbnQgY2gpCit7
CisgICAgcmV0dXJuIGNoID09ICdccicgfHwgY2ggPT0gJ1xuJyB8fCAoY2ggJiB+MSkgPT0gMHgy
MDI4OworfQorCitpbmxpbmUgdW5zaWduZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChpbnQgYzEs
IGludCBjMikKK3sKKyAgICByZXR1cm4gKHRvQVNDSUlIZXhWYWx1ZShjMSkgPDwgNCkgfCB0b0FT
Q0lJSGV4VmFsdWUoYzIpOworfQorCitpbmxpbmUgVUNoYXIgTGV4ZXI6OmNvbnZlcnRVbmljb2Rl
KGludCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKK3sKKyAgICByZXR1cm4gKGNvbnZlcnRI
ZXgoYzEsIGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKK30KKworQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRl
bnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEq
IHRva2VuRGF0YSwgSlNUb2tlbkluZm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9v
bCBzdHJpY3RNb2RlKQoreworICAgIEFTU0VSVCgobGV4VHlwZSAmIElnbm9yZVJlc2VydmVkV29y
ZHMpKTsKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX2NvZGU7CisgICAgY29uc3QgVUNoYXIq
IHB0ciA9IHN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBtX2NvZGVFbmQ7CisgICAgaWYg
KHB0ciA+PSBlbmQpIHsKKyAgICAgICAgQVNTRVJUKHB0ciA9PSBlbmQpOworICAgICAgICBnb3Rv
IHNsb3dDYXNlOworICAgIH0KKyAgICBpZiAoIVdURjo6aXNBU0NJSUFscGhhKCpwdHIpKQorICAg
ICAgICBnb3RvIHNsb3dDYXNlOworICAgICsrcHRyOworICAgIHdoaWxlIChwdHIgPCBlbmQpIHsK
KyAgICAgICAgaWYgKCFXVEY6OmlzQVNDSUlBbHBoYW51bWVyaWMoKnB0cikpCisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgKytwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAg
ICAgICAgICAgIGlmICghV1RGOjppc0FTQ0lJQWxwaGFudW1lcmljKCpwdHIpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKytwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBIZXJlJ3MgdGhlIHNoaWZ0Ci0gICAgICAgIGlmIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAg
IGlmICgoIVdURjo6aXNBU0NJSSgqcHRyKSkgfHwgKCpwdHIgPT0gJ1xcJykgfHwgKCpwdHIgPT0g
J18nKSB8fCAoKnB0ciA9PSAnJCcpKQotICAgICAgICAgICAgICAgIGdvdG8gc2xvd0Nhc2U7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnQgPSAqcHRyOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fY3VycmVudCA9IC0xOwotCi0gICAgICAgIG1fY29kZSA9IHB0cjsKLQotICAgICAgICAvLyBD
cmVhdGUgdGhlIGlkZW50aWZpZXIgaWYgbmVlZGVkCi0gICAgICAgIGlmIChsZXhUeXBlICYgRG9u
dEJ1aWxkS2V5d29yZHMpCi0gICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVudGlmaWVyKHN0
YXJ0LCBwdHIgLSBzdGFydCk7Ci0gICAgICAgIHRva2VuSW5mby0+bGluZSA9IG1fbGluZU51bWJl
cjsKLSAgICAgICAgdG9rZW5JbmZvLT5zdGFydE9mZnNldCA9IHN0YXJ0IC0gbV9jb2RlU3RhcnQ7
Ci0gICAgICAgIHRva2VuSW5mby0+ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwotICAgICAg
ICBtX2xhc3RUb2tlbiA9IElERU5UOwotICAgICAgICByZXR1cm4gSURFTlQ7Ci0gICAgICAgIAot
ICAgIHNsb3dDYXNlOgotICAgICAgICByZXR1cm4gbGV4KHRva2VuRGF0YSwgdG9rZW5JbmZvLCBs
ZXhUeXBlLCBzdHJpY3RNb2RlKTsKICAgICB9CiAKKyAgICAvLyBIZXJlJ3MgdGhlIHNoaWZ0Cisg
ICAgaWYgKHB0ciA8IGVuZCkgeworICAgICAgICBpZiAoKCFXVEY6OmlzQVNDSUkoKnB0cikpIHx8
ICgqcHRyID09ICdcXCcpIHx8ICgqcHRyID09ICdfJykgfHwgKCpwdHIgPT0gJyQnKSkKKyAgICAg
ICAgICAgIGdvdG8gc2xvd0Nhc2U7CisgICAgICAgIG1fY3VycmVudCA9ICpwdHI7CisgICAgfSBl
bHNlCisgICAgICAgIG1fY3VycmVudCA9IC0xOworCisgICAgbV9jb2RlID0gcHRyOworCisgICAg
Ly8gQ3JlYXRlIHRoZSBpZGVudGlmaWVyIGlmIG5lZWRlZAorICAgIGlmIChsZXhUeXBlICYgRG9u
dEJ1aWxkS2V5d29yZHMpCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSAwOworICAgIGVsc2UK
KyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVudGlmaWVyKHN0YXJ0LCBwdHIgLSBz
dGFydCk7CisgICAgdG9rZW5JbmZvLT5saW5lID0gbV9saW5lTnVtYmVyOworICAgIHRva2VuSW5m
by0+c3RhcnRPZmZzZXQgPSBzdGFydCAtIG1fY29kZVN0YXJ0OworICAgIHRva2VuSW5mby0+ZW5k
T2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOworICAgIG1fbGFzdFRva2VuID0gSURFTlQ7CisgICAg
cmV0dXJuIElERU5UOworICAgIAorc2xvd0Nhc2U6CisgICAgcmV0dXJuIGxleCh0b2tlbkRhdGEs
IHRva2VuSW5mbywgbGV4VHlwZSwgc3RyaWN0TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gTGV4ZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDk4NzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDg2ICsyOSw4NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSB2b2lkKiBQYXJz
ZXJBcmVuYUZyZWVhYmxlOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5wYXJzZXItPmFy
ZW5hKCkuYWxsb2NhdGVGcmVlYWJsZShzaXplKTsKKyAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEt
PnBhcnNlckFyZW5hLT5hbGxvY2F0ZUZyZWVhYmxlKHNpemUpOwogICAgIH0KIAogICAgIGlubGlu
ZSB2b2lkKiBQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+cGFyc2VyLT5hcmVuYSgpLmFsbG9jYXRlRGVsZXRhYmxlKHNpemUpOworICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRGVsZXRhYmxlKHNpemUpOwogICAg
IH0KIAogICAgIGlubGluZSBQYXJzZXJBcmVuYVJlZkNvdW50ZWQ6OlBhcnNlckFyZW5hUmVmQ291
bnRlZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICBnbG9iYWxEYXRh
LT5wYXJzZXItPmFyZW5hKCkuZGVyZWZXaXRoQXJlbmEoYWRvcHRSZWYodGhpcykpOworICAgICAg
ICBnbG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+ZGVyZWZXaXRoQXJlbmEoYWRvcHRSZWYodGhpcykp
OwogICAgIH0KIAotICAgIGlubGluZSBOb2RlOjpOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKLSAgICAgICAgOiBtX2xpbmUoZ2xvYmFsRGF0YS0+bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCkp
CisgICAgaW5saW5lIE5vZGU6Ok5vZGUoaW50IGxpbmVOdW1iZXIpCisgICAgICAgIDogbV9saW5l
TnVtYmVyKGxpbmVOdW1iZXIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBFeHByZXNzaW9u
Tm9kZTo6RXhwcmVzc2lvbk5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZXN1bHRUeXBl
IHJlc3VsdFR5cGUpCi0gICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBFeHBy
ZXNzaW9uTm9kZTo6RXhwcmVzc2lvbk5vZGUoaW50IGxpbmVOdW1iZXIsIFJlc3VsdFR5cGUgcmVz
dWx0VHlwZSkKKyAgICAgICAgOiBOb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9yZXN1bHRU
eXBlKHJlc3VsdFR5cGUpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBTdGF0ZW1lbnROb2Rl
OjpTdGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBOb2Rl
KGdsb2JhbERhdGEpCisgICAgaW5saW5lIFN0YXRlbWVudE5vZGU6OlN0YXRlbWVudE5vZGUoaW50
IGxpbmVOdW1iZXIpCisgICAgICAgIDogTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fbGFz
dExpbmUoLTEpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBOdWxsTm9kZTo6TnVsbE5vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2Jh
bERhdGEsIFJlc3VsdFR5cGU6Om51bGxUeXBlKCkpCisgICAgaW5saW5lIE51bGxOb2RlOjpOdWxs
Tm9kZShpbnQgbGluZU51bWJlcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVy
LCBSZXN1bHRUeXBlOjpudWxsVHlwZSgpKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQm9v
bGVhbk5vZGU6OkJvb2xlYW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCB2YWx1
ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpib29s
ZWFuVHlwZSgpKQorICAgIGlubGluZSBCb29sZWFuTm9kZTo6Qm9vbGVhbk5vZGUoaW50IGxpbmVO
dW1iZXIsIGJvb2wgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlciwg
UmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAg
IHsKICAgICB9CiAKLSAgICBpbmxpbmUgTnVtYmVyTm9kZTo6TnVtYmVyTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShn
bG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlKCkpCisgICAgaW5saW5lIE51bWJlck5v
ZGU6Ok51bWJlck5vZGUoaW50IGxpbmVOdW1iZXIsIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBF
eHByZXNzaW9uTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlKCkpCiAgICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFN0cmluZ05v
ZGU6OlN0cmluZ05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVy
JiB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBl
OjpzdHJpbmdUeXBlKCkpCisgICAgaW5saW5lIFN0cmluZ05vZGU6OlN0cmluZ05vZGUoaW50IGxp
bmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXImIHZhbHVlKQorICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSkKICAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVnRXhwTm9kZTo6UmVnRXhw
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4s
IGNvbnN0IElkZW50aWZpZXImIGZsYWdzKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2Jh
bERhdGEpCisgICAgaW5saW5lIFJlZ0V4cE5vZGU6OlJlZ0V4cE5vZGUoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzKQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9wYXR0ZXJuKHBh
dHRlcm4pCiAgICAgICAgICwgbV9mbGFncyhmbGFncykKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIFRoaXNOb2RlOjpUaGlzTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAg
IDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgVGhpc05vZGU6OlRoaXNO
b2RlKGludCBsaW5lTnVtYmVyKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHN0YXJ0
T2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5l
IFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGludCBzdGFydE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5l
TnVtYmVyKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9zdGFydE9mZnNl
dChzdGFydE9mZnNldCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEVsZW1lbnROb2RlOjpF
bGVtZW50Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQgZWxpc2lvbiwgRXhwcmVzc2lvbk5vZGUqIG5v
ZGUpCisgICAgaW5saW5lIEVsZW1lbnROb2RlOjpFbGVtZW50Tm9kZShpbnQgZWxpc2lvbiwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUpCiAgICAgICAgIDogbV9uZXh0KDApCiAgICAgICAgICwgbV9lbGlz
aW9uKGVsaXNpb24pCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgewogICAgIH0KIAotICAg
IGlubGluZSBFbGVtZW50Tm9kZTo6RWxlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiwgRWxlbWVudE5v
ZGUqIGwsIGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9kZSkKKyAgICBpbmxpbmUgRWxl
bWVudE5vZGU6OkVsZW1lbnROb2RlKEVsZW1lbnROb2RlKiBsLCBpbnQgZWxpc2lvbiwgRXhwcmVz
c2lvbk5vZGUqIG5vZGUpCiAgICAgICAgIDogbV9uZXh0KDApCiAgICAgICAgICwgbV9lbGlzaW9u
KGVsaXNpb24pCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCkBAIC0xMTYsMjQgKzExNiwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgbC0+bV9uZXh0ID0gdGhpczsKICAgICB9CiAKLSAgICBp
bmxpbmUgQXJyYXlOb2RlOjpBcnJheU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQg
ZWxpc2lvbikKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBBcnJheU5vZGU6OkFycmF5Tm9kZShpbnQgbGluZU51bWJlciwgaW50IGVsaXNpb24pCisgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2VsZW1lbnQoMCkK
ICAgICAgICAgLCBtX2VsaXNpb24oZWxpc2lvbikKICAgICAgICAgLCBtX29wdGlvbmFsKHRydWUp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcnJheU5vZGU6OkFycmF5Tm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEVsZW1lbnROb2RlKiBlbGVtZW50KQotICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEFycmF5Tm9kZTo6QXJyYXlOb2RlKGlu
dCBsaW5lTnVtYmVyLCBFbGVtZW50Tm9kZSogZWxlbWVudCkKKyAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICAgICAs
IG1fZWxpc2lvbigwKQogICAgICAgICAsIG1fb3B0aW9uYWwoZmFsc2UpCiAgICAgewogICAgIH0K
IAotICAgIGlubGluZSBBcnJheU5vZGU6OkFycmF5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCBlbGlzaW9uLCBFbGVtZW50Tm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBBcnJheU5vZGU6OkFycmF5Tm9kZShpbnQg
bGluZU51bWJlciwgaW50IGVsaXNpb24sIEVsZW1lbnROb2RlKiBlbGVtZW50KQorICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
CiAgICAgICAgICwgbV9lbGlzaW9uKGVsaXNpb24pCiAgICAgICAgICwgbV9vcHRpb25hbCh0cnVl
KQpAQCAtMTQ4LDExOCArMTQ4LDExOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICAgICBp
bmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBkb3VibGUgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlKQotICAgICAg
ICA6IG1fbmFtZShnbG9iYWxEYXRhLT5wYXJzZXItPmFyZW5hKCkuaWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpKQorICAgICAgICA6IG1fbmFt
ZShnbG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikK
ICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFByb3Bl
cnR5TGlzdE5vZGU6OlByb3BlcnR5TGlzdE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5vZGUqIG5vZGUpCi0gICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBQcm9wZXJ0eUxpc3ROb2RlOjpQcm9wZXJ0eUxpc3ROb2RlKGludCBsaW5lTnVtYmVyLCBQcm9w
ZXJ0eU5vZGUqIG5vZGUpCisgICAgICAgIDogTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1f
bm9kZShub2RlKQogICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxp
bmUgUHJvcGVydHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFByb3BlcnR5Tm9kZSogbm9kZSwgUHJvcGVydHlMaXN0Tm9kZSogbGlzdCkKLSAgICAg
ICAgOiBOb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFByb3BlcnR5TGlzdE5vZGU6OlByb3Bl
cnR5TGlzdE5vZGUoaW50IGxpbmVOdW1iZXIsIFByb3BlcnR5Tm9kZSogbm9kZSwgUHJvcGVydHlM
aXN0Tm9kZSogbGlzdCkKKyAgICAgICAgOiBOb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9u
b2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCiAgICAgewogICAgICAgICBsaXN0LT5tX25l
eHQgPSB0aGlzOwogICAgIH0KIAotICAgIGlubGluZSBPYmplY3RMaXRlcmFsTm9kZTo6T2JqZWN0
TGl0ZXJhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIE9iamVjdExpdGVyYWxOb2RlOjpPYmplY3RM
aXRlcmFsTm9kZShpbnQgbGluZU51bWJlcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5l
TnVtYmVyKQogICAgICAgICAsIG1fbGlzdCgwKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
T2JqZWN0TGl0ZXJhbE5vZGU6Ok9iamVjdExpdGVyYWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgUHJvcGVydHlMaXN0Tm9kZSogbGlzdCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShn
bG9iYWxEYXRhKQorICAgIGlubGluZSBPYmplY3RMaXRlcmFsTm9kZTo6T2JqZWN0TGl0ZXJhbE5v
ZGUoaW50IGxpbmVOdW1iZXIsIFByb3BlcnR5TGlzdE5vZGUqIGxpc3QpCisgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2xpc3QobGlzdCkKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OkJyYWNrZXRBY2Nlc3Nvck5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVz
c2lvbk5vZGUqIHN1YnNjcmlwdCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cykKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBCcmFja2V0QWNjZXNz
b3JOb2RlOjpCcmFja2V0QWNjZXNzb3JOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgYm9vbCBzdWJzY3JpcHRIYXNBc3Np
Z25tZW50cykKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAs
IG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICAgICAg
LCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKQogICAg
IHsKICAgICB9CiAKLSAgICBpbmxpbmUgRG90QWNjZXNzb3JOb2RlOjpEb3RBY2Nlc3Nvck5vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAg
ICBpbmxpbmUgRG90QWNjZXNzb3JOb2RlOjpEb3RBY2Nlc3Nvck5vZGUoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAg
ICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcmd1bWVu
dExpc3ROb2RlOjpBcmd1bWVudExpc3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIpCi0gICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSBBcmd1bWVudExpc3ROb2RlOjpBcmd1bWVudExpc3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcikKKyAgICAgICAgOiBOb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwg
bV9uZXh0KDApCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBBcmd1bWVudExpc3ROb2RlOjpBcmd1bWVudExpc3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQXJndW1lbnRMaXN0Tm9kZSogbGlzdE5vZGUsIEV4cHJlc3Npb25Ob2RlKiBleHBy
KQotICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQXJndW1lbnRMaXN0Tm9k
ZTo6QXJndW1lbnRMaXN0Tm9kZShpbnQgbGluZU51bWJlciwgQXJndW1lbnRMaXN0Tm9kZSogbGlz
dE5vZGUsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IE5vZGUobGluZU51bWJlcikK
ICAgICAgICAgLCBtX25leHQoMCkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAg
ICAgIGxpc3ROb2RlLT5tX25leHQgPSB0aGlzOwogICAgIH0KIAotICAgIGlubGluZSBBcmd1bWVu
dHNOb2RlOjpBcmd1bWVudHNOb2RlKEpTR2xvYmFsRGF0YSopCisgICAgaW5saW5lIEFyZ3VtZW50
c05vZGU6OkFyZ3VtZW50c05vZGUoKQogICAgICAgICA6IG1fbGlzdE5vZGUoMCkKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIEFyZ3VtZW50c05vZGU6OkFyZ3VtZW50c05vZGUoSlNHbG9iYWxE
YXRhKiwgQXJndW1lbnRMaXN0Tm9kZSogbGlzdE5vZGUpCisgICAgaW5saW5lIEFyZ3VtZW50c05v
ZGU6OkFyZ3VtZW50c05vZGUoQXJndW1lbnRMaXN0Tm9kZSogbGlzdE5vZGUpCiAgICAgICAgIDog
bV9saXN0Tm9kZShsaXN0Tm9kZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIE5ld0V4cHJO
b2RlOjpOZXdFeHByTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5l
IE5ld0V4cHJOb2RlOjpOZXdFeHByTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBt
X2V4cHIoZXhwcikKICAgICAgICAgLCBtX2FyZ3MoMCkKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIE5ld0V4cHJOb2RlOjpOZXdFeHByTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdzKQotICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIE5ld0V4cHJOb2RlOjpOZXdFeHByTm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFy
Z3MpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2V4
cHIoZXhwcikKICAgICAgICAgLCBtX2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpFdmFsRnVuY3Rpb25DYWxsTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpFdmFs
RnVuY3Rpb25DYWxsTm9kZShpbnQgbGluZU51bWJlciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBt
X2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFZhbHVl
Tm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6
RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51
bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX2FyZ3Mo
YXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShsaW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAg
ICwgbV9hcmdzKGFyZ3MpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZTo6RnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJn
dW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkK
KyAgICBpbmxpbmUgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAg
ICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCkBAIC0yNjcsOCArMjY3LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxEb3ROb2RlOjpG
dW5jdGlvbkNhbGxEb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5v
ZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1
bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkK
LSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGdW5jdGlv
bkNhbGxEb3ROb2RlOjpGdW5jdGlvbkNhbGxEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAg
ICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTI3Niwz
MSArMjc2LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBGdW5jdGlvbkNhbGxEb3RO
b2RlKGdsb2JhbERhdGEsIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCkKKyAgICBpbmxpbmUgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlv
bkNhbGxEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEZ1bmN0
aW9uQ2FsbERvdE5vZGUobGluZU51bWJlciwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXBwbHlGdW5j
dGlvbkNhbGxEb3ROb2RlOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUoZ2xv
YmFsRGF0YSwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KQorICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBGdW5jdGlvbkNh
bGxEb3ROb2RlKGxpbmVOdW1iZXIsIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFByZVBvc3RSZXNvbHZl
Tm9kZTo6UHJlUG9zdFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEs
IFJlc3VsdFR5cGU6Om51bWJlclR5cGUoKSkgLy8gY291bGQgYmUgcmV1c2FibGUgZm9yIHByZT8K
KyAgICBpbmxpbmUgUHJlUG9zdFJlc29sdmVOb2RlOjpQcmVQb3N0UmVzb2x2ZU5vZGUoaW50IGxp
bmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlKCkpIC8vIGNvdWxkIGJlIHJl
dXNhYmxlIGZvciBwcmU/CiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhSZXNvbHZlTm9kZTo6UG9zdGZpeFJlc29sdmVO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9w
ZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IFByZVBvc3RSZXNvbHZlTm9kZShnbG9iYWxEYXRhLCBp
ZGVudCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCisgICAgaW5saW5lIFBvc3RmaXhS
ZXNvbHZlTm9kZTo6UG9zdGZpeFJlc29sdmVOb2RlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogUHJlUG9zdFJlc29sdmVO
b2RlKGxpbmVOdW1iZXIsIGlkZW50LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAg
ICAgICAgLCBtX29wZXJhdG9yKG9wZXIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQb3N0
Zml4QnJhY2tldE5vZGU6OlBvc3RmaXhCcmFja2V0Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBPcGVy
YXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlu
bGluZSBQb3N0Zml4QnJhY2tldE5vZGU6OlBvc3RmaXhCcmFja2V0Tm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJh
dG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAg
ICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2Ny
aXB0KQpAQCAtMzA4LDggKzMwOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAK
LSAgICBpbmxpbmUgUG9zdGZpeERvdE5vZGU6OlBvc3RmaXhEb3ROb2RlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQor
ICAgIGlubGluZSBQb3N0Zml4RG90Tm9kZTo6UG9zdGZpeERvdE5vZGUoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Ig
b3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBU
aHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkK
ICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQpAQCAtMzE3
LDY5ICszMTcsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBQb3N0Zml4RXJyb3JOb2RlOjpQb3N0Zml4RXJyb3JOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFBvc3RmaXhFcnJvck5vZGU6OlBv
c3RmaXhFcnJvck5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVy
YXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAg
ICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNv
bHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBEZWxl
dGVSZXNvbHZlTm9kZTo6RGVsZXRlUmVzb2x2ZU5vZGUoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQog
ICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBEZWxldGVCcmFja2V0Tm9kZTo6RGVsZXRlQnJhY2tldE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlw
dCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgRGVs
ZXRlQnJhY2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkK
ICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBEZWxldGVEb3ROb2RlOjpEZWxldGVEb3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBEZWxldGVEb3ROb2Rl
OjpEZWxldGVEb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1i
ZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChp
ZGVudCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZVZhbHVlTm9kZTo6RGVsZXRl
VmFsdWVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIp
Ci0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgRGVsZXRl
VmFsdWVOb2RlOjpEZWxldGVWYWx1ZU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwg
bV9leHByKGV4cHIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBWb2lkTm9kZTo6Vm9pZE5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcikKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBWb2lkTm9kZTo6Vm9p
ZE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBUeXBlT2ZSZXNvbHZlTm9kZTo6VHlwZU9mUmVzb2x2ZU5vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpzdHJpbmdUeXBlKCkp
CisgICAgaW5saW5lIFR5cGVPZlJlc29sdmVOb2RlOjpUeXBlT2ZSZXNvbHZlTm9kZShpbnQgbGlu
ZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKQogICAgICAgICAsIG1faWRl
bnQoaWRlbnQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBUeXBlT2ZWYWx1ZU5vZGU6OlR5
cGVPZlZhbHVlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OnN0
cmluZ1R5cGUoKSkKKyAgICBpbmxpbmUgVHlwZU9mVmFsdWVOb2RlOjpUeXBlT2ZWYWx1ZU5vZGUo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSkKICAgICAgICAgLCBt
X2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFByZWZpeFJlc29sdmVOb2Rl
OjpQcmVmaXhSZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBQcmVQb3N0UmVzb2x2ZU5v
ZGUoZ2xvYmFsRGF0YSwgaWRlbnQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQorICAg
IGlubGluZSBQcmVmaXhSZXNvbHZlTm9kZTo6UHJlZml4UmVzb2x2ZU5vZGUoaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBQ
cmVQb3N0UmVzb2x2ZU5vZGUobGluZU51bWJlciwgaWRlbnQsIGRpdm90LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIFByZWZpeEJyYWNrZXROb2RlOjpQcmVmaXhCcmFja2V0Tm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vi
c2NyaXB0LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxE
YXRhKQorICAgIGlubGluZSBQcmVmaXhCcmFja2V0Tm9kZTo6UHJlZml4QnJhY2tldE5vZGUoaW50
IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2Ny
aXB0LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVy
KQogICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwg
bV9zdWJzY3JpcHQoc3Vic2NyaXB0KQpAQCAtMzg3LDggKzM4Nyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJlZml4RG90Tm9kZTo6UHJlZml4RG90Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUHJlZml4RG90Tm9kZTo6UHJlZml4RG90Tm9kZShp
bnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVy
KQogICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwg
bV9pZGVudChpZGVudCkKQEAgLTM5Niw0MyArMzk2LDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJlZml4RXJyb3JOb2RlOjpQcmVmaXhFcnJvck5vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Ig
b3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUg
UHJlZml4RXJyb3JOb2RlOjpQcmVmaXhFcnJvck5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBleHByLCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShs
aW5lTnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1f
b3BlcmF0b3Iob3BlcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFVuYXJ5T3BOb2RlOjpV
bmFyeU9wTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlc3VsdFR5cGUgdHlwZSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIE9wY29kZUlEIG9wY29kZUlEKQotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGdsb2JhbERhdGEsIHR5cGUpCisgICAgaW5saW5lIFVuYXJ5T3BOb2RlOjpVbmFyeU9w
Tm9kZShpbnQgbGluZU51bWJlciwgUmVzdWx0VHlwZSB0eXBlLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgT3Bjb2RlSUQgb3Bjb2RlSUQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJl
ciwgdHlwZSkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX29wY29kZUlEKG9w
Y29kZUlEKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVW5hcnlQbHVzTm9kZTo6VW5hcnlQ
bHVzTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByKQot
ICAgICAgICA6IFVuYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6Om51bWJlclR5cGUo
KSwgZXhwciwgb3BfdG9fanNudW1iZXIpCisgICAgaW5saW5lIFVuYXJ5UGx1c05vZGU6OlVuYXJ5
UGx1c05vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6
IFVuYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bWJlclR5cGUoKSwgZXhwciwg
b3BfdG9fanNudW1iZXIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBOZWdhdGVOb2RlOjpO
ZWdhdGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIp
Ci0gICAgICAgIDogVW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6bnVtYmVyVHlw
ZUNhblJldXNlKCksIGV4cHIsIG9wX25lZ2F0ZSkKKyAgICBpbmxpbmUgTmVnYXRlTm9kZTo6TmVn
YXRlTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAgICAgIDog
VW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6bnVtYmVyVHlwZUNhblJldXNlKCks
IGV4cHIsIG9wX25lZ2F0ZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEJpdHdpc2VOb3RO
b2RlOjpCaXR3aXNlTm90Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25O
b2RlKiBleHByKQotICAgICAgICA6IFVuYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6
OmZvckJpdE9wKCksIGV4cHIsIG9wX2JpdG5vdCkKKyAgICBpbmxpbmUgQml0d2lzZU5vdE5vZGU6
OkJpdHdpc2VOb3ROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAg
ICAgICAgOiBVbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpmb3JCaXRPcCgpLCBl
eHByLCBvcF9iaXRub3QpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBMb2dpY2FsTm90Tm9k
ZTo6TG9naWNhbE5vdE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9k
ZSogZXhwcikKLSAgICAgICAgOiBVbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpi
b29sZWFuVHlwZSgpLCBleHByLCBvcF9ub3QpCisgICAgaW5saW5lIExvZ2ljYWxOb3ROb2RlOjpM
b2dpY2FsTm90Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCisgICAg
ICAgIDogVW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwg
ZXhwciwgb3Bfbm90KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQmluYXJ5T3BOb2RlOjpC
aW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhw
cjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bjb2RlSUQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAg
IGlubGluZSBCaW5hcnlPcE5vZGU6OkJpbmFyeU9wTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlEIG9wY29kZUlE
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGlu
ZU51bWJlcikKICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQogICAgICAgICAsIG1fZXhwcjIoZXhw
cjIpCiAgICAgICAgICwgbV9vcGNvZGVJRChvcGNvZGVJRCkKQEAgLTQ0MCw4ICs0NDAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEJpbmFyeU9wTm9kZTo6
QmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZSB0eXBlLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bj
b2RlSUQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShnbG9iYWxEYXRhLCB0eXBlKQorICAgIGlubGluZSBCaW5hcnlPcE5vZGU6OkJpbmFyeU9wTm9k
ZShpbnQgbGluZU51bWJlciwgUmVzdWx0VHlwZSB0eXBlLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bjb2RlSUQsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyLCB0eXBlKQog
ICAgICAgICAsIG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICwgbV9leHByMihleHByMikKICAgICAg
ICAgLCBtX29wY29kZUlEKG9wY29kZUlEKQpAQCAtNDQ5LDE0MCArNDQ5LDE0MCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIE11bHROb2RlOjpNdWx0Tm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5
T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6Om51bWJlclR5cGVDYW5SZXVzZSgpLCBleHBy
MSwgZXhwcjIsIG9wX211bCwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICBpbmxpbmUgTXVsdE5v
ZGU6Ok11bHROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJp
bmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2UoKSwg
ZXhwcjEsIGV4cHIyLCBvcF9tdWwsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0K
IAotICAgIGlubGluZSBEaXZOb2RlOjpEaXZOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0
VHlwZTo6bnVtYmVyVHlwZUNhblJldXNlKCksIGV4cHIxLCBleHByMiwgb3BfZGl2LCByaWdodEhh
c0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBEaXZOb2RlOjpEaXZOb2RlKGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1
bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2UoKSwgZXhwcjEsIGV4cHIyLCBvcF9kaXYsIHJpZ2h0
SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAogCi0gICAgaW5saW5lIE1vZE5vZGU6Ok1v
ZE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6
IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlQ2FuUmV1c2Uo
KSwgZXhwcjEsIGV4cHIyLCBvcF9tb2QsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5l
IE1vZE5vZGU6Ok1vZE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAg
IDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6Om51bWJlclR5cGVDYW5SZXVz
ZSgpLCBleHByMSwgZXhwcjIsIG9wX21vZCwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIEFkZE5vZGU6OkFkZE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBS
ZXN1bHRUeXBlOjpmb3JBZGQoZXhwcjEtPnJlc3VsdERlc2NyaXB0b3IoKSwgZXhwcjItPnJlc3Vs
dERlc2NyaXB0b3IoKSksIGV4cHIxLCBleHByMiwgb3BfYWRkLCByaWdodEhhc0Fzc2lnbm1lbnRz
KQorICAgIGlubGluZSBBZGROb2RlOjpBZGROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpmb3JB
ZGQoZXhwcjEtPnJlc3VsdERlc2NyaXB0b3IoKSwgZXhwcjItPnJlc3VsdERlc2NyaXB0b3IoKSks
IGV4cHIxLCBleHByMiwgb3BfYWRkLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9
CiAKLSAgICBpbmxpbmUgU3ViTm9kZTo6U3ViTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3Vs
dFR5cGU6Om51bWJlclR5cGVDYW5SZXVzZSgpLCBleHByMSwgZXhwcjIsIG9wX3N1YiwgcmlnaHRI
YXNBc3NpZ25tZW50cykKKyAgICBpbmxpbmUgU3ViTm9kZTo6U3ViTm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVz
dWx0VHlwZTo6bnVtYmVyVHlwZUNhblJldXNlKCksIGV4cHIxLCBleHByMiwgb3Bfc3ViLCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgTGVmdFNoaWZ0Tm9k
ZTo6TGVmdFNoaWZ0Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
Ci0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmZvckJpdE9w
KCksIGV4cHIxLCBleHByMiwgb3BfbHNoaWZ0LCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlu
bGluZSBMZWZ0U2hpZnROb2RlOjpMZWZ0U2hpZnROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpm
b3JCaXRPcCgpLCBleHByMSwgZXhwcjIsIG9wX2xzaGlmdCwgcmlnaHRIYXNBc3NpZ25tZW50cykK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFJpZ2h0U2hpZnROb2RlOjpSaWdodFNoaWZ0Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmlu
YXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCksIGV4cHIxLCBleHBy
Miwgb3BfcnNoaWZ0LCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBSaWdodFNoaWZ0
Tm9kZTo6UmlnaHRTaGlmdE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAg
ICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCksIGV4
cHIxLCBleHByMiwgb3BfcnNoaWZ0LCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9
CiAKLSAgICBpbmxpbmUgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6VW5zaWduZWRSaWdodFNoaWZ0
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDog
QmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6Om51bWJlclR5cGVDYW5SZXVzZSgp
LCBleHByMSwgZXhwcjIsIG9wX3Vyc2hpZnQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5s
aW5lIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OlVuc2lnbmVkUmlnaHRTaGlmdE5vZGUoaW50IGxp
bmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1i
ZXIsIFJlc3VsdFR5cGU6Om51bWJlclR5cGVDYW5SZXVzZSgpLCBleHByMSwgZXhwcjIsIG9wX3Vy
c2hpZnQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBM
ZXNzTm9kZTo6TGVzc05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
KQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpib29sZWFu
VHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2xlc3MsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAg
aW5saW5lIExlc3NOb2RlOjpMZXNzTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykK
KyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5
cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9sZXNzLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgR3JlYXRlck5vZGU6OkdyZWF0ZXJOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xv
YmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9ncmVh
dGVyLCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBHcmVhdGVyTm9kZTo6R3JlYXRl
ck5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDogQmluYXJ5T3BO
b2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwg
b3BfZ3JlYXRlciwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIExlc3NFcU5vZGU6Okxlc3NFcU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBl
Ojpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2xlc3NlcSwgcmlnaHRIYXNBc3NpZ25t
ZW50cykKKyAgICBpbmxpbmUgTGVzc0VxTm9kZTo6TGVzc0VxTm9kZShpbnQgbGluZU51bWJlciwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0
VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9sZXNzZXEsIHJpZ2h0SGFzQXNz
aWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBHcmVhdGVyRXFOb2RlOjpHcmVh
dGVyRXFOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAg
ICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwg
ZXhwcjEsIGV4cHIyLCBvcF9ncmVhdGVyZXEsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5s
aW5lIEdyZWF0ZXJFcU5vZGU6OkdyZWF0ZXJFcU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpCisgICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmJv
b2xlYW5UeXBlKCksIGV4cHIxLCBleHByMiwgb3BfZ3JlYXRlcmVxLCByaWdodEhhc0Fzc2lnbm1l
bnRzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVGhyb3dhYmxlQmluYXJ5T3BOb2RlOjpU
aHJvd2FibGVCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZXN1bHRUeXBl
IHR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNv
ZGVJRCBvcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFy
eU9wTm9kZShnbG9iYWxEYXRhLCB0eXBlLCBleHByMSwgZXhwcjIsIG9wY29kZUlELCByaWdodEhh
c0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OlRocm93YWJs
ZUJpbmFyeU9wTm9kZShpbnQgbGluZU51bWJlciwgUmVzdWx0VHlwZSB0eXBlLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bjb2RlSUQsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJl
ciwgdHlwZSwgZXhwcjEsIGV4cHIyLCBvcGNvZGVJRCwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAg
ICB7CiAgICAgfQogCi0gICAgaW5saW5lIFRocm93YWJsZUJpbmFyeU9wTm9kZTo6VGhyb3dhYmxl
QmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlEIG9wY29kZUlELCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIGV4cHIx
LCBleHByMiwgb3Bjb2RlSUQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIFRocm93
YWJsZUJpbmFyeU9wTm9kZTo6VGhyb3dhYmxlQmluYXJ5T3BOb2RlKGludCBsaW5lTnVtYmVyLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQgb3Bj
b2RlSUQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUo
bGluZU51bWJlciwgZXhwcjEsIGV4cHIyLCBvcGNvZGVJRCwgcmlnaHRIYXNBc3NpZ25tZW50cykK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEluc3RhbmNlT2ZOb2RlOjpJbnN0YW5jZU9mTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDogVGhy
b3dhYmxlQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCks
IGV4cHIxLCBleHByMiwgb3BfaW5zdGFuY2VvZiwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICBp
bmxpbmUgSW5zdGFuY2VPZk5vZGU6Okluc3RhbmNlT2ZOb2RlKGludCBsaW5lTnVtYmVyLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKQorICAgICAgICA6IFRocm93YWJsZUJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBS
ZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2luc3RhbmNlb2YsIHJp
Z2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBJbk5vZGU6Oklu
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDog
VGhyb3dhYmxlQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIGV4cHIxLCBleHByMiwgb3BfaW4sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEluTm9kZTo6SW5Ob2RlKGludCBsaW5lTnVt
YmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICA6IFRocm93YWJsZUJpbmFyeU9wTm9kZShsaW5l
TnVtYmVyLCBleHByMSwgZXhwcjIsIG9wX2luLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgRXF1YWxOb2RlOjpFcXVhbE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxE
YXRhLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX2VxLCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBFcXVhbE5vZGU6OkVxdWFsTm9kZShpbnQgbGlu
ZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJl
ciwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9lcSwgcmlnaHRI
YXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIE5vdEVxdWFsTm9kZTo6
Tm90RXF1YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAg
ICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUo
KSwgZXhwcjEsIGV4cHIyLCBvcF9uZXEsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5l
IE5vdEVxdWFsTm9kZTo6Tm90RXF1YWxOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
KQorICAgICAgICA6IEJpbmFyeU9wTm9kZShsaW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFu
VHlwZSgpLCBleHByMSwgZXhwcjIsIG9wX25lcSwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIFN0cmljdEVxdWFsTm9kZTo6U3RyaWN0RXF1YWxOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBCaW5hcnlP
cE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIy
LCBvcF9zdHJpY3RlcSwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICBpbmxpbmUgU3RyaWN0RXF1
YWxOb2RlOjpTdHJpY3RFcXVhbE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisg
ICAgICAgIDogQmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBl
KCksIGV4cHIxLCBleHByMiwgb3Bfc3RyaWN0ZXEsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAg
ewogICAgIH0KIAotICAgIGlubGluZSBOb3RTdHJpY3RFcXVhbE5vZGU6Ok5vdFN0cmljdEVxdWFs
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgIDog
QmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5cGU6OmJvb2xlYW5UeXBlKCksIGV4cHIx
LCBleHByMiwgb3BfbnN0cmljdGVxLCByaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgIGlubGluZSBO
b3RTdHJpY3RFcXVhbE5vZGU6Ok5vdFN0cmljdEVxdWFsTm9kZShpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlw
ZTo6Ym9vbGVhblR5cGUoKSwgZXhwcjEsIGV4cHIyLCBvcF9uc3RyaWN0ZXEsIHJpZ2h0SGFzQXNz
aWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBCaXRBbmROb2RlOjpCaXRBbmRO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgOiBC
aW5hcnlPcE5vZGUoZ2xvYmFsRGF0YSwgUmVzdWx0VHlwZTo6Zm9yQml0T3AoKSwgZXhwcjEsIGV4
cHIyLCBvcF9iaXRhbmQsIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgaW5saW5lIEJpdEFuZE5v
ZGU6OkJpdEFuZE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgIDog
QmluYXJ5T3BOb2RlKGxpbmVOdW1iZXIsIFJlc3VsdFR5cGU6OmZvckJpdE9wKCksIGV4cHIxLCBl
eHByMiwgb3BfYml0YW5kLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgQml0T3JOb2RlOjpCaXRPck5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRhLCBSZXN1bHRU
eXBlOjpmb3JCaXRPcCgpLCBleHByMSwgZXhwcjIsIG9wX2JpdG9yLCByaWdodEhhc0Fzc2lnbm1l
bnRzKQorICAgIGlubGluZSBCaXRPck5vZGU6OkJpdE9yTm9kZShpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlPcE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlw
ZTo6Zm9yQml0T3AoKSwgZXhwcjEsIGV4cHIyLCBvcF9iaXRvciwgcmlnaHRIYXNBc3NpZ25tZW50
cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEJpdFhPck5vZGU6OkJpdFhPck5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICA6IEJpbmFyeU9w
Tm9kZShnbG9iYWxEYXRhLCBSZXN1bHRUeXBlOjpmb3JCaXRPcCgpLCBleHByMSwgZXhwcjIsIG9w
X2JpdHhvciwgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICBpbmxpbmUgQml0WE9yTm9kZTo6Qml0
WE9yTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgOiBCaW5hcnlP
cE5vZGUobGluZU51bWJlciwgUmVzdWx0VHlwZTo6Zm9yQml0T3AoKSwgZXhwcjEsIGV4cHIyLCBv
cF9iaXR4b3IsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBMb2dpY2FsT3BOb2RlOjpMb2dpY2FsT3BOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIExvZ2ljYWxPcGVy
YXRvciBvcGVyKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIFJlc3VsdFR5
cGU6OmJvb2xlYW5UeXBlKCkpCisgICAgaW5saW5lIExvZ2ljYWxPcE5vZGU6OkxvZ2ljYWxPcE5v
ZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBMb2dpY2FsT3BlcmF0b3Igb3BlcikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShs
aW5lTnVtYmVyLCBSZXN1bHRUeXBlOjpib29sZWFuVHlwZSgpKQogICAgICAgICAsIG1fZXhwcjEo
ZXhwcjEpCiAgICAgICAgICwgbV9leHByMihleHByMikKICAgICAgICAgLCBtX29wZXJhdG9yKG9w
ZXIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDb25kaXRpb25hbE5vZGU6OkNvbmRpdGlv
bmFsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBsb2dpY2Fs
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikKLSAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBDb25kaXRpb25hbE5vZGU6
OkNvbmRpdGlvbmFsTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGxvZ2ljYWws
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQorICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9sb2dpY2FsKGxvZ2ljYWwp
CiAgICAgICAgICwgbV9leHByMShleHByMSkKICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAg
IHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5
UmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAg
IGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZShpbnQg
bGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJl
c3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDog
RXhwcmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2lkZW50KGlk
ZW50KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBAIC01OTEsMTYgKzU5MSwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFzc2lnblJlc29sdmVOb2Rl
OjpBc3NpZ25SZXNvbHZlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBB
c3NpZ25SZXNvbHZlTm9kZTo6QXNzaWduUmVzb2x2ZU5vZGUoaW50IGxpbmVOdW1iZXIsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5lTnVtYmVyKQogICAgICAg
ICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKICAgICAgICAgLCBt
X3JpZ2h0SGFzQXNzaWdubWVudHMocmlnaHRIYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAgfQog
Ci0gICAgaW5saW5lIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6UmVhZE1vZGlmeUJyYWNrZXROb2Rl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Np
b25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1
bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkK
LSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBSZWFkTW9k
aWZ5QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZShpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9w
ZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsaW5l
TnVtYmVyKQogICAgICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1f
c3Vic2NyaXB0KHN1YnNjcmlwdCkKQEAgLTYxMSw4ICs2MTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFj
a2V0Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAg
IDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5v
ZGU6OkFzc2lnbkJyYWNrZXROb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29s
IHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9i
YXNlKGJhc2UpCiAgICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQpAQCAtNjIyLDggKzYy
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWdu
RG90Tm9kZTo6QXNzaWduRG90Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIHJp
Z2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KGdsb2JhbERhdGEpCisgICAgaW5saW5lIEFzc2lnbkRvdE5vZGU6OkFzc2lnbkRvdE5vZGUoaW50
IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgVGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCiAgICAgICAgICwgbV9i
YXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTYzMiw4ICs2MzIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFJlYWRNb2RpZnlEb3RO
b2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFJlYWRNb2RpZnlEb3ROb2Rl
OjpSZWFkTW9kaWZ5RG90Tm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSog
cmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobGluZU51bWJlcikKICAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAg
ICAgLCBtX2lkZW50KGlkZW50KQpAQCAtNjQzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpBc3NpZ25FcnJvck5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0
b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9yTm9k
ZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIE9wZXJhdG9yIG9wZXIsIEV4
cHJlc3Npb25Ob2RlKiByaWdodCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobGluZU51bWJl
cikKICAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCkKICAgICAgICAgLCBtX2xlZnQobGVmdCkKICAgICAgICAgLCBtX29wZXJhdG9y
KG9wZXIpCkBAIC02NTIsNzQgKzY1Miw3NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAg
fQogCi0gICAgaW5saW5lIENvbW1hTm9kZTo6Q29tbWFOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCi0gICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQ29tbWFOb2RlOjpD
b21tYU5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxpbmVOdW1iZXIpCiAgICAg
ewogICAgICAgICBtX2V4cHJlc3Npb25zLmFwcGVuZChleHByMSk7CiAgICAgICAgIG1fZXhwcmVz
c2lvbnMuYXBwZW5kKGV4cHIyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgQ29uc3RTdGF0ZW1lbnRO
b2RlOjpDb25zdFN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb25zdERl
Y2xOb2RlKiBuZXh0KQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBp
bmxpbmUgQ29uc3RTdGF0ZW1lbnROb2RlOjpDb25zdFN0YXRlbWVudE5vZGUoaW50IGxpbmVOdW1i
ZXIsIENvbnN0RGVjbE5vZGUqIG5leHQpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVt
YmVyKQogICAgICAgICAsIG1fbmV4dChuZXh0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
U291cmNlRWxlbWVudHM6OlNvdXJjZUVsZW1lbnRzKEpTR2xvYmFsRGF0YSopCisgICAgaW5saW5l
IFNvdXJjZUVsZW1lbnRzOjpTb3VyY2VFbGVtZW50cygpCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBFbXB0eVN0YXRlbWVudE5vZGU6OkVtcHR5U3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlu
bGluZSBFbXB0eVN0YXRlbWVudE5vZGU6OkVtcHR5U3RhdGVtZW50Tm9kZShpbnQgbGluZU51bWJl
cikKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OkRlYnVnZ2VyU3RhdGVtZW50Tm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxE
YXRhKQorICAgIGlubGluZSBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OkRlYnVnZ2VyU3RhdGVtZW50
Tm9kZShpbnQgbGluZU51bWJlcikKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBpbmxpbmUgRXhwclN0YXRlbWVudE5vZGU6OkV4cHJT
dGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBFeHBy
U3RhdGVtZW50Tm9kZTo6RXhwclN0YXRlbWVudE5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiBleHByKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAg
ICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFZhclN0YXRlbWVu
dE5vZGU6OlZhclN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNz
aW9uTm9kZSogZXhwcikKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAg
aW5saW5lIFZhclN0YXRlbWVudE5vZGU6OlZhclN0YXRlbWVudE5vZGUoaW50IGxpbmVOdW1iZXIs
IEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJl
cikKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGlu
ZSBJZk5vZGU6OklmTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlmQmxvY2spCi0gICAgICAgIDogU3RhdGVtZW50
Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBJZk5vZGU6OklmTm9kZShpbnQgbGluZU51bWJl
ciwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogaWZCbG9jaykKKyAg
ICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9jb25kaXRpb24o
Y29uZGl0aW9uKQogICAgICAgICAsIG1faWZCbG9jayhpZkJsb2NrKQogICAgIHsKICAgICB9CiAK
LSAgICBpbmxpbmUgSWZFbHNlTm9kZTo6SWZFbHNlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlmQmxvY2ssIFN0
YXRlbWVudE5vZGUqIGVsc2VCbG9jaykKLSAgICAgICAgOiBJZk5vZGUoZ2xvYmFsRGF0YSwgY29u
ZGl0aW9uLCBpZkJsb2NrKQorICAgIGlubGluZSBJZkVsc2VOb2RlOjpJZkVsc2VOb2RlKGludCBs
aW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiBpZkJs
b2NrLCBTdGF0ZW1lbnROb2RlKiBlbHNlQmxvY2spCisgICAgICAgIDogSWZOb2RlKGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbiwgaWZCbG9jaykKICAgICAgICAgLCBtX2Vsc2VCbG9jayhlbHNlQmxvY2sp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBEb1doaWxlTm9kZTo6RG9XaGlsZU5vZGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIEV4cHJlc3Np
b25Ob2RlKiBleHByKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBp
bmxpbmUgRG9XaGlsZU5vZGU6OkRvV2hpbGVOb2RlKGludCBsaW5lTnVtYmVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByKQorICAgICAgICA6IFN0YXRlbWVu
dE5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAg
ICAgICwgbV9leHByKGV4cHIpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBXaGlsZU5vZGU6
OldoaWxlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9i
YWxEYXRhKQorICAgIGlubGluZSBXaGlsZU5vZGU6OldoaWxlTm9kZShpbnQgbGluZU51bWJlciwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKKyAgICAgICAg
OiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAg
ICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
Rm9yTm9kZTo6Rm9yTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBFeHByZXNzaW9uTm9kZSogZXhwcjMsIFN0
YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgYm9vbCBleHByMVdhc1ZhckRlY2wpCi0gICAgICAgIDog
U3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGb3JOb2RlOjpGb3JOb2RlKGlu
dCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIzLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGJvb2wg
ZXhwcjFXYXNWYXJEZWNsKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAg
ICAgICAgLCBtX2V4cHIxKGV4cHIxKQogICAgICAgICAsIG1fZXhwcjIoZXhwcjIpCiAgICAgICAg
ICwgbV9leHByMyhleHByMykKQEAgLTcyOSwzOCArNzI5LDM4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBBU1NFUlQoc3RhdGVtZW50KTsKICAgICB9CiAKLSAgICBpbmxpbmUgQ29udGludWVO
b2RlOjpDb250aW51ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IFN0
YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQ29udGludWVOb2RlOjpDb250aW51
ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlcikKKyAgICAgICAg
OiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChnbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIENvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxE
YXRhKQorICAgIGlubGluZSBDb250aW51ZU5vZGU6OkNvbnRpbnVlTm9kZShpbnQgbGluZU51bWJl
ciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5l
TnVtYmVyKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewogICAgIH0KICAgICAKLSAg
ICBpbmxpbmUgQnJlYWtOb2RlOjpCcmVha05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQot
ICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgQnJlYWtOb2Rl
OjpCcmVha05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlcikKKyAg
ICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9pZGVudChnbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIEJyZWFrTm9kZTo6QnJlYWtOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxE
YXRhKQorICAgIGlubGluZSBCcmVha05vZGU6OkJyZWFrTm9kZShpbnQgbGluZU51bWJlciwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVy
KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBpbmxp
bmUgUmV0dXJuTm9kZTo6UmV0dXJuTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJl
c3Npb25Ob2RlKiB2YWx1ZSkKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisg
ICAgaW5saW5lIFJldHVybk5vZGU6OlJldHVybk5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Np
b25Ob2RlKiB2YWx1ZSkKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFdpdGhOb2Rl
OjpXaXRoTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIHVpbnQzMl90IGRpdm90LCB1aW50MzJfdCBleHBy
ZXNzaW9uTGVuZ3RoKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAgICBp
bmxpbmUgV2l0aE5vZGU6OldpdGhOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSog
ZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1aW50MzJfdCBkaXZvdCwgdWludDMyX3Qg
ZXhwcmVzc2lvbkxlbmd0aCkKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAg
ICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQog
ICAgICAgICAsIG1fZGl2b3QoZGl2b3QpCkBAIC03NjgsMjEgKzc2OCwyMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIExhYmVsTm9kZTo6TGFiZWxOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgU3RhdGVtZW50
Tm9kZSogc3RhdGVtZW50KQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAg
ICBpbmxpbmUgTGFiZWxOb2RlOjpMYWJlbE5vZGUoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKKyAgICAgICAgOiBTdGF0ZW1l
bnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV9z
dGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVGhyb3dOb2Rl
OjpUaHJvd05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhw
cikKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIFRocm93
Tm9kZTo6VGhyb3dOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcikKKyAg
ICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAgICwgbV9leHByKGV4cHIp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBUcnlOb2RlOjpUcnlOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNvbnN0IElkZW50aWZpZXIm
IGV4Y2VwdGlvbklkZW50LCBib29sIGNhdGNoSGFzRXZhbCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hC
bG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQotICAgICAgICA6IFN0YXRlbWVudE5v
ZGUoZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgVHJ5Tm9kZTo6VHJ5Tm9kZShpbnQgbGluZU51bWJl
ciwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGV4Y2VwdGlvbklk
ZW50LCBib29sIGNhdGNoSGFzRXZhbCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVt
ZW50Tm9kZSogZmluYWxseUJsb2NrKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJl
cikKICAgICAgICAgLCBtX3RyeUJsb2NrKHRyeUJsb2NrKQogICAgICAgICAsIG1fZXhjZXB0aW9u
SWRlbnQoZXhjZXB0aW9uSWRlbnQpCiAgICAgICAgICwgbV9jYXRjaEJsb2NrKGNhdGNoQmxvY2sp
CkBAIC03OTEsODIgKzc5MSw4MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIFBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgaW5saW5lIFBhcmFtZXRlck5vZGU6OlBhcmFtZXRl
ck5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgICAgIDogbV9pZGVudChpZGVudCkK
ICAgICAgICAgLCBtX25leHQoMCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFBhcmFtZXRl
ck5vZGU6OlBhcmFtZXRlck5vZGUoSlNHbG9iYWxEYXRhKiwgUGFyYW1ldGVyTm9kZSogbCwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgaW5saW5lIFBhcmFtZXRlck5vZGU6OlBhcmFtZXRl
ck5vZGUoUGFyYW1ldGVyTm9kZSogbCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgICAg
IDogbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX25leHQoMCkKICAgICB7CiAgICAgICAgIGwt
Pm1fbmV4dCA9IHRoaXM7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4
cHJOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1l
dGVyTm9kZSogcGFyYW1ldGVyKQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEp
CisgICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKGludCBsaW5lTnVtYmVyLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIpCisgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobGluZU51bWJlcikKICAgICAgICAgLCBtX2JvZHkoYm9keSkKICAgICB7CiAg
ICAgICAgIG1fYm9keS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQpOwog
ICAgIH0KIAotICAgIGlubGluZSBGdW5jRGVjbE5vZGU6OkZ1bmNEZWNsTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRl
cikKLSAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIEZ1bmNE
ZWNsTm9kZTo6RnVuY0RlY2xOb2RlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVt
YmVyKQogICAgICAgICAsIG1fYm9keShib2R5KQogICAgIHsKICAgICAgICAgbV9ib2R5LT5maW5p
c2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVyLCBpZGVudCk7CiAgICAgfQogCi0gICAgaW5saW5l
IENhc2VDbGF1c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgU291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpCisgICAgaW5saW5lIENhc2VD
bGF1c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwciwgU291cmNlRWxl
bWVudHMqIHN0YXRlbWVudHMpCiAgICAgICAgIDogbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9z
dGF0ZW1lbnRzKHN0YXRlbWVudHMpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDbGF1c2VM
aXN0Tm9kZTo6Q2xhdXNlTGlzdE5vZGUoSlNHbG9iYWxEYXRhKiwgQ2FzZUNsYXVzZU5vZGUqIGNs
YXVzZSkKKyAgICBpbmxpbmUgQ2xhdXNlTGlzdE5vZGU6OkNsYXVzZUxpc3ROb2RlKENhc2VDbGF1
c2VOb2RlKiBjbGF1c2UpCiAgICAgICAgIDogbV9jbGF1c2UoY2xhdXNlKQogICAgICAgICAsIG1f
bmV4dCgwKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQ2xhdXNlTGlzdE5vZGU6OkNsYXVz
ZUxpc3ROb2RlKEpTR2xvYmFsRGF0YSosIENsYXVzZUxpc3ROb2RlKiBjbGF1c2VMaXN0LCBDYXNl
Q2xhdXNlTm9kZSogY2xhdXNlKQorICAgIGlubGluZSBDbGF1c2VMaXN0Tm9kZTo6Q2xhdXNlTGlz
dE5vZGUoQ2xhdXNlTGlzdE5vZGUqIGNsYXVzZUxpc3QsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2Up
CiAgICAgICAgIDogbV9jbGF1c2UoY2xhdXNlKQogICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsK
ICAgICAgICAgY2xhdXNlTGlzdC0+bV9uZXh0ID0gdGhpczsKICAgICB9CiAKLSAgICBpbmxpbmUg
Q2FzZUJsb2NrTm9kZTo6Q2FzZUJsb2NrTm9kZShKU0dsb2JhbERhdGEqLCBDbGF1c2VMaXN0Tm9k
ZSogbGlzdDEsIENhc2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSog
bGlzdDIpCisgICAgaW5saW5lIENhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlz
dE5vZGUqIGxpc3QxLCBDYXNlQ2xhdXNlTm9kZSogZGVmYXVsdENsYXVzZSwgQ2xhdXNlTGlzdE5v
ZGUqIGxpc3QyKQogICAgICAgICA6IG1fbGlzdDEobGlzdDEpCiAgICAgICAgICwgbV9kZWZhdWx0
Q2xhdXNlKGRlZmF1bHRDbGF1c2UpCiAgICAgICAgICwgbV9saXN0MihsaXN0MikKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIFN3aXRjaE5vZGU6OlN3aXRjaE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2FzZUJsb2NrTm9kZSogYmxvY2spCi0g
ICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBTd2l0Y2hOb2Rl
OjpTd2l0Y2hOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2FzZUJs
b2NrTm9kZSogYmxvY2spCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKQogICAg
ICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYmxvY2soYmxvY2spCiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBDb25zdERlY2xOb2RlOjpDb25zdERlY2xOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBp
bml0KQotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCisgICAgaW5saW5lIENv
bnN0RGVjbE5vZGU6OkNvbnN0RGVjbE5vZGUoaW50IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShsaW5lTnVtYmVyKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9uZXh0
KDApCiAgICAgICAgICwgbV9pbml0KGluaXQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBC
bG9ja05vZGU6OkJsb2NrTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1l
bnRzKiBzdGF0ZW1lbnRzKQotICAgICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKKyAg
ICBpbmxpbmUgQmxvY2tOb2RlOjpCbG9ja05vZGUoaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1l
bnRzKiBzdGF0ZW1lbnRzKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAg
ICAgICAgLCBtX3N0YXRlbWVudHMoc3RhdGVtZW50cykKICAgICB7CiAgICAgfQogCi0gICAgaW5s
aW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVz
c2lvbk5vZGUqIGwsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1l
bnQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGb3JJ
bk5vZGU6OkZvckluTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVy
LCBFeHByZXNzaW9uTm9kZSogbCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudCkKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgICAg
ICwgbV9pZGVudChnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKICAg
ICAgICAgLCBtX2luaXQoMCkKICAgICAgICAgLCBtX2xleHByKGwpCkBAIC04NzYsMTcgKzg3Niwx
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZvckluTm9k
ZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVu
dE5vZGUqIHN0YXRlbWVudCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZz
ZXQpCi0gICAgICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxEYXRhKQorICAgIGlubGluZSBGb3JJ
bk5vZGU6OkZvckluTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgZGl2b3QsIGludCBzdGFy
dE9mZnNldCwgaW50IGVuZE9mZnNldCkKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1i
ZXIpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2luaXQoMCkKLSAgICAg
ICAgLCBtX2xleHByKG5ldyAoZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUoZ2xvYmFsRGF0YSwgaWRl
bnQsIGRpdm90IC0gc3RhcnRPZmZzZXQpKQorICAgICAgICAsIG1fbGV4cHIobmV3IChnbG9iYWxE
YXRhKSBSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCBpZGVudCwgZGl2b3QgLSBzdGFydE9mZnNldCkp
CiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50
KQogICAgICAgICAsIG1faWRlbnRJc1ZhckRlY2wodHJ1ZSkKICAgICB7CiAgICAgICAgIGlmIChp
bikgewotICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKGdsb2JhbERh
dGEpIEFzc2lnblJlc29sdmVOb2RlKGdsb2JhbERhdGEsIGlkZW50LCBpbiwgdHJ1ZSk7CisgICAg
ICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAoZ2xvYmFsRGF0YSkgQXNzaWdu
UmVzb2x2ZU5vZGUobGluZU51bWJlciwgaWRlbnQsIGluLCB0cnVlKTsKICAgICAgICAgICAgIG5v
ZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0gc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCAtIGRpdm90KTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVJbmZvLmgJKHJldmlzaW9uIDk4
NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIE5vZGVJbmZvX2gKIAogI2luY2x1ZGUg
Ik5vZGVzLmgiCi0jaW5jbHVkZSAiUGFyc2VyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gOTg3NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBTdGF0ZW1lbnROb2RlOjpz
ZXRMb2MoaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogewotICAgIG1fbGluZSA9IGZpcnN0
TGluZTsKKyAgICBtX2xpbmVOdW1iZXIgPSBmaXJzdExpbmU7CiAgICAgbV9sYXN0TGluZSA9IGxh
c3RMaW5lOwogfQogCkBAIC04OSwxNyArODksMTcgQEAgU2NvcGVOb2RlRGF0YTo6U2NvcGVOb2Rl
RGF0YShQYXJzZXJBcmVuYQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2Nv
cGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNjb3BlTm9kZTo6U2NvcGVO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpblN0cmljdENvbnRleHQpCi0gICAg
OiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCitTY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBib29sIGluU3RyaWN0Q29udGV4dCkK
KyAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAsIFBhcnNlckFyZW5hUmVmQ291
bnRlZChnbG9iYWxEYXRhKQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJp
Y3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCiB7CiB9CiAKLVNjb3BlTm9kZTo6U2NvcGVOb2Rl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayog
ZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxE
YXRhKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKQogICAgICwgUGFy
c2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCi0gICAgLCBtX2RhdGEoYWRvcHRQdHIobmV3
IFNjb3BlTm9kZURhdGEoZ2xvYmFsRGF0YS0+cGFyc2VyLT5hcmVuYSgpLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIG51bUNvbnN0YW50cykpKQorICAg
ICwgbV9kYXRhKGFkb3B0UHRyKG5ldyBTY29wZU5vZGVEYXRhKCpnbG9iYWxEYXRhLT5wYXJzZXJB
cmVuYSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBu
dW1Db25zdGFudHMpKSkKICAgICAsIG1fZmVhdHVyZXMoZmVhdHVyZXMpCiAgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCiB7CkBAIC0xMTIsMTQgKzExMiwxNCBAQCBTdGF0ZW1lbnROb2RlKiBTY29wZU5v
ZGU6OnNpbmdsZVN0YXRlbWVuCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
cm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgUHJvZ3Jh
bU5vZGU6OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2Nv
cGVOb2RlKGdsb2JhbERhdGEsIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ss
IGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFByb2dy
YW1Ob2RlOjpQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVt
YmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNlLCBj
aGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVz
LCBudW1Db25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1O
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPFByb2dy
YW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50
IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNr
LCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFi
bGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50
IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJv
Z3JhbU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1
cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVt
YmVyLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFibGVzLCBz
b3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPmRhdGEo
KS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJl
bW92ZUxhc3QoKTsKQEAgLTEzMCwxNCArMTMwLDE0IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+
IFByb2dyYW1Ob2RlOjpjcmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2
YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBFdmFsTm9kZTo6
RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlm
aWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xv
YmFsRGF0YSwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRW
YXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6IFNj
b3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFj
aywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykK
IHsKIH0KIAotUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0
YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
aWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0
cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51
bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKGds
b2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0
dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFT
U0VSVChub2RlLT5kYXRhKCktPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRh
dGEoKS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0xNTQsMTMgKzE1NCwxMyBAQCBGdW5jdGlv
blBhcmFtZXRlcnM6OkZ1bmN0aW9uUGFyYW1ldGVycyhQCiAgICAgICAgIGFwcGVuZChwYXJhbWV0
ZXItPmlkZW50KCkpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQotICAg
IDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlv
bkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50
IGxpbmVOdW1iZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorICAgIDogU2NvcGVOb2RlKGdsb2Jh
bERhdGEsIGxpbmVOdW1iZXIsIGluU3RyaWN0Q29udGV4dCkKIHsKIH0KIAotaW5saW5lIEZ1bmN0
aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2
YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0
YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUo
Z2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogewog
fQogCkBAIC0xNzcsMTQgKzE3NywxNCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBh
cnNpbmcoUGFzCiAgICAgbV9pZGVudCA9IGlkZW50OwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBG
dW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlu
U3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBib29sIGluU3RyaWN0
Q29udGV4dCkKIHsKLSAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwg
aW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFs
RGF0YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxGdW5j
dGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291
cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sq
IGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKIHsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJv
ZHlOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxE
YXRhLCBsaW5lTnVtYmVyLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRW
YXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNT
RVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+ZGF0
YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgJKHJldmlzaW9uIDk4NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBKU0dsb2JhbERhdGEqKTsK
ICAgICB9OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFBhcnNlckFy
ZW5hRGF0YSA6IFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKKyAgICAgICAgVCBkYXRhOworICAgIH07
CisKICAgICBjbGFzcyBQYXJzZXJBcmVuYVJlZkNvdW50ZWQgOiBwdWJsaWMgUmVmQ291bnRlZDxQ
YXJzZXJBcmVuYVJlZkNvdW50ZWQ+IHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFBhcnNlckFy
ZW5hUmVmQ291bnRlZChKU0dsb2JhbERhdGEqKTsKQEAgLTEyOCwyMiArMTMzLDIyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxl
IHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIE5vZGUoSlNHbG9iYWxEYXRhKik7CisgICAgICAg
IE5vZGUoaW50KTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZSgpIHsgfQog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24gPSAwKSA9IDA7CiAKLSAgICAgICAgaW50IGxp
bmVObygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZTsgfQorICAgICAgICBpbnQgbGluZU5vKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGlu
dCBtX2xpbmU7CisgICAgICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgfTsKIAogICAgIGNsYXNz
IEV4cHJlc3Npb25Ob2RlIDogcHVibGljIE5vZGUgewogICAgIHByb3RlY3RlZDoKLSAgICAgICAg
RXhwcmVzc2lvbk5vZGUoSlNHbG9iYWxEYXRhKiwgUmVzdWx0VHlwZSA9IFJlc3VsdFR5cGU6OnVu
a25vd25UeXBlKCkpOworICAgICAgICBFeHByZXNzaW9uTm9kZShpbnQsIFJlc3VsdFR5cGUgPSBS
ZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3Myw3ICsxNzgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBwdWJsaWMg
Tm9kZSB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBTdGF0ZW1lbnROb2RlKEpTR2xvYmFsRGF0
YSopOworICAgICAgICBTdGF0ZW1lbnROb2RlKGludCk7CiAKICAgICBwdWJsaWM6CiAgICAgICAg
IHZvaWQgc2V0TG9jKGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CkBAIC0xOTIsNyArMTk3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOdWxsTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBOdWxsTm9kZShKU0dsb2JhbERhdGEq
KTsKKyAgICAgICAgTnVsbE5vZGUoaW50KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTIwMiw3ICsyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEJvb2xlYW5Ob2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEJvb2xlYW5Ob2RlKEpTR2xvYmFsRGF0YSosIGJvb2wgdmFsdWUpOworICAgICAgICBCb29s
ZWFuTm9kZShpbnQsIGJvb2wgdmFsdWUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtMjE0LDcgKzIxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
TnVtYmVyTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBOdW1iZXJOb2RlKEpTR2xvYmFsRGF0YSosIGRvdWJsZSB2YWx1ZSk7CisgICAgICAgIE51bWJl
ck5vZGUoaW50LCBkb3VibGUgdmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICAgICAgdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUp
IHsgbV92YWx1ZSA9IHZhbHVlOyB9CkBAIC0yMzAsNyArMjM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBTdHJpbmdOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFN0cmluZ05vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmll
ciYpOworICAgICAgICBTdHJpbmdOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQogCkBAIC0z
NDAsNyArMzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUmVnRXhwTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVu
dGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncyk7CisgICAgICAgIFJlZ0V4
cE5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBm
bGFncyk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0zNTEsNyAr
MzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBUaGlzTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBUaGlzTm9kZShKU0dsb2JhbERh
dGEqKTsKKyAgICAgICAgVGhpc05vZGUoaW50KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKQEAgLTM1OSw3ICszNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImLCBpbnQg
c3RhcnRPZmZzZXQpOworICAgICAgICBSZXNvbHZlTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXIm
LCBpbnQgc3RhcnRPZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50OyB9CiAKQEAgLTM3Niw4ICszODEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIFBhcnNlckFyZW5h
RnJlZWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRWxlbWVudE5vZGUoSlNHbG9iYWxEYXRh
KiwgaW50IGVsaXNpb24sIEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgICAgIEVsZW1lbnROb2RlKEpT
R2xvYmFsRGF0YSosIEVsZW1lbnROb2RlKiwgaW50IGVsaXNpb24sIEV4cHJlc3Npb25Ob2RlKik7
CisgICAgICAgIEVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSopOworICAg
ICAgICBFbGVtZW50Tm9kZShFbGVtZW50Tm9kZSosIGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9k
ZSopOwogCiAgICAgICAgIGludCBlbGlzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGlzaW9uOyB9
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiB2YWx1ZSgpIHsgcmV0dXJuIG1fbm9kZTsgfQpAQCAt
MzkxLDExICszOTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheU5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJyYXlOb2Rl
KEpTR2xvYmFsRGF0YSosIGludCBlbGlzaW9uKTsKLSAgICAgICAgQXJyYXlOb2RlKEpTR2xvYmFs
RGF0YSosIEVsZW1lbnROb2RlKik7Ci0gICAgICAgIEFycmF5Tm9kZShKU0dsb2JhbERhdGEqLCBp
bnQgZWxpc2lvbiwgRWxlbWVudE5vZGUqKTsKKyAgICAgICAgQXJyYXlOb2RlKGludCwgaW50IGVs
aXNpb24pOworICAgICAgICBBcnJheU5vZGUoaW50LCBFbGVtZW50Tm9kZSopOworICAgICAgICBB
cnJheU5vZGUoaW50LCBpbnQgZWxpc2lvbiwgRWxlbWVudE5vZGUqKTsKIAotICAgICAgICBBcmd1
bWVudExpc3ROb2RlKiB0b0FyZ3VtZW50TGlzdChKU0dsb2JhbERhdGEqKSBjb25zdDsKKyAgICAg
ICAgQXJndW1lbnRMaXN0Tm9kZSogdG9Bcmd1bWVudExpc3QoSlNHbG9iYWxEYXRhKiwgaW50KSBj
b25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTQxMSw4ICs0
MTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gVHlwZSB7
IENvbnN0YW50ID0gMSwgR2V0dGVyID0gMiwgU2V0dGVyID0gNCB9OwogCi0gICAgICAgIFByb3Bl
cnR5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9u
Tm9kZSogdmFsdWUsIFR5cGUpOwotICAgICAgICBQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiwg
ZG91YmxlIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiB2YWx1ZSwgVHlwZSk7CisgICAgICAgIFByb3Bl
cnR5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUq
LCBUeXBlKTsKKyAgICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGRvdWJsZSwgRXhw
cmVzc2lvbk5vZGUqLCBUeXBlKTsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQpAQCAtNDI2LDggKzQzMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgUHJvcGVydHlMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFByb3BlcnR5TGlzdE5vZGUoSlNHbG9iYWxEYXRhKiwgUHJvcGVydHlOb2RlKik7Ci0gICAg
ICAgIFByb3BlcnR5TGlzdE5vZGUoSlNHbG9iYWxEYXRhKiwgUHJvcGVydHlOb2RlKiwgUHJvcGVy
dHlMaXN0Tm9kZSopOworICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKGludCwgUHJvcGVydHlOb2Rl
Kik7CisgICAgICAgIFByb3BlcnR5TGlzdE5vZGUoaW50LCBQcm9wZXJ0eU5vZGUqLCBQcm9wZXJ0
eUxpc3ROb2RlKik7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogCkBAIC00MzgsOCArNDQzLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBPYmplY3RMaXRlcmFsTm9k
ZShKU0dsb2JhbERhdGEqKTsKLSAgICAgICAgT2JqZWN0TGl0ZXJhbE5vZGUoSlNHbG9iYWxEYXRh
KiwgUHJvcGVydHlMaXN0Tm9kZSopOworICAgICAgICBPYmplY3RMaXRlcmFsTm9kZShpbnQpOwor
ICAgICAgICBPYmplY3RMaXRlcmFsTm9kZShpbnQsIFByb3BlcnR5TGlzdE5vZGUqKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTQ0OSw3ICs0NTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgYm9vbCBzdWJzY3JpcHRI
YXNBc3NpZ25tZW50cyk7CisgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUoaW50LCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgYm9vbCBzdWJzY3JpcHRI
YXNBc3NpZ25tZW50cyk7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGJhc2UoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2U7IH0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3Vic2NyaXB0OyB9CkBAIC00NjcsNyArNDcyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBEb3RBY2Nlc3Nvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAg
ICBEb3RBY2Nlc3Nvck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNv
bnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgRG90QWNjZXNzb3JOb2RlKGludCwgRXhwcmVzc2lv
bk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImKTsKIAogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQpAQCAtNDg0LDggKzQ4
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJndW1lbnRMaXN0Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFyZ3VtZW50TGlzdE5vZGUoSlNHbG9i
YWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsKLSAgICAgICAgQXJndW1lbnRMaXN0Tm9kZShKU0ds
b2JhbERhdGEqLCBBcmd1bWVudExpc3ROb2RlKiwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAg
QXJndW1lbnRMaXN0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIEFyZ3VtZW50
TGlzdE5vZGUoaW50LCBBcmd1bWVudExpc3ROb2RlKiwgRXhwcmVzc2lvbk5vZGUqKTsKIAogICAg
ICAgICBBcmd1bWVudExpc3ROb2RlKiBtX25leHQ7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBt
X2V4cHI7CkBAIC00OTYsMTYgKzUwMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEFyZ3VtZW50c05vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBBcmd1bWVudHNOb2RlKEpTR2xvYmFsRGF0YSopOwotICAgICAgICBBcmd1bWVu
dHNOb2RlKEpTR2xvYmFsRGF0YSosIEFyZ3VtZW50TGlzdE5vZGUqKTsKKyAgICAgICAgQXJndW1l
bnRzTm9kZSgpOworICAgICAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUqKTsKIAog
ICAgICAgICBBcmd1bWVudExpc3ROb2RlKiBtX2xpc3ROb2RlOwogICAgIH07CiAKICAgICBjbGFz
cyBOZXdFeHByTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE5ld0V4cHJOb2RlKEpTR2xvYmFs
RGF0YSosIEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgICAgIE5ld0V4cHJOb2RlKEpTR2xvYmFsRGF0
YSosIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSopOworICAgICAgICBOZXdFeHByTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIE5ld0V4cHJOb2RlKGludCwgRXhwcmVz
c2lvbk5vZGUqLCBBcmd1bWVudHNOb2RlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC01MTYsNyArNTIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBFdmFsRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxGdW5jdGlv
bkNhbGxOb2RlKEpTR2xvYmFsRGF0YSosIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIEV2YWxG
dW5jdGlvbkNhbGxOb2RlKGludCwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTUyNiw3ICs1MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSosIEFy
Z3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKQEAgLTUzNyw3ICs1NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3Vt
ZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGludCwgY29uc3Qg
SWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC01NTAsNyArNTU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAg
ICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAg
ICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSog
YmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAg
ICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTU2Miw3ICs1NjcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAg
ICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgRnVuY3Rp
b25DYWxsRG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
JiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KTsKQEAgLTU3NSw3ICs1ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENhbGxG
dW5jdGlvbkNhbGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwor
ICAgICAgICBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTU4Myw3ICs1ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAKICAgICBjbGFzcyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRnVuY3Rp
b25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUo
aW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05v
ZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC01OTEsNyAr
NTk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcmVQb3N0UmVzb2x2ZU5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7
CiAgICAgcHVibGljOgotICAgICAgICBQcmVQb3N0UmVzb2x2ZU5vZGUoSlNHbG9iYWxEYXRhKiwg
Y29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUHJlUG9zdFJlc29sdmVOb2RlKGludCwgY29u
c3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgbV9pZGVudDsKQEAgLTU5OSw3ICs2MDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFBvc3RmaXhSZXNvbHZlTm9kZSA6IHB1YmxpYyBQcmVQb3N0UmVzb2x2ZU5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdGZpeFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNv
bnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBQb3N0Zml4UmVzb2x2ZU5vZGUo
aW50LCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKQEAgLTYwOSw3ICs2MTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIFBvc3RmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVi
bGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBv
c3RmaXhCcmFja2V0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUG9zdGZpeEJyYWNr
ZXROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3Jp
cHQsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBA
IC02MjEsNyArNjI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQb3N0Zml4RG90
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBvc3RmaXhEb3ROb2RlKEpTR2xvYmFsRGF0
YSosIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsK
KyAgICAgICAgUG9zdGZpeERvdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCk7CkBAIC02MzMsNyArNjM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQ
b3N0Zml4RXJyb3JOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxl
U3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdGZpeEVycm9yTm9k
ZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIFBv
c3RmaXhFcnJvck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02NDQsNyArNjQ5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWxldGVSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIERlbGV0ZVJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXIm
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCk7CisgICAgICAgIERlbGV0ZVJlc29sdmVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY1NCw3ICs2NTksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgRGVsZXRlQnJhY2tldE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lv
bk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgRGVsZXRl
QnJhY2tldE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1
YnNjcmlwdCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjY1
LDcgKzY3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRlRG90Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZURvdE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIERlbGV0ZURvdE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY3Niw3ICs2ODEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZVZhbHVlTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVWYWx1ZU5vZGUoSlNHbG9iYWxE
YXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAgRGVsZXRlVmFsdWVOb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAg
LTY4Niw3ICs2OTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFZvaWROb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFZvaWROb2RlKEpT
R2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIFZvaWROb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAg
LTY5Niw3ICs3MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFR5cGVPZlJlc29s
dmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFR5
cGVPZlJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAg
ICAgVHlwZU9mUmVzb2x2ZU5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0K
IApAQCAtNzA4LDcgKzcxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVHlwZU9m
VmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFR5cGVPZlZhbHVlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAgICAg
ICBUeXBlT2ZWYWx1ZU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzE4LDcgKzcyMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUHJlZml4UmVzb2x2ZU5vZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29sdmVO
b2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByZWZpeFJlc29sdmVOb2RlKEpTR2xvYmFsRGF0
YSosIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBQcmVmaXhSZXNvbHZl
Tm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzI4LDcgKzczMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUHJlZml4QnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFByZWZpeEJyYWNrZXROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBPcGVyYXRvciwgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBQ
cmVmaXhCcmFja2V0Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtNzQwLDcgKzc0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UHJlZml4RG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVBy
ZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJlZml4RG90
Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CisgICAgICAgIFByZWZpeERvdE5vZGUoaW50LCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03NTIsNyArNzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBQcmVmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1
YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBQcmVm
aXhFcnJvck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwor
ICAgICAgICBQcmVmaXhFcnJvck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1
bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03NjMsNyArNzY4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBVbmFyeU9wTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBVbmFyeU9wTm9kZShKU0dsb2JhbERh
dGEqLCBSZXN1bHRUeXBlLCBFeHByZXNzaW9uTm9kZSosIE9wY29kZUlEKTsKKyAgICAgICAgVW5h
cnlPcE5vZGUoaW50LCBSZXN1bHRUeXBlLCBFeHByZXNzaW9uTm9kZSosIE9wY29kZUlEKTsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSB7IHJldHVybiBt
X2V4cHI7IH0KQEAgLTc4MCw3ICs3ODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IFVuYXJ5UGx1c05vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgVW5hcnlQbHVzTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAgICAg
ICBVbmFyeVBsdXNOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgRXhwcmVzc2lvbk5vZGUqIHN0cmlwVW5hcnlQbHVzKCkgeyByZXR1cm4g
ZXhwcigpOyB9CkBAIC03ODgsMTcgKzc5MywxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIE5lZ2F0ZU5vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgTmVnYXRlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBO
ZWdhdGVOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsKICAgICB9OwogCiAgICAgY2xhc3MgQml0
d2lzZU5vdE5vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
Qml0d2lzZU5vdE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsKKyAgICAgICAg
Qml0d2lzZU5vdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogICAgIH07CiAKICAgICBjbGFz
cyBMb2dpY2FsTm90Tm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBMb2dpY2FsTm90Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAg
ICAgICBMb2dpY2FsTm90Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZhbHNlVGFyZ2V0LCBib29sIGZhbGxU
aHJvdWdoTWVhbnNUcnVlKTsKICAgICAgICAgdmlydHVhbCBib29sIGhhc0NvbmRpdGlvbkNvbnRl
eHRDb2RlZ2VuKCkgY29uc3QgeyByZXR1cm4gZXhwcigpLT5oYXNDb25kaXRpb25Db250ZXh0Q29k
ZWdlbigpOyB9CkBAIC04MDYsOCArODExLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBCaW5hcnlPcE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgQmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
KTsKLSAgICAgICAgQmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSosIFJlc3VsdFR5cGUsIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNvZGVJRCwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgQmluYXJ5T3BOb2RlKGludCwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlELCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOworICAgICAgICBCaW5hcnlPcE5vZGUoaW50LCBSZXN1bHRUeXBlLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFN0cmNh
dChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkZXN0aW5hdGlvbiwg
UmVnaXN0ZXJJRCogbGhzID0gMCwgUmVhZE1vZGlmeVJlc29sdmVOb2RlKiBlbWl0RXhwcmVzc2lv
bkluZm9Gb3JNZSA9IDApOwogCkBAIC04MzEsNzIgKzgzNiw3MiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIE11bHROb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBNdWx0Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAg
ICAgTXVsdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAgY2xhc3MgRGl2
Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGl2Tm9k
ZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgRGl2Tm9kZShpbnQsIEV4
cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFz
QXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBNb2ROb2RlIDogcHVibGljIEJpbmFy
eU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBNb2ROb2RlKEpTR2xvYmFsRGF0YSosIEV4
cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFz
QXNzaWdubWVudHMpOworICAgICAgICBNb2ROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAg
fTsKIAogICAgIGNsYXNzIEFkZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEFkZE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
ICAgIEFkZE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNBZGQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKIAogICAgIGNsYXNzIFN1Yk5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN1Yk5vZGUo
SlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIFN1Yk5vZGUoaW50LCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdWJ0cmFjdCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB9OwogCiAgICAgY2xhc3MgTGVmdFNoaWZ0Tm9kZSA6IHB1Ymxp
YyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTGVmdFNoaWZ0Tm9kZShKU0ds
b2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgTGVmdFNoaWZ0Tm9kZShpbnQsIEV4
cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFz
QXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBSaWdodFNoaWZ0Tm9kZSA6IHB1Ymxp
YyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmlnaHRTaGlmdE5vZGUoSlNH
bG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIFJpZ2h0U2hpZnROb2RlKGludCwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIFVuc2lnbmVkUmlnaHRTaGlmdE5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFVuc2lnbmVk
UmlnaHRTaGlmdE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIFVu
c2lnbmVkUmlnaHRTaGlmdE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAg
Y2xhc3MgTGVzc05vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIExlc3NOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBMZXNz
Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBHcmVhdGVyTm9k
ZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JlYXRlck5v
ZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIEdyZWF0ZXJOb2RlKGlu
dCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNzIExlc3NFcU5vZGUgOiBwdWJs
aWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExlc3NFcU5vZGUoSlNHbG9i
YWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIExlc3NFcU5vZGUoaW50LCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKTsKICAgICB9OwogCiAgICAgY2xhc3MgR3JlYXRlckVxTm9kZSA6IHB1YmxpYyBCaW5h
cnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JlYXRlckVxTm9kZShKU0dsb2JhbERh
dGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgR3JlYXRlckVxTm9kZShpbnQsIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBUaHJvd2FibGVCaW5hcnlPcE5vZGUgOiBwdWJs
aWMgQmluYXJ5T3BOb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgVGhyb3dhYmxlQmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSosIFJlc3Vs
dFR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBPcGNv
ZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKLSAgICAgICAgVGhyb3dhYmxlQmluYXJ5
T3BOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBPcGNvZGVJRCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAg
VGhyb3dhYmxlQmluYXJ5T3BOb2RlKGludCwgUmVzdWx0VHlwZSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlELCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOworICAgICAgICBUaHJvd2FibGVCaW5hcnlPcE5vZGUoaW50LCBFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgT3Bjb2RlSUQsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC05
MDQsNyArOTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgSW5zdGFuY2VP
Zk5vZGUgOiBwdWJsaWMgVGhyb3dhYmxlQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEluc3RhbmNlT2ZOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAg
ICBJbnN0YW5jZU9mTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTEyLDEyICs5MTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBJbk5vZGUgOiBwdWJsaWMgVGhyb3dhYmxlQmluYXJ5T3BOb2RlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIEluTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
KyAgICAgICAgSW5Ob2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNsYXNz
IEVxdWFsTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
RXF1YWxOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgICAgICBFcXVhbE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTkyNSwxMiArOTMwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
Tm90RXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBOb3RFcXVhbE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIE5v
dEVxdWFsTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIH07CiAKICAgICBjbGFzcyBTdHJp
Y3RFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFN0cmljdEVxdWFsTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAg
U3RyaWN0RXF1YWxOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCk7CkBAIC05MzgsMjggKzk0MywyOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIE5vdFN0cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgTm90U3RyaWN0RXF1YWxOb2RlKEpTR2xvYmFsRGF0YSosIEV4
cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFz
QXNzaWdubWVudHMpOworICAgICAgICBOb3RTdHJpY3RFcXVhbE5vZGUoaW50LCBFeHByZXNzaW9u
Tm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKICAgICB9OwogCiAgICAgY2xhc3MgQml0QW5kTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQml0QW5kTm9kZShKU0dsb2JhbERhdGEqLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKKyAgICAgICAgQml0QW5kTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAg
IH07CiAKICAgICBjbGFzcyBCaXRPck5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEJpdE9yTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
KyAgICAgICAgQml0T3JOb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgfTsKIAogICAgIGNs
YXNzIEJpdFhPck5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEJpdFhPck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIEJp
dFhPck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICB9OwogCiAgICAgLy8gbV9leHByMSAm
JiBtX2V4cHIyLCBtX2V4cHIxIHx8IG1fZXhwcjIKICAgICBjbGFzcyBMb2dpY2FsT3BOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExvZ2ljYWxPcE5v
ZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIsIExvZ2ljYWxPcGVyYXRvcik7CisgICAgICAgIExvZ2ljYWxPcE5vZGUoaW50LCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgTG9naWNhbE9wZXJhdG9y
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTk3NCw3ICs5Nzks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9n
aWNhbCA/IG1fZXhwcjEgOiBtX2V4cHIyIgogICAgIGNsYXNzIENvbmRpdGlvbmFsTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBDb25kaXRpb25hbE5v
ZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKTsKKyAgICAgICAgQ29uZGl0aW9uYWxOb2Rl
KGludCwgRXhwcmVzc2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KTsKQEAgLTk4Niw3ICs5OTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlYWRN
b2RpZnlSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlYWRNb2RpZnlSZXNvbHZl
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Np
b25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBSZWFk
TW9kaWZ5UmVzb2x2ZU5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJl
c3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAwMCw3ICsxMDA1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25SZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEFzc2lnblJlc29sdmVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXIm
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
ICAgIEFzc2lnblJlc29sdmVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwMTMsNyArMTAxOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5v
ZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KTsKKyAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGludCwgRXhwcmVzc2lv
bk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNz
aW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTAyOCw3ICsxMDMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25C
cmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2lnbkJyYWNrZXROb2RlKEpTR2xv
YmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBBc3NpZ25CcmFja2V0Tm9kZShpbnQs
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNz
aW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTA0Miw3ICsxMDQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25E
b3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lv
bkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduRG90Tm9kZShKU0dsb2JhbERhdGEq
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIEFzc2lnbkRvdE5v
ZGUoaW50LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDU1LDcgKzEwNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFJlYWRNb2RpZnlEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUmVhZE1vZGlmeURvdE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUmVhZE1vZGlmeURvdE5vZGUoaW50
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHBy
ZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTA2OSw3ICsxMDc0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25FcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAg
ICAgICBBc3NpZ25FcnJvck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQs
IE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgQXNzaWduRXJyb3JO
b2RlKGludCwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSog
cmlnaHQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwODMs
NyArMTA4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29tbWFOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgQ29tbWFOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKTsKKyAgICAgICAgQ29tbWFOb2RlKGludCwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOwogCiAgICAgICAgIHVz
aW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXc7CiAKQEAgLTEwOTgsNyArMTEw
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIENvbnN0RGVjbE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ29uc3REZWNsTm9k
ZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqKTsKKyAg
ICAgICAgQ29uc3REZWNsTm9kZShpbnQsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9k
ZSopOwogCiAgICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2lu
aXQ7IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQoKSB7IHJldHVybiBtX2lkZW50
OyB9CkBAIC0xMTE4LDcgKzExMjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENv
bnN0U3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIENvbnN0U3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqLCBDb25zdERlY2xOb2RlKiBu
ZXh0KTsKKyAgICAgICAgQ29uc3RTdGF0ZW1lbnROb2RlKGludCwgQ29uc3REZWNsTm9kZSogbmV4
dCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMTI4LDcgKzEx
MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNvdXJjZUVsZW1lbnRzIDogcHVi
bGljIFBhcnNlckFyZW5hRGVsZXRhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNvdXJjZUVs
ZW1lbnRzKEpTR2xvYmFsRGF0YSopOworICAgICAgICBTb3VyY2VFbGVtZW50cygpOwogCiAgICAg
ICAgIHZvaWQgYXBwZW5kKFN0YXRlbWVudE5vZGUqKTsKIApAQCAtMTE0Myw3ICsxMTQ4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCbG9ja05vZGUgOiBwdWJsaWMgU3RhdGVtZW50
Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBCbG9ja05vZGUoSlNHbG9iYWxEYXRhKiwgU291
cmNlRWxlbWVudHMqID0gMCk7CisgICAgICAgIEJsb2NrTm9kZShpbnQsIFNvdXJjZUVsZW1lbnRz
KiA9IDApOwogCiAgICAgICAgIFN0YXRlbWVudE5vZGUqIHNpbmdsZVN0YXRlbWVudCgpIGNvbnN0
OwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBsYXN0U3RhdGVtZW50KCkgY29uc3Q7CkBAIC0xMTU4
LDcgKzExNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEVtcHR5U3RhdGVtZW50
Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEVtcHR5
U3RhdGVtZW50Tm9kZShKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgRW1wdHlTdGF0ZW1lbnROb2Rl
KGludCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMTY4LDcg
KzExNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBEZWJ1Z2dlclN0YXRl
bWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBE
ZWJ1Z2dlclN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIERlYnVnZ2VyU3Rh
dGVtZW50Tm9kZShpbnQpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCk7CkBAIC0xMTc2LDcgKzExODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEV4cHJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgRXhwclN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUq
KTsKKyAgICAgICAgRXhwclN0YXRlbWVudE5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSopOwogCiAg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByKCkgY29uc3QgeyByZXR1cm4gbV9leHByOyB9CiAK
QEAgLTExOTAsNyArMTE5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVmFyU3Rh
dGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFZhclN0YXRlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqKTsgICAgICAg
IAorICAgICAgICBWYXJTdGF0ZW1lbnROb2RlKGludCwgRXhwcmVzc2lvbk5vZGUqKTsgICAgICAg
IAogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTIwMCw3ICsxMjA1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBJZk5vZGUgOiBwdWJsaWMgU3RhdGVt
ZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBJZk5vZGUoSlNHbG9iYWxEYXRhKiwgRXhw
cmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogaWZCbG9jayk7CisgICAgICAg
IElmTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlm
QmxvY2spOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjEx
LDcgKzEyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElmRWxzZU5vZGUgOiBw
dWJsaWMgSWZOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIElmRWxzZU5vZGUoSlNHbG9iYWxE
YXRhKiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogaWZCbG9jaywg
U3RhdGVtZW50Tm9kZSogZWxzZUJsb2NrKTsKKyAgICAgICAgSWZFbHNlTm9kZShpbnQsIEV4cHJl
c3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIGlmQmxvY2ssIFN0YXRlbWVudE5v
ZGUqIGVsc2VCbG9jayk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBA
IC0xMjIxLDcgKzEyMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERvV2hpbGVO
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRG9XaGls
ZU5vZGUoSlNHbG9iYWxEYXRhKiwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBFeHByZXNzaW9u
Tm9kZSopOworICAgICAgICBEb1doaWxlTm9kZShpbnQsIFN0YXRlbWVudE5vZGUqLCBFeHByZXNz
aW9uTm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTIz
Miw3ICsxMjM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBXaGlsZU5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBXaGlsZU5vZGUoSlNH
bG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpOwor
ICAgICAgICBXaGlsZU5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyNDMsNyArMTI0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRm9yTm9kZSA6IHB1YmxpYyBTdGF0ZW1l
bnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZvck5vZGUoSlNHbG9iYWxEYXRhKiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMywgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBib29sIGV4cHIxV2FzVmFyRGVjbCk7
CisgICAgICAgIEZvck5vZGUoaW50LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIzLCBTdGF0ZW1lbnROb2RlKiwgYm9vbCBl
eHByMVdhc1ZhckRlY2wpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTI1Nyw4ICsxMjYyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGb3JJbk5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNz
aW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwotICAgICAgICBGb3JJ
bk5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwg
RXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZz
ZXQsIGludCBlbmRPZmZzZXQpOworICAgICAgICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgaW50
LCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOworICAg
ICAgICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBjb25zdCBJZGVudGlmaWVyJiwgRXhw
cmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBpbnQgZGl2b3Qs
IGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMjczLDggKzEyNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIENvbnRpbnVlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ29udGludWVOb2Rl
KEpTR2xvYmFsRGF0YSopOwotICAgICAgICBDb250aW51ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSWRlbnRpZmllciYpOworICAgICAgICBDb250aW51ZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50
KTsKKyAgICAgICAgQ29udGludWVOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAg
ICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjg0LDggKzEyODks
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJyZWFrTm9kZSA6IHB1YmxpYyBTdGF0
ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
LSAgICAgICAgQnJlYWtOb2RlKEpTR2xvYmFsRGF0YSopOwotICAgICAgICBCcmVha05vZGUoSlNH
bG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBCcmVha05vZGUoSlNHbG9i
YWxEYXRhKiwgaW50KTsKKyAgICAgICAgQnJlYWtOb2RlKGludCwgY29uc3QgSWRlbnRpZmllciYp
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjk1
LDcgKzEzMDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJldHVybk5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFJldHVybk5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5v
ZGUqIHZhbHVlKTsKKyAgICAgICAgUmV0dXJuTm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKiB2YWx1
ZSk7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsg
fQogCkBAIC0xMzA5LDcgKzEzMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFdp
dGhOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgV2l0
aE5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgdWlu
dDMyX3QgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOworICAgICAgICBXaXRoTm9k
ZShpbnQsIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIHVpbnQzMl90IGRpdm90LCB1
aW50MzJfdCBleHByZXNzaW9uTGVuZ3RoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTEzMjIsNyArMTMyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgTGFiZWxOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBMYWJlbE5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgU3RhdGVtZW50Tm9kZSopOworICAgICAgICBMYWJl
bE5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBTdGF0ZW1lbnROb2RlKik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMzMzLDcgKzEzMzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFRocm93Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgVGhyb3dOb2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKik7CisgICAgICAgIFRo
cm93Tm9kZShpbnQsIEV4cHJlc3Npb25Ob2RlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC0xMzQzLDcgKzEzNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFRyeU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBUcnlOb2RlKEpTR2xvYmFsRGF0YSosIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBleGNlcHRpb25JZGVudCwgYm9vbCBjYXRjaEhhc0V2YWwsIFN0YXRlbWVu
dE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CisgICAgICAg
IFRyeU5vZGUoaW50LCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYg
ZXhjZXB0aW9uSWRlbnQsIGJvb2wgY2F0Y2hIYXNFdmFsLCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJs
b2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTM1Nyw4ICsxMzYyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBQYXJhbWV0ZXJOb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUGFyYW1ldGVyTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBJ
ZGVudGlmaWVyJik7Ci0gICAgICAgIFBhcmFtZXRlck5vZGUoSlNHbG9iYWxEYXRhKiwgUGFyYW1l
dGVyTm9kZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgUGFyYW1ldGVyTm9kZShjb25z
dCBJZGVudGlmaWVyJik7CisgICAgICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSosIGNv
bnN0IElkZW50aWZpZXImKTsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KICAgICAgICAgUGFyYW1ldGVyTm9kZSogbmV4dFBhcmFt
KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CkBAIC0xMzg5LDggKzEzOTQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sgVmFy
U3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sg
RnVuY3Rpb25TdGFjazsKIAotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgYm9vbCBp
blN0cmljdENvbnRleHQpOwotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3Qg
U291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAg
IFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAg
ICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgY29uc3QgU291cmNlQ29kZSYsIFNv
dXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNpbmcgUGFyc2Vy
QXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7CiAKQEAgLTE0NDIsMTIgKzE0NDcsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2Rl
ID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUo
SlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sq
LCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpT
R2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAtMTQ1NSwxMiArMTQ2MCwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBFdmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEq
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJT
ZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEq
LCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNl
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRXZhbE5vZGUoSlNHbG9iYWxEYXRhKiwgU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAg
IEV2YWxOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAg
IH07CkBAIC0xNDc3LDggKzE0ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5j
dGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBG
dW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc1N0cmljdE1vZGUp
OwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVhdGUoSlNH
bG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJ
ZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9i
YWxEYXRhKiwgaW50LCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAg
IEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy5nZXQoKTsgfQogICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfQpAQCAtMTQ5Myw4ICsxNDk4LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRy
dWU7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0
YSosIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0ds
b2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIGJv
b2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERh
dGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEZ1
bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwpAQCAtMTUwMiw3ICsxNTA3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY0V4cHJOb2RlKEpTR2xvYmFsRGF0YSos
IGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IDApOworICAgICAgICBGdW5j
RXhwck5vZGUoaW50LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKiA9IDApOwogCiAgICAgICAgIEZ1bmN0aW9uQm9k
eU5vZGUqIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KIApAQCAtMTUxNiw3ICsxNTIxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRGVjbE5vZGUgOiBwdWJsaWMgU3RhdGVt
ZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jRGVjbE5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VDb2Rl
JiwgUGFyYW1ldGVyTm9kZSogPSAwKTsKKyAgICAgICAgRnVuY0RlY2xOb2RlKGludCwgY29uc3Qg
SWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyYW1l
dGVyTm9kZSogPSAwKTsKIAogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KCkgeyByZXR1
cm4gbV9ib2R5OyB9CiAKQEAgLTE1MjgsNyArMTUzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBDYXNlQ2xhdXNlTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNz
aW9uTm9kZSosIFNvdXJjZUVsZW1lbnRzKiA9IDApOworICAgICAgICBDYXNlQ2xhdXNlTm9kZShF
eHByZXNzaW9uTm9kZSosIFNvdXJjZUVsZW1lbnRzKiA9IDApOwogCiAgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBleHByKCkgY29uc3QgeyByZXR1cm4gbV9leHByOyB9CiAKQEAgLTE1NDEsOCArMTU0
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ2xhdXNlTGlzdE5vZGUgOiBwdWJs
aWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBDbGF1c2VMaXN0
Tm9kZShKU0dsb2JhbERhdGEqLCBDYXNlQ2xhdXNlTm9kZSopOwotICAgICAgICBDbGF1c2VMaXN0
Tm9kZShKU0dsb2JhbERhdGEqLCBDbGF1c2VMaXN0Tm9kZSosIENhc2VDbGF1c2VOb2RlKik7Cisg
ICAgICAgIENsYXVzZUxpc3ROb2RlKENhc2VDbGF1c2VOb2RlKik7CisgICAgICAgIENsYXVzZUxp
c3ROb2RlKENsYXVzZUxpc3ROb2RlKiwgQ2FzZUNsYXVzZU5vZGUqKTsKIAogICAgICAgICBDYXNl
Q2xhdXNlTm9kZSogZ2V0Q2xhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9jbGF1c2U7IH0KICAgICAg
ICAgQ2xhdXNlTGlzdE5vZGUqIGdldE5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KQEAg
LTE1NTQsNyArMTU1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ2FzZUJsb2Nr
Tm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IENhc2VCbG9ja05vZGUoSlNHbG9iYWxEYXRhKiwgQ2xhdXNlTGlzdE5vZGUqIGxpc3QxLCBDYXNl
Q2xhdXNlTm9kZSogZGVmYXVsdENsYXVzZSwgQ2xhdXNlTGlzdE5vZGUqIGxpc3QyKTsKKyAgICAg
ICAgQ2FzZUJsb2NrTm9kZShDbGF1c2VMaXN0Tm9kZSogbGlzdDEsIENhc2VDbGF1c2VOb2RlKiBk
ZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSogbGlzdDIpOwogCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZUZvckJsb2NrKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
aW5wdXQsIFJlZ2lzdGVySUQqIGRlc3RpbmF0aW9uKTsKIApAQCAtMTU2Nyw3ICsxNTcyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTd2l0Y2hOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU3dpdGNoTm9kZShKU0dsb2JhbERhdGEqLCBF
eHByZXNzaW9uTm9kZSosIENhc2VCbG9ja05vZGUqKTsKKyAgICAgICAgU3dpdGNoTm9kZShpbnQs
IEV4cHJlc3Npb25Ob2RlKiwgQ2FzZUJsb2NrTm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDQzICsyMyw5MSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogCisjaW5jbHVkZSAiQVNUQnVpbGRlci5oIgor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCi0jaW5jbHVkZSAi
SlNQYXJzZXIuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJMZXhlci5o
IgorI2luY2x1ZGUgIk5vZGVJbmZvLmgiCisjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKKyNp
bmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIgorI2luY2x1ZGUgPHV0aWxpdHk+Cisj
aW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUGFyc2VyOjpwYXJzZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNz
IHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBtb2RlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVy
ck1zZykKK1BhcnNlcjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFyc2Vy
U3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKKyAgICA6IG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV9zb3VyY2UoJnNvdXJjZSkKKyAgICAsIG1f
c3RhY2soZ2xvYmFsRGF0YS0+c3RhY2soKSkKKyAgICAsIG1fZXJyb3IoZmFsc2UpCisgICAgLCBt
X2Vycm9yTWVzc2FnZSgiUGFyc2UgZXJyb3IiKQorICAgICwgbV9hbGxvd3NJbih0cnVlKQorICAg
ICwgbV9sYXN0TGluZSgwKQorICAgICwgbV9sYXN0VG9rZW5FbmQoMCkKKyAgICAsIG1fYXNzaWdu
bWVudENvdW50KDApCisgICAgLCBtX25vbkxIU0NvdW50KDApCisgICAgLCBtX3N5bnRheEFscmVh
ZHlWYWxpZGF0ZWQoc291cmNlLnByb3ZpZGVyKCktPmlzVmFsaWQoKSkKKyAgICAsIG1fc3RhdGVt
ZW50RGVwdGgoMCkKKyAgICAsIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCgwKQorICAgICwg
bV9sYXN0SWRlbnRpZmllcigwKQorICAgICwgbV9zb3VyY2VFbGVtZW50cygwKQogewotICAgIEFT
U0VSVChnbG9iYWxEYXRhKTsKLSAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKLQotICAgIGludCBk
ZWZhdWx0RXJyTGluZTsKLSAgICBVU3RyaW5nIGRlZmF1bHRFcnJNc2c7CisgICAgbV9sZXhlciA9
IG5ldyBMZXhlcihnbG9iYWxEYXRhKTsKKyAgICBtX2FyZW5hID0gbV9nbG9iYWxEYXRhLT5wYXJz
ZXJBcmVuYTsKKyAgICBtX2xleGVyLT5zZXRDb2RlKHNvdXJjZSwgbV9hcmVuYSk7CiAKLSAgICBp
ZiAoIWVyckxpbmUpCi0gICAgICAgIGVyckxpbmUgPSAmZGVmYXVsdEVyckxpbmU7Ci0gICAgaWYg
KCFlcnJNc2cpCi0gICAgICAgIGVyck1zZyA9ICZkZWZhdWx0RXJyTXNnOwotCi0gICAgKmVyckxp
bmUgPSAtMTsKLSAgICAqZXJyTXNnID0gVVN0cmluZygpOwotCi0gICAgTGV4ZXImIGxleGVyID0g
Kmdsb2JhbERhdGEtPmxleGVyOwotICAgIGxleGVyLnNldENvZGUoKm1fc291cmNlLCBtX2FyZW5h
KTsKLQotICAgIFVTdHJpbmcgcGFyc2VFcnJvciA9IGpzUGFyc2UoZ2xvYmFsRGF0YSwgcGFyYW1l
dGVycywgc3RyaWN0bmVzcywgbW9kZSwgbV9zb3VyY2UpOwotICAgIGludCBsaW5lTnVtYmVyID0g
bGV4ZXIubGluZU51bWJlcigpOwotICAgIGJvb2wgbGV4RXJyb3IgPSBsZXhlci5zYXdFcnJvcigp
OwotICAgIFVTdHJpbmcgbGV4RXJyb3JNZXNzYWdlID0gbGV4RXJyb3IgPyBsZXhlci5nZXRFcnJv
ck1lc3NhZ2UoKSA6IFVTdHJpbmcoKTsKLSAgICBBU1NFUlQobGV4RXJyb3JNZXNzYWdlLmlzTnVs
bCgpICE9IGxleEVycm9yKTsKLSAgICBsZXhlci5jbGVhcigpOwotCi0gICAgaWYgKCFwYXJzZUVy
cm9yLmlzTnVsbCgpIHx8IGxleEVycm9yKSB7Ci0gICAgICAgICplcnJMaW5lID0gbGluZU51bWJl
cjsKLSAgICAgICAgKmVyck1zZyA9ICFsZXhFcnJvck1lc3NhZ2UuaXNOdWxsKCkgPyBsZXhFcnJv
ck1lc3NhZ2UgOiBwYXJzZUVycm9yOwotICAgICAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKKyAg
ICBtX2Z1bmN0aW9uQ2FjaGUgPSBzb3VyY2UucHJvdmlkZXIoKS0+Y2FjaGUoKTsKKyAgICBTY29w
ZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOworICAgIGlmIChwYXJzZXJNb2RlID09IEpTUGFyc2VG
dW5jdGlvbkNvZGUpCisgICAgICAgIHNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CisgICAgaWYgKHN0
cmljdG5lc3MgPT0gSlNQYXJzZVN0cmljdCkKKyAgICAgICAgc2NvcGUtPnNldFN0cmljdE1vZGUo
KTsKKyAgICBpZiAocGFyYW1ldGVycykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzY29wZS0+ZGVjbGFyZVBh
cmFtZXRlcigmcGFyYW1ldGVycy0+YXQoaSkpOwogICAgIH0KKyAgICBuZXh0KCk7CisgICAgbV9s
ZXhlci0+c2V0TGFzdExpbmVOdW1iZXIodG9rZW5MaW5lKCkpOworfQorCitQYXJzZXI6On5QYXJz
ZXIoKQoreworfQorCisKK1VTdHJpbmcgUGFyc2VyOjpwYXJzZUlubmVyKCkKK3sKKyAgICBVU3Ry
aW5nIHBhcnNlRXJyb3IgPSBVU3RyaW5nKCk7CisgICAgCisgICAgdW5zaWduZWQgb2xkRnVuY3Rp
b25DYWNoZVNpemUgPSBtX2Z1bmN0aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVTaXpl
KCkgOiAwOworICAgIEFTVEJ1aWxkZXIgY29udGV4dChjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+
KG1fZ2xvYmFsRGF0YSksIGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+KG1fc291cmNlKSk7CisgICAg
aWYgKG1fbGV4ZXItPmlzUmVwYXJzaW5nKCkpCisgICAgICAgIG1fc3RhdGVtZW50RGVwdGgtLTsK
KyAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOworICAgIFNvdXJjZUVsZW1lbnRz
KiBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RNb2Rl
Pihjb250ZXh0KTsKKyAgICBpZiAoIXNvdXJjZUVsZW1lbnRzIHx8ICFjb25zdW1lKEVPRlRPSykp
CisgICAgICAgIHBhcnNlRXJyb3IgPSBtX2Vycm9yTWVzc2FnZTsKKworICAgIElkZW50aWZpZXJT
ZXQgY2FwdHVyZWRWYXJpYWJsZXM7CisgICAgc2NvcGUtPmdldENhcHR1cmVkVmFyaWFibGVzKGNh
cHR1cmVkVmFyaWFibGVzKTsKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBjb250ZXh0LmZl
YXR1cmVzKCk7CisgICAgaWYgKHNjb3BlLT5zdHJpY3RNb2RlKCkpCisgICAgICAgIGZlYXR1cmVz
IHw9IFN0cmljdE1vZGVGZWF0dXJlOworICAgIGlmIChzY29wZS0+c2hhZG93c0FyZ3VtZW50cygp
KQorICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKKyAgICB1bnNp
Z25lZCBmdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVuY3Rpb25DYWNo
ZS0+Ynl0ZVNpemUoKSA6IDA7CisgICAgaWYgKGZ1bmN0aW9uQ2FjaGVTaXplICE9IG9sZEZ1bmN0
aW9uQ2FjaGVTaXplKQorICAgICAgICBtX2xleGVyLT5zb3VyY2VQcm92aWRlcigpLT5ub3RpZnlD
YWNoZVNpemVDaGFuZ2VkKGZ1bmN0aW9uQ2FjaGVTaXplIC0gb2xkRnVuY3Rpb25DYWNoZVNpemUp
OworCisgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJEZWNs
YXJhdGlvbnMoKSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIGZlYXR1cmVzLAorICAgICAg
ICAgICAgICAgICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFudHMoKSwgY2FwdHVy
ZWRWYXJpYWJsZXMpOworCisgICAgcmV0dXJuIHBhcnNlRXJyb3I7CiB9CiAKIHZvaWQgUGFyc2Vy
OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFyc2Vy
QXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKQEAgLTc0
LDQgKzEyMiwxNDk5IEBAIHZvaWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW0K
ICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0KIAorYm9vbCBQYXJzZXI6OmFs
bG93QXV0b21hdGljU2VtaWNvbG9uKCkKK3sKKyAgICByZXR1cm4gbWF0Y2goQ0xPU0VCUkFDRSkg
fHwgbWF0Y2goRU9GVE9LKSB8fCBtX2xleGVyLT5wcmV2VGVybWluYXRvcigpOworfQorCit0ZW1w
bGF0ZSA8UGFyc2VyOjpTb3VyY2VFbGVtZW50c01vZGUgbW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI6OnBhcnNlU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCit7CisgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0g
Y29udGV4dC5jcmVhdGVTb3VyY2VFbGVtZW50cygpOworICAgIGJvb2wgc2Vlbk5vbkRpcmVjdGl2
ZSA9IGZhbHNlOworICAgIGNvbnN0IElkZW50aWZpZXIqIGRpcmVjdGl2ZSA9IDA7CisgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1faW5mby5zdGFydE9mZnNldDsKKyAgICB1bnNp
Z25lZCBvbGRMYXN0TGluZU51bWJlciA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CisgICAg
dW5zaWduZWQgb2xkTGluZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKKyAgICBib29s
IGhhc1NldFN0cmljdCA9IGZhbHNlOworICAgIHdoaWxlIChUcmVlU3RhdGVtZW50IHN0YXRlbWVu
dCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIGRpcmVjdGl2ZSkpIHsKKyAgICAgICAgaWYgKG1v
ZGUgPT0gQ2hlY2tGb3JTdHJpY3RNb2RlICYmICFzZWVuTm9uRGlyZWN0aXZlKSB7CisgICAgICAg
ICAgICBpZiAoZGlyZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNTZXRTdHJpY3Qg
JiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVyID09ICpk
aXJlY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0U3RyaWN0TW9kZSgpOworICAgICAg
ICAgICAgICAgICAgICBoYXNTZXRTdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShpc1ZhbGlkU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9s
ZXhlci0+c2V0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dCgp
OworICAgICAgICAgICAgICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihvbGRMYXN0
TGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXItPnNldExpbmVOdW1iZXIo
b2xkTGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZlRydWUobV9lcnJvcik7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNlZW5Ob25EaXJlY3RpdmUgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGNvbnRleHQuYXBwZW5kU3RhdGVtZW50KHNvdXJjZUVsZW1lbnRz
LCBzdGF0ZW1lbnQpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgZmFp
bCgpOworICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VWYXJEZWNsYXJhdGlvbihUcmVl
QnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goVkFSKSk7CisgICAgaW50IHN0
YXJ0ID0gdG9rZW5MaW5lKCk7CisgICAgaW50IGVuZCA9IDA7CisgICAgaW50IHNjcmF0Y2g7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogc2NyYXRjaDEgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIHNj
cmF0Y2gyID0gMDsKKyAgICBpbnQgc2NyYXRjaDMgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIHZh
ckRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoY29udGV4dCwgc2NyYXRjaCwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBzY3JhdGNoMywgc2NyYXRjaDMsIHNjcmF0Y2gzKTsKKyAgICBmYWlsSWZU
cnVlKG1fZXJyb3IpOworICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7CisgICAgCisg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVmFyU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIHZhckRlY2xzLCBzdGFydCwgZW5kKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VDb25zdERlY2xhcmF0aW9uKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChDT05TVFRPS0VOKSk7CisgICAg
aW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CisgICAgaW50IGVuZCA9IDA7CisgICAgVHJlZUNvbnN0
RGVjbExpc3QgY29uc3REZWNscyA9IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoY29udGV4dCk7
CisgICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKKyAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9u
KCkpOworICAgIAorICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnN0U3RhdGVtZW50KG1fbGV4
ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbnN0RGVjbHMsIHN0YXJ0LCBlbmQpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZURvV2hp
bGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKERP
KSk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIG5leHQoKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOworICAgIHN0YXJ0TG9vcCgpOworICAgIFRyZWVT
dGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKKyAg
ICBlbmRMb29wKCk7CisgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKKyAgICBpbnQgZW5kTGlu
ZSA9IHRva2VuTGluZSgpOworICAgIGNvbnN1bWVPckZhaWwoV0hJTEUpOworICAgIGNvbnN1bWVP
ckZhaWwoT1BFTlBBUkVOKTsKKyAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGV4cHIpOworICAgIGNvbnN1bWVPckZhaWwo
Q0xPU0VQQVJFTik7CisgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpCisgICAgICAgIG5leHQoKTsg
Ly8gQWx3YXlzIHBlcmZvcm1zIGF1dG9tYXRpYyBzZW1pY29sb24gaW5zZXJ0aW9uLgorICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgc3RhdGVtZW50LCBleHByLCBzdGFydExpbmUsIGVuZExpbmUpOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVdoaWxlU3Rh
dGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChXSElMRSkp
OworICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBuZXh0KCk7CisgICAgY29u
c3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4
cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UoZXhwcik7CisgICAgaW50IGVuZExp
bmUgPSB0b2tlbkxpbmUoKTsKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOworICAgIGNv
bnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgc3RhcnRMb29wKCk7CisgICAgVHJlZVN0
YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOworICAg
IGVuZExvb3AoKTsKKyAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZVdoaWxlU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIs
IHN0YXRlbWVudCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0
KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRpZmll
ciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBpZGVu
dFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKQoreworICAgIFRyZWVFeHByZXNz
aW9uIHZhckRlY2xzID0gMDsKKyAgICBkbyB7CisgICAgICAgIGRlY2xhcmF0aW9ucysrOworICAg
ICAgICBuZXh0KCk7CisgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICAgICAgCisgICAg
ICAgIGludCB2YXJTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgaWRlbnRTdGFydCA9IHZh
clN0YXJ0OworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lID0gbV90b2tlbi5tX2RhdGEu
aWRlbnQ7CisgICAgICAgIGxhc3RJZGVudCA9IG5hbWU7CisgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgYm9vbCBoYXNJbml0aWFsaXplciA9IG1hdGNoKEVRVUFMKTsKKyAgICAgICAgZmFpbElmRmFs
c2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5u
b3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgbmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1v
ZGUuIik7CisgICAgICAgIGNvbnRleHQuYWRkVmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAo
IW1fYWxsb3dzSW4gJiYgbWF0Y2goSU5UT0tFTikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJ
bml0aWFsaXplciA6IDApOworICAgICAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKKyAgICAgICAg
ICAgIGludCB2YXJEaXZvdCA9IHRva2VuU3RhcnQoKSArIDE7CisgICAgICAgICAgICBpbml0U3Rh
cnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVp
bGRTdHJpbmdzKTsgLy8gY29uc3VtZSAnPScKKyAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdu
bWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGlu
aXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAg
ICAgIGluaXRFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgICAgIGxhc3RJbml0aWFsaXpl
ciA9IGluaXRpYWxpemVyOworICAgICAgICAgICAgZmFpbElmRmFsc2UoaW5pdGlhbGl6ZXIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5j
cmVhdGVBc3NpZ25SZXNvbHZlKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksICpuYW1lLCBpbml0
aWFsaXplciwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCB2YXJTdGFy
dCwgdmFyRGl2b3QsIGxhc3RUb2tlbkVuZCgpKTsKKyAgICAgICAgICAgIGlmICghdmFyRGVjbHMp
CisgICAgICAgICAgICAgICAgdmFyRGVjbHMgPSBub2RlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHZhckRlY2xzID0gY29udGV4dC5jb21iaW5lQ29tbWFOb2RlcyhtX2xleGVy
LT5sYXN0TGluZU51bWJlcigpLCB2YXJEZWNscywgbm9kZSk7CisgICAgICAgIH0KKyAgICB9IHdo
aWxlIChtYXRjaChDT01NQSkpOworICAgIHJldHVybiB2YXJEZWNsczsKK30KKwordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ29uc3REZWNsTGlzdCBQYXJzZXI6OnBhcnNlQ29uc3RE
ZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgZmFpbElmVHJ1ZShz
dHJpY3RNb2RlKCkpOworICAgIFRyZWVDb25zdERlY2xMaXN0IGNvbnN0RGVjbHMgPSAwOworICAg
IFRyZWVDb25zdERlY2xMaXN0IHRhaWwgPSAwOworICAgIGRvIHsKKyAgICAgICAgbmV4dCgpOwor
ICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5h
bWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBib29s
IGhhc0luaXRpYWxpemVyID0gbWF0Y2goRVFVQUwpOworICAgICAgICBkZWNsYXJlVmFyaWFibGUo
bmFtZSk7CisgICAgICAgIGNvbnRleHQuYWRkVmFyKG5hbWUsIERlY2xhcmF0aW9uU3RhY2tzOjpJ
c0NvbnN0YW50IHwgKGhhc0luaXRpYWxpemVyID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRp
YWxpemVyIDogMCkpOworICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IDA7Cisg
ICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgeworICAgICAgICAgICAgbmV4dChUcmVlQnVpbGRl
cjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCisgICAgICAgICAgICBpbml0aWFs
aXplciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGFpbCA9IGNvbnRleHQuYXBwZW5kQ29uc3REZWNsKG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIHRhaWwsIG5hbWUsIGluaXRpYWxpemVyKTsKKyAgICAgICAgaWYgKCFjb25zdERlY2xz
KQorICAgICAgICAgICAgY29uc3REZWNscyA9IHRhaWw7CisgICAgfSB3aGlsZSAobWF0Y2goQ09N
TUEpKTsKKyAgICByZXR1cm4gY29uc3REZWNsczsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjo6cGFyc2VGb3JTdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKEZPUikpOworICAgIGludCBzdGFydExp
bmUgPSB0b2tlbkxpbmUoKTsKKyAgICBuZXh0KCk7CisgICAgY29uc3VtZU9yRmFpbChPUEVOUEFS
RU4pOworICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAgaW50IGRlY2xh
cmF0aW9ucyA9IDA7CisgICAgaW50IGRlY2xzU3RhcnQgPSAwOworICAgIGludCBkZWNsc0VuZCA9
IDA7CisgICAgVHJlZUV4cHJlc3Npb24gZGVjbHMgPSAwOworICAgIGJvb2wgaGFzRGVjbGFyYXRp
b24gPSBmYWxzZTsKKyAgICBpZiAobWF0Y2goVkFSKSkgeworICAgICAgICAvKgorICAgICAgICAg
Zm9yICh2YXIgSURFTlQgaW4gZXhwcmVzc2lvbikgc3RhdGVtZW50CisgICAgICAgICBmb3IgKHZh
ciBJREVOVCA9IGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbikgc3RhdGVtZW50CisgICAgICAgICBm
b3IgKHZhciB2YXJEZWNsYXJhdGlvbkxpc3Q7IGV4cHJlc3Npb25PcHQ7IGV4cHJlc3Npb25PcHQp
CisgICAgICAgICAqLworICAgICAgICBoYXNEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGZvckluVGFyZ2V0ID0gMDsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24g
Zm9ySW5Jbml0aWFsaXplciA9IDA7CisgICAgICAgIG1fYWxsb3dzSW4gPSBmYWxzZTsKKyAgICAg
ICAgaW50IGluaXRTdGFydCA9IDA7CisgICAgICAgIGludCBpbml0RW5kID0gMDsKKyAgICAgICAg
ZGVjbHMgPSBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChjb250ZXh0LCBkZWNsYXJhdGlvbnMsIGZv
ckluVGFyZ2V0LCBmb3JJbkluaXRpYWxpemVyLCBkZWNsc1N0YXJ0LCBpbml0U3RhcnQsIGluaXRF
bmQpOworICAgICAgICBtX2FsbG93c0luID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgIAorICAgICAgICAvLyBSZW1haW5kZXIgb2YgYSBz
dGFuZGFyZCBmb3IgbG9vcCBpcyBoYW5kbGVkIGlkZW50aWNhbGx5CisgICAgICAgIGlmIChtYXRj
aChTRU1JQ09MT04pKQorICAgICAgICAgICAgZ290byBzdGFuZGFyZEZvckxvb3A7CisgICAgICAg
IAorICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJhdGlvbnMgPT0gMSk7CisgICAgICAgIAorICAg
ICAgICAvLyBIYW5kbGUgZm9yLWluIHdpdGggdmFyIGRlY2xhcmF0aW9uCisgICAgICAgIGludCBp
bkxvY2F0aW9uID0gdG9rZW5TdGFydCgpOworICAgICAgICBjb25zdW1lT3JGYWlsKElOVE9LRU4p
OworICAgICAgICAKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UoZXhwcik7CisgICAgICAgIGludCBleHBy
RW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgICAgIAorICAgICAgICBpbnQgZW5kTGluZSA9IHRv
a2VuTGluZSgpOworICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOworICAgICAgICAK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKKyAgICAgICAgc3RhcnRMb29w
KCk7CisgICAgICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29u
dGV4dCwgdW51c2VkKTsKKyAgICAgICAgZW5kTG9vcCgpOworICAgICAgICBmYWlsSWZGYWxzZShz
dGF0ZW1lbnQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRm9ySW5M
b29wKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGZvckluVGFyZ2V0LCBmb3JJbkluaXRpYWxp
emVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGluTG9jYXRpb24sIGV4cHJFbmQsIGlu
aXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKKyAgICB9CisgICAgCisgICAg
aWYgKCFtYXRjaChTRU1JQ09MT04pKSB7CisgICAgICAgIG1fYWxsb3dzSW4gPSBmYWxzZTsKKyAg
ICAgICAgZGVjbHNTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgZGVjbHMgPSBwYXJzZUV4
cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgIGRlY2xzRW5kID0gbGFzdFRva2VuRW5kKCk7Cisg
ICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOworICAgICAgICBmYWlsSWZGYWxzZShkZWNscyk7Cisg
ICAgfQorICAgIAorICAgIGlmIChtYXRjaChTRU1JQ09MT04pKSB7CisgICAgc3RhbmRhcmRGb3JM
b29wOgorICAgICAgICAvLyBTdGFuZGFyZCBmb3IgbG9vcAorICAgICAgICBuZXh0KCk7CisgICAg
ICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IDA7CisgICAgICAgIAorICAgICAgICBpZiAo
IW1hdGNoKFNFTUlDT0xPTikpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVz
c2lvbihjb250ZXh0KTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKGNvbmRpdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3VtZU9yRmFpbChTRU1JQ09MT04pOworICAgICAgICAKKyAgICAg
ICAgVHJlZUV4cHJlc3Npb24gaW5jcmVtZW50ID0gMDsKKyAgICAgICAgaWYgKCFtYXRjaChDTE9T
RVBBUkVOKSkgeworICAgICAgICAgICAgaW5jcmVtZW50ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRl
eHQpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoaW5jcmVtZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOworICAgICAgICBjb25zdW1lT3JGYWlsKENM
T1NFUEFSRU4pOworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOworICAgICAg
ICBzdGFydExvb3AoKTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0
YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOworICAgICAgICBlbmRMb29wKCk7CisgICAgICAgIGZh
aWxJZkZhbHNlKHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckxv
b3AobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZGVjbHMsIGNvbmRpdGlvbiwgaW5jcmVtZW50
LCBzdGF0ZW1lbnQsIGhhc0RlY2xhcmF0aW9uLCBzdGFydExpbmUsIGVuZExpbmUpOworICAgIH0K
KyAgICAKKyAgICAvLyBGb3ItaW4gbG9vcAorICAgIGZhaWxJZkZhbHNlKG5vbkxIU0NvdW50ID09
IG1fbm9uTEhTQ291bnQpOworICAgIGNvbnN1bWVPckZhaWwoSU5UT0tFTik7CisgICAgVHJlZUV4
cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxz
ZShleHByKTsKKyAgICBpbnQgZXhwckVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgIGludCBlbmRM
aW5lID0gdG9rZW5MaW5lKCk7CisgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOworICAgIHN0YXJ0TG9vcCgpOworICAgIFRyZWVT
dGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKKyAg
ICBlbmRMb29wKCk7CisgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKKyAgICAKKyAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZGVj
bHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0
TGluZSwgZW5kTGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBQYXJzZXI6OnBhcnNlQnJlYWtTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUKG1hdGNoKEJSRUFLKSk7CisgICAgaW50IHN0YXJ0Q29sID0gdG9rZW5T
dGFydCgpOworICAgIGludCBlbmRDb2wgPSB0b2tlbkVuZCgpOworICAgIGludCBzdGFydExpbmUg
PSB0b2tlbkxpbmUoKTsKKyAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOworICAgIG5leHQo
KTsKKyAgICAKKyAgICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7CisgICAgICAgIGZhaWxJZkZhbHNl
V2l0aE1lc3NhZ2UoYnJlYWtJc1ZhbGlkKCksICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRl
IGEgc3dpdGNoIG9yIGxvb3Agc3RhdGVtZW50Iik7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUJyZWFrU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHN0YXJ0Q29sLCBl
bmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSk7CisgICAgfQorICAgIG1hdGNoT3JGYWlsKElERU5U
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50Owor
ICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGdldExhYmVsKGlkZW50KSwgIkxhYmVs
IiwgaWRlbnQtPmltcGwoKSwgImlzIG5vdCBkZWZpbmVkIik7CisgICAgZW5kQ29sID0gdG9rZW5F
bmQoKTsKKyAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIGZhaWxJ
ZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtT
dGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRD
b2wsIHN0YXJ0TGluZSwgZW5kTGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKENPTlRJTlVFKSk7CisgICAgaW50IHN0
YXJ0Q29sID0gdG9rZW5TdGFydCgpOworICAgIGludCBlbmRDb2wgPSB0b2tlbkVuZCgpOworICAg
IGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbnQgZW5kTGluZSA9IHRva2VuTGlu
ZSgpOworICAgIG5leHQoKTsKKyAgICAKKyAgICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7CisgICAg
ICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY29udGludWVJc1ZhbGlkKCksICInY29udGludWUn
IGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIo
KSwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKKyAgICB9CisgICAgbWF0
Y2hPckZhaWwoSURFTlQpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5t
X2RhdGEuaWRlbnQ7CisgICAgU2NvcGVMYWJlbEluZm8qIGxhYmVsID0gZ2V0TGFiZWwoaWRlbnQp
OworICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGxhYmVsLCAiTGFiZWwiLCBpZGVu
dC0+aW1wbCgpLCAiaXMgbm90IGRlZmluZWQiKTsKKyAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdl
KGxhYmVsLT5tX2lzTG9vcCwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29w
IHN0YXRlbWVudCIpOworICAgIGVuZENvbCA9IHRva2VuRW5kKCk7CisgICAgZW5kTGluZSA9IHRv
a2VuTGluZSgpOworICAgIG5leHQoKTsKKyAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkp
OworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGlkZW50LCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExp
bmUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFy
c2VyOjpwYXJzZVJldHVyblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBB
U1NFUlQobWF0Y2goUkVUVVJOKSk7CisgICAgZmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlz
RnVuY3Rpb24oKSk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGludCBl
bmRMaW5lID0gc3RhcnRMaW5lOworICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICBp
bnQgZW5kID0gdG9rZW5FbmQoKTsKKyAgICBuZXh0KCk7CisgICAgLy8gV2UgZG8gdGhlIGF1dG8g
c2VtaWNvbG9uIGNoZWNrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlIGFuIGV4cHJlc3Npb24K
KyAgICAvLyBhcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYSBsaW5lIGJyZWFrIGFmdGVyIHRoZSBy
ZXR1cm4gY29ycmVjdGx5IHRlcm1pbmF0ZXMKKyAgICAvLyB0aGUgc3RhdGVtZW50CisgICAgaWYg
KG1hdGNoKFNFTUlDT0xPTikpCisgICAgICAgIGVuZExpbmUgID0gdG9rZW5MaW5lKCk7CisgICAg
aWYgKGF1dG9TZW1pQ29sb24oKSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJu
U3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIDAsIHN0YXJ0LCBlbmQsIHN0YXJ0
TGluZSwgZW5kTGluZSk7CisgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShleHByKTsKKyAgICBlbmQgPSBsYXN0VG9rZW5F
bmQoKTsKKyAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKKyAgICAgICAgZW5kTGluZSAgPSB0b2tl
bkxpbmUoKTsKKyAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOworICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBl
eHByLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVRocm93U3RhdGVtZW50
KFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChUSFJPVykpOworICAg
IGludCBlU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGlu
ZSgpOworICAgIG5leHQoKTsKKyAgICAKKyAgICBmYWlsSWZUcnVlKGF1dG9TZW1pQ29sb24oKSk7
CisgICAgCisgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICBmYWlsSWZGYWxzZShleHByKTsKKyAgICBpbnQgZUVuZCA9IGxhc3RUb2tlbkVuZCgp
OworICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgZmFpbElmRmFsc2UoYXV0b1Nl
bWlDb2xvbigpKTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaHJvd1N0YXRlbWVu
dChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBlU3RhcnQsIGVFbmQsIHN0YXJ0TGlu
ZSwgZW5kTGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBQYXJzZXI6OnBhcnNlV2l0aFN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sK
KyAgICBBU1NFUlQobWF0Y2goV0lUSCkpOworICAgIGZhaWxJZlRydWVXaXRoTWVzc2FnZShzdHJp
Y3RNb2RlKCksICInd2l0aCcgc3RhdGVtZW50cyBhcmUgbm90IHZhbGlkIGluIHN0cmljdCBtb2Rl
Iik7CisgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFjdGl2YXRpb24oKTsKKyAgICBp
bnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIGNvbnN1bWVPckZh
aWwoT1BFTlBBUkVOKTsKKyAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgVHJlZUV4
cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxz
ZShleHByKTsKKyAgICBpbnQgZW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgCisgICAgaW50IGVu
ZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOworICAg
IGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1l
bnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVzZWQpOworICAgIGZhaWxJZkZhbHNlKHN0
YXRlbWVudCk7CisgICAgCisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlV2l0aFN0YXRlbWVudCht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByLCBzdGF0ZW1lbnQsIHN0YXJ0LCBlbmQsIHN0
YXJ0TGluZSwgZW5kTGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250
ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChTV0lUQ0gpKTsKKyAgICBpbnQgc3RhcnRMaW5lID0g
dG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsK
KyAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAg
IGZhaWxJZkZhbHNlKGV4cHIpOworICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAg
Y29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFDRSk7
CisgICAgc3RhcnRTd2l0Y2goKTsKKyAgICBUcmVlQ2xhdXNlTGlzdCBmaXJzdENsYXVzZXMgPSBw
YXJzZVN3aXRjaENsYXVzZXMoY29udGV4dCk7CisgICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKKyAg
ICAKKyAgICBUcmVlQ2xhdXNlIGRlZmF1bHRDbGF1c2UgPSBwYXJzZVN3aXRjaERlZmF1bHRDbGF1
c2UoY29udGV4dCk7CisgICAgZmFpbElmVHJ1ZShtX2Vycm9yKTsKKyAgICAKKyAgICBUcmVlQ2xh
dXNlTGlzdCBzZWNvbmRDbGF1c2VzID0gcGFyc2VTd2l0Y2hDbGF1c2VzKGNvbnRleHQpOworICAg
IGZhaWxJZlRydWUobV9lcnJvcik7CisgICAgZW5kU3dpdGNoKCk7CisgICAgY29uc3VtZU9yRmFp
bChDTE9TRUJSQUNFKTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVTd2l0Y2hTdGF0
ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgZmlyc3RDbGF1c2VzLCBkZWZh
dWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzLCBzdGFydExpbmUsIGVuZExpbmUpOworICAgIAorfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2VMaXN0IFBhcnNlcjo6cGFy
c2VTd2l0Y2hDbGF1c2VzKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIGlmICghbWF0Y2go
Q0FTRSkpCisgICAgICAgIHJldHVybiAwOworICAgIG5leHQoKTsKKyAgICBUcmVlRXhwcmVzc2lv
biBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2Uo
Y29uZGl0aW9uKTsKKyAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKKyAgICBUcmVlU291cmNlRWxl
bWVudHMgc3RhdGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0
TW9kZT4oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50cyk7CisgICAgVHJlZUNs
YXVzZSBjbGF1c2UgPSBjb250ZXh0LmNyZWF0ZUNsYXVzZShjb25kaXRpb24sIHN0YXRlbWVudHMp
OworICAgIFRyZWVDbGF1c2VMaXN0IGNsYXVzZUxpc3QgPSBjb250ZXh0LmNyZWF0ZUNsYXVzZUxp
c3QoY2xhdXNlKTsKKyAgICBUcmVlQ2xhdXNlTGlzdCB0YWlsID0gY2xhdXNlTGlzdDsKKyAgICAK
KyAgICB3aGlsZSAobWF0Y2goQ0FTRSkpIHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBUcmVl
RXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAg
IGZhaWxJZkZhbHNlKGNvbmRpdGlvbik7CisgICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04pOwor
ICAgICAgICBUcmVlU291cmNlRWxlbWVudHMgc3RhdGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVu
dHM8RG9udENoZWNrRm9yU3RyaWN0TW9kZT4oY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNl
KHN0YXRlbWVudHMpOworICAgICAgICBjbGF1c2UgPSBjb250ZXh0LmNyZWF0ZUNsYXVzZShjb25k
aXRpb24sIHN0YXRlbWVudHMpOworICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVDbGF1c2VM
aXN0KHRhaWwsIGNsYXVzZSk7CisgICAgfQorICAgIHJldHVybiBjbGF1c2VMaXN0OworfQorCit0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2UgUGFyc2VyOjpwYXJzZVN3aXRj
aERlZmF1bHRDbGF1c2UoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgaWYgKCFtYXRjaChE
RUZBVUxUKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgbmV4dCgpOworICAgIGNvbnN1bWVPckZh
aWwoQ09MT04pOworICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzdGF0ZW1lbnRzID0gcGFyc2VTb3Vy
Y2VFbGVtZW50czxEb250Q2hlY2tGb3JTdHJpY3RNb2RlPihjb250ZXh0KTsKKyAgICBmYWlsSWZG
YWxzZShzdGF0ZW1lbnRzKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDbGF1c2UoMCwgc3Rh
dGVtZW50cyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBQYXJzZXI6OnBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAg
IEFTU0VSVChtYXRjaChUUlkpKTsKKyAgICBUcmVlU3RhdGVtZW50IHRyeUJsb2NrID0gMDsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
Pm51bGxJZGVudGlmaWVyOworICAgIGJvb2wgY2F0Y2hIYXNFdmFsID0gZmFsc2U7CisgICAgVHJl
ZVN0YXRlbWVudCBjYXRjaEJsb2NrID0gMDsKKyAgICBUcmVlU3RhdGVtZW50IGZpbmFsbHlCbG9j
ayA9IDA7CisgICAgaW50IGZpcnN0TGluZSA9IHRva2VuTGluZSgpOworICAgIG5leHQoKTsKKyAg
ICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UpOworICAgIAorICAgIHRyeUJsb2NrID0gcGFyc2VCbG9j
a1N0YXRlbWVudChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZSh0cnlCbG9jayk7CisgICAgaW50
IGxhc3RMaW5lID0gbV9sYXN0TGluZTsKKyAgICAKKyAgICBpZiAobWF0Y2goQ0FUQ0gpKSB7Cisg
ICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7CisgICAgICAg
IG5leHQoKTsKKyAgICAgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgICAgICBtYXRj
aE9yRmFpbChJREVOVCk7CisgICAgICAgIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Cisg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGNhdGNoU2NvcGUodGhpcywg
cHVzaFNjb3BlKCkpOworICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNz
YWdlKGNhdGNoU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShpZGVudCksICJDYW5ub3QgZGVjbGFyZSBh
IHZhcmlhYmxlIG5hbWVkIiwgaWRlbnQtPmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7CisgICAg
ICAgIGNhdGNoU2NvcGUtPnByZXZlbnROZXdEZWNscygpOworICAgICAgICBjb25zdW1lT3JGYWls
KENMT1NFUEFSRU4pOworICAgICAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UpOworICAgICAgICBp
bnQgaW5pdGlhbEV2YWxDb3VudCA9IGNvbnRleHQuZXZhbENvdW50KCk7CisgICAgICAgIGNhdGNo
QmxvY2sgPSBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxz
ZVdpdGhNZXNzYWdlKGNhdGNoQmxvY2ssICIndHJ5JyBtdXN0IGhhdmUgYSBjYXRjaCBvciBmaW5h
bGx5IGJsb2NrIik7CisgICAgICAgIGNhdGNoSGFzRXZhbCA9IGluaXRpYWxFdmFsQ291bnQgIT0g
Y29udGV4dC5ldmFsQ291bnQoKTsKKyAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoY2F0Y2hT
Y29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOworICAgIH0KKyAgICAK
KyAgICBpZiAobWF0Y2goRklOQUxMWSkpIHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBtYXRj
aE9yRmFpbChPUEVOQlJBQ0UpOworICAgICAgICBmaW5hbGx5QmxvY2sgPSBwYXJzZUJsb2NrU3Rh
dGVtZW50KGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShmaW5hbGx5QmxvY2spOworICAg
IH0KKyAgICBmYWlsSWZGYWxzZShjYXRjaEJsb2NrIHx8IGZpbmFsbHlCbG9jayk7CisgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlVHJ5U3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCks
IHRyeUJsb2NrLCBpZGVudCwgY2F0Y2hIYXNFdmFsLCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2ss
IGZpcnN0TGluZSwgbGFzdExpbmUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZURlYnVnZ2VyU3RhdGVtZW50KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChERUJVR0dFUikpOworICAgIGludCBzdGFy
dExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbnQgZW5kTGluZSA9IHN0YXJ0TGluZTsKKyAgICBu
ZXh0KCk7CisgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpCisgICAgICAgIHN0YXJ0TGluZSA9IHRv
a2VuTGluZSgpOworICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7CisgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlRGVidWdnZXIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3RhcnRM
aW5lLCBlbmRMaW5lKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IFBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkK
K3sKKyAgICBBU1NFUlQobWF0Y2goT1BFTkJSQUNFKSk7CisgICAgaW50IHN0YXJ0ID0gdG9rZW5M
aW5lKCk7CisgICAgbmV4dCgpOworICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgeworICAgICAg
ICBuZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIDAsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKKyAgICB9Cisg
ICAgVHJlZVNvdXJjZUVsZW1lbnRzIHN1YnRyZWUgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRD
aGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKHN1YnRyZWUpOwor
ICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0UpOworICAgIG5leHQoKTsKKyAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBzdWJ0
cmVlLCBzdGFydCwgbV9sYXN0TGluZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250
ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlKQoreworICAgIERlcHRoTWFuYWdlciBz
dGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CisgICAgbV9zdGF0ZW1lbnREZXB0aCsr
OworICAgIGRpcmVjdGl2ZSA9IDA7CisgICAgaW50IG5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQg
PSAwOworICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKKyAgICBzd2l0Y2ggKG1fdG9rZW4ubV90
eXBlKSB7CisgICAgY2FzZSBPUEVOQlJBQ0U6CisgICAgICAgIHJldHVybiBwYXJzZUJsb2NrU3Rh
dGVtZW50KGNvbnRleHQpOworICAgIGNhc2UgVkFSOgorICAgICAgICByZXR1cm4gcGFyc2VWYXJE
ZWNsYXJhdGlvbihjb250ZXh0KTsKKyAgICBjYXNlIENPTlNUVE9LRU46CisgICAgICAgIHJldHVy
biBwYXJzZUNvbnN0RGVjbGFyYXRpb24oY29udGV4dCk7CisgICAgY2FzZSBGVU5DVElPTjoKKyAg
ICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhNZXNzYWdlKG1fc3RhdGVtZW50RGVwdGggPT0g
MSwgIkZ1bmN0aW9ucyBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gYSBuZXN0ZWQgYmxvY2sgaW4gc3Ry
aWN0IG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihjb250
ZXh0KTsKKyAgICBjYXNlIFNFTUlDT0xPTjoKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVFbXB0eVN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigp
KTsKKyAgICBjYXNlIElGOgorICAgICAgICByZXR1cm4gcGFyc2VJZlN0YXRlbWVudChjb250ZXh0
KTsKKyAgICBjYXNlIERPOgorICAgICAgICByZXR1cm4gcGFyc2VEb1doaWxlU3RhdGVtZW50KGNv
bnRleHQpOworICAgIGNhc2UgV0hJTEU6CisgICAgICAgIHJldHVybiBwYXJzZVdoaWxlU3RhdGVt
ZW50KGNvbnRleHQpOworICAgIGNhc2UgRk9SOgorICAgICAgICByZXR1cm4gcGFyc2VGb3JTdGF0
ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBDT05USU5VRToKKyAgICAgICAgcmV0dXJuIHBhcnNl
Q29udGludWVTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBCUkVBSzoKKyAgICAgICAgcmV0
dXJuIHBhcnNlQnJlYWtTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBSRVRVUk46CisgICAg
ICAgIHJldHVybiBwYXJzZVJldHVyblN0YXRlbWVudChjb250ZXh0KTsKKyAgICBjYXNlIFdJVEg6
CisgICAgICAgIHJldHVybiBwYXJzZVdpdGhTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBT
V0lUQ0g6CisgICAgICAgIHJldHVybiBwYXJzZVN3aXRjaFN0YXRlbWVudChjb250ZXh0KTsKKyAg
ICBjYXNlIFRIUk9XOgorICAgICAgICByZXR1cm4gcGFyc2VUaHJvd1N0YXRlbWVudChjb250ZXh0
KTsKKyAgICBjYXNlIFRSWToKKyAgICAgICAgcmV0dXJuIHBhcnNlVHJ5U3RhdGVtZW50KGNvbnRl
eHQpOworICAgIGNhc2UgREVCVUdHRVI6CisgICAgICAgIHJldHVybiBwYXJzZURlYnVnZ2VyU3Rh
dGVtZW50KGNvbnRleHQpOworICAgIGNhc2UgRU9GVE9LOgorICAgIGNhc2UgQ0FTRToKKyAgICBj
YXNlIENMT1NFQlJBQ0U6CisgICAgY2FzZSBERUZBVUxUOgorICAgICAgICAvLyBUaGVzZSB0b2tl
bnMgaW1wbHkgdGhlIGVuZCBvZiBhIHNldCBvZiBzb3VyY2UgZWxlbWVudHMKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgY2FzZSBJREVOVDoKKyAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbk9y
TGFiZWxTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgY2FzZSBTVFJJTkc6CisgICAgICAgIGRpcmVj
dGl2ZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50ID0gbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50OworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFRyZWVTdGF0ZW1lbnQgZXhwclN0YXRlbWVudCA9IHBhcnNlRXhwcmVzc2lvblN0YXRlbWVu
dChjb250ZXh0KTsKKyAgICAgICAgaWYgKGRpcmVjdGl2ZSAmJiBub25Ucml2aWFsRXhwcmVzc2lv
bkNvdW50ICE9IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCkKKyAgICAgICAgICAgIGRpcmVj
dGl2ZSA9IDA7CisgICAgICAgIHJldHVybiBleHByU3RhdGVtZW50OworICAgIH0KK30KKwordGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBQYXJzZXI6
OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBtYXRj
aE9yRmFpbChJREVOVCk7CisgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2Fn
ZShkZWNsYXJlUGFyYW1ldGVyKG1fdG9rZW4ubV9kYXRhLmlkZW50KSwgIkNhbm5vdCBkZWNsYXJl
IGEgcGFyYW1ldGVyIG5hbWVkIiwgbV90b2tlbi5tX2RhdGEuaWRlbnQtPmltcGwoKSwgIiBpbiBz
dHJpY3QgbW9kZSIpOworICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3QgPSBjb250ZXh0
LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKm1fdG9rZW4ubV9kYXRhLmlkZW50KTsKKyAgICBU
cmVlRm9ybWFsUGFyYW1ldGVyTGlzdCB0YWlsID0gbGlzdDsKKyAgICBuZXh0KCk7CisgICAgd2hp
bGUgKG1hdGNoKENPTU1BKSkgeworICAgICAgICBuZXh0KCk7CisgICAgICAgIG1hdGNoT3JGYWls
KElERU5UKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKKyAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShk
ZWNsYXJlUGFyYW1ldGVyKGlkZW50KSwgIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVk
IiwgaWRlbnQtPmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7CisgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCh0YWlsLCAqaWRl
bnQpOworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCit7CisgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQorICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIo
KSwgc3RyaWN0TW9kZSgpKTsKKyAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3Rh
dGVtZW50RGVwdGgpOworICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOworICAgIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8SlNH
bG9iYWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgbV9sZXhlcik7CisgICAgZmFpbElmRmFsc2UocGFy
c2VTb3VyY2VFbGVtZW50czxDaGVja0ZvclN0cmljdE1vZGU+KGJvZHlCdWlsZGVyKSk7CisgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVy
KCksIHN0cmljdE1vZGUoKSk7Cit9CisKK3RlbXBsYXRlIDxQYXJzZXI6OkZ1bmN0aW9uUmVxdWly
ZW1lbnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3Mg
VHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYg
Y29udGV4dCwgY29uc3QgSWRlbnRpZmllciomIG5hbWUsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
JiBwYXJhbWV0ZXJzLCBUcmVlRnVuY3Rpb25Cb2R5JiBib2R5LCBpbnQmIG9wZW5CcmFjZVBvcywg
aW50JiBjbG9zZUJyYWNlUG9zLCBpbnQmIGJvZHlTdGFydExpbmUpCit7CisgICAgQXV0b1BvcFNj
b3BlUmVmIGZ1bmN0aW9uU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOworICAgIGZ1bmN0aW9uU2Nv
cGUtPnNldElzRnVuY3Rpb24oKTsKKyAgICBpZiAobWF0Y2goSURFTlQpKSB7CisgICAgICAgIG5h
bWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgZmFpbElmVHJ1ZVdpdGhNZXNzYWdl
KCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvLCAi
Q2Fubm90IG5hbWUgYSBmdW5jdGlvbiBfX3Byb3RvX18iKTsKKyAgICAgICAgbmV4dCgpOworICAg
ICAgICBpZiAoIW5hbWVJc0luQ29udGFpbmluZ1Njb3BlKQorICAgICAgICAgICAgZmFpbElmRmFs
c2VJZlN0cmljdChmdW5jdGlvblNjb3BlLT5kZWNsYXJlVmFyaWFibGUobmFtZSkpOworICAgIH0g
ZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgIGlmICghbWF0Y2go
Q0xPU0VQQVJFTikpIHsKKyAgICAgICAgcGFyYW1ldGVycyA9IHBhcnNlRm9ybWFsUGFyYW1ldGVy
cyhjb250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UocGFyYW1ldGVycyk7CisgICAgfQorICAg
IGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CisgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFKTsK
KyAgICAKKyAgICBvcGVuQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKKyAgICBi
b2R5U3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgCisgICAgLy8gSWYgd2Uga25vdyBhYm91
dCB0aGlzIGZ1bmN0aW9uIGFscmVhZHksIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCBpbmZvIGFuZCBz
a2lwIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCisgICAgaWYgKGNvbnN0
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBjYWNoZWRJbmZvID0gVHJlZUJ1aWxkZXI6OkNhblVz
ZUZ1bmN0aW9uQ2FjaGUgPyBmaW5kQ2FjaGVkRnVuY3Rpb25JbmZvKG9wZW5CcmFjZVBvcykgOiAw
KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRleHQsIHRoZSBjYWNoZWQg
ZnVuY3Rpb24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4KKyAgICAgICAgQVNTRVJU
KCFzdHJpY3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CisgICAgICAgIGJvZHkg
PSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBj
YWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uU2NvcGUt
PnJlc3RvcmVGdW5jdGlvbkluZm8oY2FjaGVkSW5mbyk7CisgICAgICAgIGZhaWxJZkZhbHNlKHBv
cFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8p
KTsKKyAgICAgICAgCisgICAgICAgIGNsb3NlQnJhY2VQb3MgPSBjYWNoZWRJbmZvLT5jbG9zZUJy
YWNlUG9zOworICAgICAgICBtX3Rva2VuID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7
CisgICAgICAgIG1fbGV4ZXItPnNldE9mZnNldChtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQpOwor
ICAgICAgICBtX2xleGVyLT5zZXRMaW5lTnVtYmVyKG1fdG9rZW4ubV9pbmZvLmxpbmUpOworICAg
ICAgICAKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgbmV4dCgpOworICAgIAorICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0
KTsKKyAgICBmYWlsSWZGYWxzZShib2R5KTsKKyAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0
TW9kZSgpICYmIG5hbWUpIHsKKyAgICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZSht
X2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSwgIkZ1bmN0aW9u
IG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAg
ICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBuYW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMg
bm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7CisgICAgfQorICAgIGNsb3NlQnJhY2VQb3MgPSBt
X3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKKyAgICAKKyAgICAvLyBDYWNoZSB0aGUgdG9rZW5pemVy
IHN0YXRlIGFuZCB0aGUgZnVuY3Rpb24gc2NvcGUgdGhlIGZpcnN0IHRpbWUgdGhlIGZ1bmN0aW9u
IGlzIHBhcnNlZC4KKyAgICAvLyBBbnkgZnV0dXJlIHJlcGFyc2luZyBjYW4gdGhlbiBza2lwIHRo
ZSBmdW5jdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRv
Q2FjaGUgPSA2NDsKKyAgICBPd25QdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+IG5ld0luZm87
CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gY2xvc2VCcmFjZVBvcyAtIG9wZW5CcmFjZVBvczsK
KyAgICBpZiAoVHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYgbV9mdW5jdGlvbkNh
Y2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSkgewor
ICAgICAgICBuZXdJbmZvID0gYWRvcHRQdHIobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKG1f
dG9rZW4ubV9pbmZvLmxpbmUsIGNsb3NlQnJhY2VQb3MpKTsKKyAgICAgICAgZnVuY3Rpb25TY29w
ZS0+c2F2ZUZ1bmN0aW9uSW5mbyhuZXdJbmZvLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgZmFp
bElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZh
cmlhYmxlSW5mbykpOworICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0UpOworICAgIAorICAgIGlm
IChuZXdJbmZvKSB7CisgICAgICAgIHVuc2lnbmVkIGFwcHJveGltYXRlQnl0ZVNpemUgPSBuZXdJ
bmZvLT5hcHByb3hpbWF0ZUJ5dGVTaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25DYWNoZS0+YWRk
KG9wZW5CcmFjZVBvcywgbmV3SW5mby5yZWxlYXNlKCksIGFwcHJveGltYXRlQnl0ZVNpemUpOwor
ICAgIH0KKyAgICAKKyAgICBuZXh0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goRlVO
Q1RJT04pKTsKKyAgICBuZXh0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9IDA7Cisg
ICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7CisgICAgVHJlZUZ1bmN0
aW9uQm9keSBib2R5ID0gMDsKKyAgICBpbnQgb3BlbkJyYWNlUG9zID0gMDsKKyAgICBpbnQgY2xv
c2VCcmFjZVBvcyA9IDA7CisgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOworICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5lZWRzTmFtZSwgdHJ1ZT4oY29udGV4dCwg
bmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5
U3RhcnRMaW5lKSkpOworICAgIGZhaWxJZkZhbHNlKG5hbWUpOworICAgIGZhaWxJZkZhbHNlSWZT
dHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUpKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVG
dW5jRGVjbFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBuYW1lLCBib2R5LCBw
YXJhbWV0ZXJzLCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1f
bGFzdExpbmUpOworfQorCitzdHJ1Y3QgTGFiZWxJbmZvIHsKKyAgICBMYWJlbEluZm8oY29uc3Qg
SWRlbnRpZmllciogaWRlbnQsIGludCBzdGFydCwgaW50IGVuZCkKKyAgICA6IG1faWRlbnQoaWRl
bnQpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9lbmQoZW5kKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgY29uc3QgSWRlbnRpZmllciogbV9pZGVudDsKKyAgICBpbnQgbV9zdGFydDsK
KyAgICBpbnQgbV9lbmQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25PckxhYmVsU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0KQoreworICAgIAorICAgIC8qIEV4cHJlc3Npb24gYW5kIExhYmVsIHN0YXRl
bWVudHMgYXJlIGFtYmlndW91cyBhdCBMTCgxKSwgc28gd2UgaGF2ZSBhCisgICAgICogc3BlY2lh
bCBjYXNlIHRoYXQgbG9va3MgZm9yIGEgY29sb24gYXMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRo
ZSBpbnB1dC4KKyAgICAgKi8KKyAgICBWZWN0b3I8TGFiZWxJbmZvPiBsYWJlbHM7CisgICAgCisg
ICAgZG8geworICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIGludCBz
dGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgaWYgKCFuZXh0VG9rZW5Jc0NvbG9uKCkp
IHsKKyAgICAgICAgICAgIC8vIElmIHdlIGhpdCB0aGlzIHBhdGggd2UncmUgbWFraW5nIGEgZXhw
cmVzc2lvbiBzdGF0ZW1lbnQsIHdoaWNoCisgICAgICAgICAgICAvLyBieSBkZWZpbml0aW9uIGNh
bid0IG1ha2UgdXNlIG9mIGNvbnRpbnVlL2JyZWFrIHNvIHdlIGNhbiBqdXN0CisgICAgICAgICAg
ICAvLyBpZ25vcmUgYW55IGxhYmVscyB3ZSBtaWdodCBoYXZlIGFjY3VtdWxhdGVkLgorICAgICAg
ICAgICAgVHJlZUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKGV4cHJlc3Npb24pOworICAgICAgICAgICAgZmFp
bElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUV4cHJTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwcmVzc2lvbiwg
c3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBpbnQgZW5kID0gdG9r
ZW5FbmQoKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsK
KyAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgTyhOXjIpIG92ZXIgdGhlIGN1cnJlbnQgbGlzdCBvZiBjb25zZWN1dGl2ZSBsYWJl
bHMsIGJ1dCBJCisgICAgICAgICAgICAvLyBoYXZlIG5ldmVyIHNlZW4gbW9yZSB0aGFuIG9uZSBs
YWJlbCBpbiBhIHJvdyBpbiB0aGUgcmVhbCB3b3JsZC4KKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIGZhaWxJZlRy
dWUoaWRlbnQtPmltcGwoKSA9PSBsYWJlbHNbaV0ubV9pZGVudC0+aW1wbCgpKTsKKyAgICAgICAg
ICAgIGZhaWxJZlRydWUoZ2V0TGFiZWwoaWRlbnQpKTsKKyAgICAgICAgICAgIGxhYmVscy5hcHBl
bmQoTGFiZWxJbmZvKGlkZW50LCBzdGFydCwgZW5kKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxl
IChtYXRjaChJREVOVCkpOworICAgIGJvb2wgaXNMb29wID0gZmFsc2U7CisgICAgc3dpdGNoICht
X3Rva2VuLm1fdHlwZSkgeworICAgIGNhc2UgRk9SOgorICAgIGNhc2UgV0hJTEU6CisgICAgY2Fz
ZSBETzoKKyAgICAgICAgaXNMb29wID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjb25zdCBJZGVudGlmaWVy
KiB1bnVzZWQgPSAwOworICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKQorICAgICAgICAg
ICAgcHVzaExhYmVsKGxhYmVsc1tpXS5tX2lkZW50LCBpc0xvb3ApOworICAgIH0KKyAgICBUcmVl
U3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7Cisg
ICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBwb3BMYWJlbCgpOwor
ICAgIH0KKyAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IExhYmVsSW5mbyYgaW5m
byA9IGxhYmVsc1tsYWJlbHMuc2l6ZSgpIC0gaSAtIDFdOworICAgICAgICBzdGF0ZW1lbnQgPSBj
b250ZXh0LmNyZWF0ZUxhYmVsU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGlu
Zm8ubV9pZGVudCwgc3RhdGVtZW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQpOworICAgIH0K
KyAgICByZXR1cm4gc3RhdGVtZW50OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCit7CisgICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIFRy
ZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAg
ZmFpbElmRmFsc2UoZXhwcmVzc2lvbik7CisgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigp
KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RM
aW5lTnVtYmVyKCksIGV4cHJlc3Npb24sIHN0YXJ0TGluZSwgbV9sYXN0TGluZSk7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI6OnBhcnNlSWZT
dGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1hdGNoKElGKSk7
CisgICAgCisgICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CisgICAgbmV4dCgpOworICAgIAor
ICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsKKyAgICAKKyAgICBUcmVlRXhwcmVzc2lvbiBj
b25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UoY29u
ZGl0aW9uKTsKKyAgICBpbnQgZW5kID0gdG9rZW5MaW5lKCk7CisgICAgY29uc3VtZU9yRmFpbChD
TE9TRVBBUkVOKTsKKyAgICAKKyAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOworICAg
IFRyZWVTdGF0ZW1lbnQgdHJ1ZUJsb2NrID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2Vk
KTsKKyAgICBmYWlsSWZGYWxzZSh0cnVlQmxvY2spOworICAgIAorICAgIGlmICghbWF0Y2goRUxT
RSkpCisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUlmU3RhdGVtZW50KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBzdGFydCwgZW5kKTsKKyAgICAK
KyAgICBWZWN0b3I8VHJlZUV4cHJlc3Npb24+IGV4cHJTdGFjazsKKyAgICBWZWN0b3I8cGFpcjxp
bnQsIGludD4gPiBwb3NTdGFjazsKKyAgICBWZWN0b3I8VHJlZVN0YXRlbWVudD4gc3RhdGVtZW50
U3RhY2s7CisgICAgYm9vbCB0cmFpbGluZ0Vsc2UgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAg
IG5leHQoKTsKKyAgICAgICAgaWYgKCFtYXRjaChJRikpIHsKKyAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgICAgICAgICBUcmVlU3RhdGVtZW50IGJsb2NrID0g
cGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGJsb2NrKTsKKyAgICAgICAgICAgIHN0YXRlbWVudFN0YWNrLmFwcGVuZChibG9jayk7CisgICAg
ICAgICAgICB0cmFpbGluZ0Vsc2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgaW50IGlubmVyU3RhcnQgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgbmV4dCgp
OworICAgICAgICAKKyAgICAgICAgY29uc3VtZU9yRmFpbChPUEVOUEFSRU4pOworICAgICAgICAK
KyAgICAgICAgVHJlZUV4cHJlc3Npb24gaW5uZXJDb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24o
Y29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGlubmVyQ29uZGl0aW9uKTsKKyAgICAgICAg
aW50IGlubmVyRW5kID0gdG9rZW5MaW5lKCk7CisgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQ
QVJFTik7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CisgICAgICAgIFRy
ZWVTdGF0ZW1lbnQgaW5uZXJUcnVlQmxvY2sgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVz
ZWQpOworICAgICAgICBmYWlsSWZGYWxzZShpbm5lclRydWVCbG9jayk7ICAgICAKKyAgICAgICAg
ZXhwclN0YWNrLmFwcGVuZChpbm5lckNvbmRpdGlvbik7CisgICAgICAgIHBvc1N0YWNrLmFwcGVu
ZChtYWtlX3BhaXIoaW5uZXJTdGFydCwgaW5uZXJFbmQpKTsKKyAgICAgICAgc3RhdGVtZW50U3Rh
Y2suYXBwZW5kKGlubmVyVHJ1ZUJsb2NrKTsKKyAgICB9IHdoaWxlIChtYXRjaChFTFNFKSk7Cisg
ICAgCisgICAgaWYgKCF0cmFpbGluZ0Vsc2UpIHsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gY29u
ZGl0aW9uID0gZXhwclN0YWNrLmxhc3QoKTsKKyAgICAgICAgZXhwclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCB0cnVlQmxvY2sgPSBzdGF0ZW1lbnRTdGFjay5sYXN0
KCk7CisgICAgICAgIHN0YXRlbWVudFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgcGFpcjxp
bnQsIGludD4gcG9zID0gcG9zU3RhY2subGFzdCgpOworICAgICAgICBwb3NTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgICAgIHN0YXRlbWVudFN0YWNrLmFwcGVuZChjb250ZXh0LmNyZWF0ZUlmU3Rh
dGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBw
b3MuZmlyc3QsIHBvcy5zZWNvbmQpKTsKKyAgICB9CisgICAgCisgICAgd2hpbGUgKCFleHByU3Rh
Y2suaXNFbXB0eSgpKSB7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbmRpdGlvbiA9IGV4cHJT
dGFjay5sYXN0KCk7CisgICAgICAgIGV4cHJTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIFRy
ZWVTdGF0ZW1lbnQgZmFsc2VCbG9jayA9IHN0YXRlbWVudFN0YWNrLmxhc3QoKTsKKyAgICAgICAg
c3RhdGVtZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBUcmVlU3RhdGVtZW50IHRydWVC
bG9jayA9IHN0YXRlbWVudFN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhdGVtZW50U3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICBwYWlyPGludCwgaW50PiBwb3MgPSBwb3NTdGFjay5sYXN0KCk7
CisgICAgICAgIHBvc1N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgc3RhdGVtZW50U3RhY2su
YXBwZW5kKGNvbnRleHQuY3JlYXRlSWZTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIo
KSwgY29uZGl0aW9uLCB0cnVlQmxvY2ssIGZhbHNlQmxvY2ssIHBvcy5maXJzdCwgcG9zLnNlY29u
ZCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVJZlN0YXRlbWVudCht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBjb25kaXRpb24sIHRydWVCbG9jaywgc3RhdGVtZW50
U3RhY2subGFzdCgpLCBzdGFydCwgZW5kKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3sKKyAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7CisgICAgVHJlZUV4cHJlc3Np
b24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElm
RmFsc2Uobm9kZSk7CisgICAgaWYgKCFtYXRjaChDT01NQSkpCisgICAgICAgIHJldHVybiBub2Rl
OworICAgIG5leHQoKTsKKyAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICBt
X25vbkxIU0NvdW50Kys7CisgICAgVHJlZUV4cHJlc3Npb24gcmlnaHQgPSBwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKHJpZ2h0KTsKKyAgICB0eXBl
bmFtZSBUcmVlQnVpbGRlcjo6Q29tbWEgY29tbWFOb2RlID0gY29udGV4dC5jcmVhdGVDb21tYUV4
cHIobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgbm9kZSwgcmlnaHQpOworICAgIHdoaWxlICht
YXRjaChDT01NQSkpIHsKKyAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5n
cyk7CisgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsK
KyAgICAgICAgZmFpbElmRmFsc2UocmlnaHQpOworICAgICAgICBjb250ZXh0LmFwcGVuZFRvQ29t
bWEoY29tbWFOb2RlLCByaWdodCk7CisgICAgfQorICAgIHJldHVybiBjb21tYU5vZGU7Cit9CisK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6
OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAg
ZmFpbElmU3RhY2tPdmVyZmxvdygpOworICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKKyAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OworICAgIGlu
dCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgIFRyZWVFeHByZXNzaW9u
IGxocyA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGNvbnRleHQpOworICAgIGZhaWxJZkZh
bHNlKGxocyk7CisgICAgaWYgKGluaXRpYWxOb25MSFNDb3VudCAhPSBtX25vbkxIU0NvdW50KQor
ICAgICAgICByZXR1cm4gbGhzOworICAgIAorICAgIGludCBhc3NpZ25tZW50U3RhY2sgPSAwOwor
ICAgIE9wZXJhdG9yIG9wOworICAgIGJvb2wgaGFkQXNzaWdubWVudCA9IGZhbHNlOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKKyAgICAgICAg
Y2FzZSBFUVVBTDogb3AgPSBPcEVxdWFsOyBicmVhazsKKyAgICAgICAgY2FzZSBQTFVTRVFVQUw6
IG9wID0gT3BQbHVzRXE7IGJyZWFrOworICAgICAgICBjYXNlIE1JTlVTRVFVQUw6IG9wID0gT3BN
aW51c0VxOyBicmVhazsKKyAgICAgICAgY2FzZSBNVUxURVFVQUw6IG9wID0gT3BNdWx0RXE7IGJy
ZWFrOworICAgICAgICBjYXNlIERJVkVRVUFMOiBvcCA9IE9wRGl2RXE7IGJyZWFrOworICAgICAg
ICBjYXNlIExTSElGVEVRVUFMOiBvcCA9IE9wTFNoaWZ0OyBicmVhazsKKyAgICAgICAgY2FzZSBS
U0hJRlRFUVVBTDogb3AgPSBPcFJTaGlmdDsgYnJlYWs7CisgICAgICAgIGNhc2UgVVJTSElGVEVR
VUFMOiBvcCA9IE9wVVJTaGlmdDsgYnJlYWs7CisgICAgICAgIGNhc2UgQU5ERVFVQUw6IG9wID0g
T3BBbmRFcTsgYnJlYWs7CisgICAgICAgIGNhc2UgWE9SRVFVQUw6IG9wID0gT3BYT3JFcTsgYnJl
YWs7CisgICAgICAgIGNhc2UgT1JFUVVBTDogb3AgPSBPcE9yRXE7IGJyZWFrOworICAgICAgICBj
YXNlIE1PREVRVUFMOiBvcCA9IE9wTW9kRXE7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50Kys7CisgICAgICAgIGhhZEFzc2lnbm1lbnQgPSB0cnVlOworICAgICAgICBjb250
ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3NpZ25tZW50U3RhY2ssIGxocywgc3RhcnQsIHRv
a2VuU3RhcnQoKSwgbV9hc3NpZ25tZW50Q291bnQsIG9wKTsKKyAgICAgICAgc3RhcnQgPSB0b2tl
blN0YXJ0KCk7CisgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgIG5leHQoVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAgICBpZiAoc3RyaWN0TW9kZSgpICYm
IG1fbGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29sdmUobGhzKSkgeworICAgICAgICAg
ICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5ldmFsID09ICptX2xhc3RJZGVudGlmaWVyLCAiJ2V2YWwnIGNhbm5vdCBiZSBtb2RpZmll
ZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1l
c3NhZ2UobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fbGFzdElk
ZW50aWZpZXIsICInYXJndW1lbnRzJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUi
KTsKKyAgICAgICAgICAgIGRlY2xhcmVXcml0ZShtX2xhc3RJZGVudGlmaWVyKTsKKyAgICAgICAg
ICAgIG1fbGFzdElkZW50aWZpZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGxocyA9IHBhcnNl
Q29uZGl0aW9uYWxFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShsaHMp
OworICAgICAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fbm9uTEhTQ291bnQpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CitlbmQ6CisgICAgaWYgKGhhZEFzc2lnbm1lbnQpCisgICAg
ICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICAKKyAgICBpZiAoIVRyZWVCdWlsZGVyOjpDcmVhdGVz
QVNUKQorICAgICAgICByZXR1cm4gbGhzOworICAgIAorICAgIHdoaWxlIChhc3NpZ25tZW50U3Rh
Y2spCisgICAgICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpLCBhc3NpZ25tZW50U3RhY2ssIGxocywgaW5pdGlhbEFzc2lnbm1lbnRDb3Vu
dCwgbV9hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tlbkVuZCgpKTsKKyAgICAKKyAgICByZXR1cm4g
bGhzOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBh
cnNlcjo6cGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7
CisgICAgVHJlZUV4cHJlc3Npb24gY29uZCA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICBmYWlsSWZGYWxzZShjb25kKTsKKyAgICBpZiAoIW1hdGNoKFFVRVNUSU9OKSkKKyAg
ICAgICAgcmV0dXJuIGNvbmQ7CisgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Cisg
ICAgbV9ub25MSFNDb3VudCsrOworICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmlu
Z3MpOworICAgIFRyZWVFeHByZXNzaW9uIGxocyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
Y29udGV4dCk7CisgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhDT0xPTiwgVHJlZUJ1aWxkZXI6
OkRvbnRCdWlsZFN0cmluZ3MpOworICAgIAorICAgIFRyZWVFeHByZXNzaW9uIHJocyA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UocmhzKTsKKyAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVDb25kaXRpb25hbEV4cHIobV9sZXhlci0+bGFzdExpbmVO
dW1iZXIoKSwgY29uZCwgbGhzLCByaHMpOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzVW5hcnlPcChKU1Rva2VuVHlwZSB0b2tlbikKK3sKKyAgICByZXR1cm4gdG9rZW4gJiBVbmFy
eU9wVG9rZW5GbGFnOworfQorCitpbnQgUGFyc2VyOjppc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5U
eXBlIHRva2VuKQoreworICAgIGlmIChtX2FsbG93c0luKQorICAgICAgICByZXR1cm4gdG9rZW4g
JiAoQmluYXJ5T3BUb2tlblByZWNlZGVuY2VNYXNrIDw8IEJpbmFyeU9wVG9rZW5BbGxvd3NJblBy
ZWNlZGVuY2VBZGRpdGlvbmFsU2hpZnQpOworICAgIHJldHVybiB0b2tlbiAmIEJpbmFyeU9wVG9r
ZW5QcmVjZWRlbmNlTWFzazsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlQmluYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29u
dGV4dCkKK3sKKyAgICAKKyAgICBpbnQgb3BlcmFuZFN0YWNrRGVwdGggPSAwOworICAgIGludCBv
cGVyYXRvclN0YWNrRGVwdGggPSAwOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlF
eHByQ29udGV4dCBiaW5hcnlFeHByQ29udGV4dChjb250ZXh0KTsKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBpbnQgZXhwclN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBpbnQgaW5p
dGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CisgICAgICAgIFRyZWVFeHByZXNz
aW9uIGN1cnJlbnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgZmFp
bElmRmFsc2UoY3VycmVudCk7CisgICAgICAgIAorICAgICAgICBjb250ZXh0LmFwcGVuZEJpbmFy
eUV4cHJlc3Npb25JbmZvKG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3RhcnQsIGxh
c3RUb2tlbkVuZCgpLCBsYXN0VG9rZW5FbmQoKSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNz
aWdubWVudENvdW50KTsKKyAgICAgICAgaW50IHByZWNlZGVuY2UgPSBpc0JpbmFyeU9wZXJhdG9y
KG1fdG9rZW4ubV90eXBlKTsKKyAgICAgICAgaWYgKCFwcmVjZWRlbmNlKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBt
X25vbkxIU0NvdW50Kys7CisgICAgICAgIGludCBvcGVyYXRvclRva2VuID0gbV90b2tlbi5tX3R5
cGU7CisgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAg
ICAKKyAgICAgICAgd2hpbGUgKG9wZXJhdG9yU3RhY2tEZXB0aCAmJiAgY29udGV4dC5vcGVyYXRv
clN0YWNrSGFzSGlnaGVyUHJlY2VkZW5jZShvcGVyYXRvclN0YWNrRGVwdGgsIHByZWNlZGVuY2Up
KSB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFN0YWNrRGVwdGggPiAxKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgcmhz
ID0gY29udGV4dC5nZXRGcm9tT3BlcmFuZFN0YWNrKC0xKTsKKyAgICAgICAgICAgIHR5cGVuYW1l
IFRyZWVCdWlsZGVyOjpCaW5hcnlPcGVyYW5kIGxocyA9IGNvbnRleHQuZ2V0RnJvbU9wZXJhbmRT
dGFjaygtMik7CisgICAgICAgICAgICBjb250ZXh0LnNocmlua09wZXJhbmRTdGFja0J5KG9wZXJh
bmRTdGFja0RlcHRoLCAyKTsKKyAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5T3BlcmF0
aW9uKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIG9wZXJhbmRTdGFja0RlcHRoLCBvcGVyYXRv
clN0YWNrRGVwdGgsIGxocywgcmhzKTsKKyAgICAgICAgICAgIGNvbnRleHQub3BlcmF0b3JTdGFj
a1BvcChvcGVyYXRvclN0YWNrRGVwdGgpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQub3Bl
cmF0b3JTdGFja0FwcGVuZChvcGVyYXRvclN0YWNrRGVwdGgsIG9wZXJhdG9yVG9rZW4sIHByZWNl
ZGVuY2UpOworICAgIH0KKyAgICB3aGlsZSAob3BlcmF0b3JTdGFja0RlcHRoKSB7CisgICAgICAg
IEFTU0VSVChvcGVyYW5kU3RhY2tEZXB0aCA+IDEpOworICAgICAgICAKKyAgICAgICAgdHlwZW5h
bWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQgcmhzID0gY29udGV4dC5nZXRGcm9tT3BlcmFu
ZFN0YWNrKC0xKTsKKyAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeU9wZXJhbmQg
bGhzID0gY29udGV4dC5nZXRGcm9tT3BlcmFuZFN0YWNrKC0yKTsKKyAgICAgICAgY29udGV4dC5z
aHJpbmtPcGVyYW5kU3RhY2tCeShvcGVyYW5kU3RhY2tEZXB0aCwgMik7CisgICAgICAgIGNvbnRl
eHQuYXBwZW5kQmluYXJ5T3BlcmF0aW9uKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIG9wZXJh
bmRTdGFja0RlcHRoLCBvcGVyYXRvclN0YWNrRGVwdGgsIGxocywgcmhzKTsKKyAgICAgICAgY29u
dGV4dC5vcGVyYXRvclN0YWNrUG9wKG9wZXJhdG9yU3RhY2tEZXB0aCk7CisgICAgfQorICAgIHJl
dHVybiBjb250ZXh0LnBvcE9wZXJhbmRTdGFjayhvcGVyYW5kU3RhY2tEZXB0aCk7Cit9CisKKwor
dGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkg
UGFyc2VyOjpwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAgIGJvb2wg
d2FzSWRlbnQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CisgICAgbmFt
ZWRQcm9wZXJ0eToKKyAgICBjYXNlIElERU5UOgorICAgICAgICB3YXNJZGVudCA9IHRydWU7Cisg
ICAgY2FzZSBTVFJJTkc6IHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rv
a2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgaWYgKGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAo
KmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVudCA9PSBt
X2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnNldCkpKQorICAgICAgICAgICAgbmV4dEV4cGVj
dElkZW50aWZpZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3Jk
cyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgIAorICAgICAgICBp
ZiAobWF0Y2goQ09MT04pKSB7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBUcmVl
RXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
dGVtcGxhdGUgY3JlYXRlUHJvcGVydHk8Y29tcGxldGU+KGlkZW50LCBub2RlLCBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50KTsKKyAgICAgICAgfQorICAgICAgICBmYWlsSWZGYWxzZSh3YXNJZGVudCk7
CisgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciog
YWNjZXNzb3JOYW1lID0gMDsKKyAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1l
dGVycyA9IDA7CisgICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7CisgICAgICAgIGlu
dCBvcGVuQnJhY2VQb3MgPSAwOworICAgICAgICBpbnQgY2xvc2VCcmFjZVBvcyA9IDA7CisgICAg
ICAgIGludCBib2R5U3RhcnRMaW5lID0gMDsKKyAgICAgICAgUHJvcGVydHlOb2RlOjpUeXBlIHR5
cGU7CisgICAgICAgIGlmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5n
ZXQpCisgICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7CisgICAgICAgIGVs
c2UgaWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnNldCkKKyAgICAg
ICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6OlNldHRlcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZmFpbCgpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVu
Y3Rpb25OZWVkc05hbWUsIGZhbHNlPihjb250ZXh0LCBhY2Nlc3Nvck5hbWUsIHBhcmFtZXRlcnMs
IGJvZHksIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSkpKTsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eTxjb21wbGV0ZT4obV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgdHlwZSwgYWNjZXNzb3JOYW1l
LCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFy
dExpbmUsIG1fbGFzdExpbmUpOworICAgIH0KKyAgICBjYXNlIE5VTUJFUjogeworICAgICAgICBk
b3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CisgICAgICAg
IG5leHQoKTsKKyAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTik7CisgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAg
ICBmYWlsSWZGYWxzZShub2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3Jl
YXRlUHJvcGVydHk8Y29tcGxldGU+KGNvbnN0X2Nhc3Q8SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxE
YXRhKSwgcHJvcGVydHlOYW1lLCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbElmRmFsc2UobV90b2tlbi5tX3R5cGUgJiBLZXl3
b3JkVG9rZW5GbGFnKTsKKyAgICAgICAgZ290byBuYW1lZFByb3BlcnR5OworICAgIH0KK30KKwor
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNl
T2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBpbnQgc3RhcnRPZmZz
ZXQgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKKyAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdz
KE9QRU5CUkFDRSwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgIAorICAgIGlm
IChtYXRjaChDTE9TRUJSQUNFKSkgeworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSk7Cisg
ICAgfQorICAgIAorICAgIFRyZWVQcm9wZXJ0eSBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHk8ZmFs
c2U+KGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKKyAgICBpZiAoIW1fc3lu
dGF4QWxyZWFkeVZhbGlkYXRlZCAmJiBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICE9IFByb3Bl
cnR5Tm9kZTo6Q29uc3RhbnQpIHsKKyAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gcGFyc2VTdHJpY3RPYmplY3RM
aXRlcmFsKGNvbnRleHQpOworICAgIH0KKyAgICBUcmVlUHJvcGVydHlMaXN0IHByb3BlcnR5TGlz
dCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCks
IHByb3BlcnR5KTsKKyAgICBUcmVlUHJvcGVydHlMaXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7Cisg
ICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgeworICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250
QnVpbGRTdHJpbmdzKTsKKyAgICAgICAgLy8gYWxsb3cgZXh0cmEgY29tbWEsIHNlZSBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTM5CisgICAgICAgIGlmIChtYXRjaChD
TE9TRUJSQUNFKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcm9wZXJ0eSA9IHBhcnNl
UHJvcGVydHk8ZmFsc2U+KGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7
CisgICAgICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkICYmIGNvbnRleHQuZ2V0VHlw
ZShwcm9wZXJ0eSkgIT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCkgeworICAgICAgICAgICAgbV9s
ZXhlci0+c2V0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIHByb3BlcnR5LCB0YWlsKTsKKyAgICB9CisgICAgCisgICAgY29uc3Vt
ZU9yRmFpbChDTE9TRUJSQUNFKTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVPYmpl
Y3RMaXRlcmFsKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHByb3BlcnR5TGlzdCk7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJz
ZVN0cmljdE9iamVjdExpdGVyYWwoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit7CisgICAgY29uc3Vt
ZU9yRmFpbChPUEVOQlJBQ0UpOworICAgIAorICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewor
ICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVy
YWwobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIFRyZWVQcm9w
ZXJ0eSBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHk8dHJ1ZT4oY29udGV4dCk7CisgICAgZmFpbElm
RmFsc2UocHJvcGVydHkpOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5n
SW1wbD4sIHVuc2lnbmVkLCBJZGVudGlmaWVyUmVwSGFzaD4gT2JqZWN0VmFsaWRhdGlvbk1hcDsK
KyAgICBPYmplY3RWYWxpZGF0aW9uTWFwIG9iamVjdFZhbGlkYXRvcjsKKyAgICAvLyBBZGQgdGhl
IGZpcnN0IHByb3BlcnR5CisgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpCisgICAg
ICAgIG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1lKHByb3BlcnR5KS5pbXBsKCks
IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOworICAgIAorICAgIFRyZWVQcm9wZXJ0eUxpc3Qg
cHJvcGVydHlMaXN0ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSwgcHJvcGVydHkpOworICAgIFRyZWVQcm9wZXJ0eUxpc3QgdGFpbCA9IHByb3Bl
cnR5TGlzdDsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgLy8gYWxsb3cgZXh0cmEgY29tbWEsIHNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01OTM5CisgICAgICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHk8dHJ1ZT4oY29u
dGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5KTsKKyAgICAgICAgaWYgKCFtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxPYmplY3RWYWxp
ZGF0aW9uTWFwOjppdGVyYXRvciwgYm9vbD4gcHJvcGVydHlFbnRyeUl0ZXIgPSBvYmplY3RWYWxp
ZGF0b3IuYWRkKGNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkuaW1wbCgpLCBjb250ZXh0LmdldFR5
cGUocHJvcGVydHkpKTsKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlFbnRyeUl0ZXIuc2Vjb25k
KSB7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShwcm9wZXJ0eUVudHJ5SXRlci5maXJzdC0+
c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50
KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkg
JiBwcm9wZXJ0eUVudHJ5SXRlci5maXJzdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUVudHJ5SXRlci5maXJzdC0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHByb3BlcnR5LCB0YWlsKTsK
KyAgICB9CisgICAgCisgICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFKTsKKyAgICAKKyAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVPYmplY3RMaXRlcmFsKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVy
KCksIHByb3BlcnR5TGlzdCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUFycmF5TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4
dCkKK3sKKyAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5CUkFDS0VULCBUcmVlQnVpbGRl
cjo6RG9udEJ1aWxkU3RyaW5ncyk7CisgICAgCisgICAgaW50IGVsaXNpb25zID0gMDsKKyAgICB3
aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWls
ZFN0cmluZ3MpOworICAgICAgICBlbGlzaW9ucysrOworICAgIH0KKyAgICBpZiAobWF0Y2goQ0xP
U0VCUkFDS0VUKSkgeworICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdz
KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJyYXkobV9sZXhlci0+bGFzdExpbmVO
dW1iZXIoKSwgZWxpc2lvbnMpOworICAgIH0KKyAgICAKKyAgICBUcmVlRXhwcmVzc2lvbiBlbGVt
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShl
bGVtKTsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RWxlbWVudExpc3QgZWxlbWVudExpc3Qg
PSBjb250ZXh0LmNyZWF0ZUVsZW1lbnRMaXN0KGVsaXNpb25zLCBlbGVtKTsKKyAgICB0eXBlbmFt
ZSBUcmVlQnVpbGRlcjo6RWxlbWVudExpc3QgdGFpbCA9IGVsZW1lbnRMaXN0OworICAgIGVsaXNp
b25zID0gMDsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgIG5leHQoVHJlZUJ1
aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgICAgICBlbGlzaW9ucyA9IDA7CisgICAgICAg
IAorICAgICAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAgICAgICBuZXh0KCk7Cisg
ICAgICAgICAgICBlbGlzaW9ucysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
bWF0Y2goQ0xPU0VCUkFDS0VUKSkgeworICAgICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9u
dEJ1aWxkU3RyaW5ncyk7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVBcnJheSht
X2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBlbGlzaW9ucywgZWxlbWVudExpc3QpOworICAgICAg
ICB9CisgICAgICAgIFRyZWVFeHByZXNzaW9uIGVsZW0gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShlbGVtKTsKKyAgICAgICAgdGFpbCA9
IGNvbnRleHQuY3JlYXRlRWxlbWVudExpc3QodGFpbCwgZWxpc2lvbnMsIGVsZW0pOworICAgIH0K
KyAgICAKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7CisgICAgCisgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlQXJyYXkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZWxlbWVudExp
c3QpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBh
cnNlcjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CisgICAgY2FzZSBPUEVOQlJBQ0U6CisgICAgICAg
IGlmIChzdHJpY3RNb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpY3RPYmplY3RM
aXRlcmFsKGNvbnRleHQpOworICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RMaXRlcmFsKGNvbnRl
eHQpOworICAgIGNhc2UgT1BFTkJSQUNLRVQ6CisgICAgICAgIHJldHVybiBwYXJzZUFycmF5TGl0
ZXJhbChjb250ZXh0KTsKKyAgICBjYXNlIE9QRU5QQVJFTjogeworICAgICAgICBuZXh0KCk7Cisg
ICAgICAgIGludCBvbGROb25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAgICAgIFRyZWVF
eHByZXNzaW9uIHJlc3VsdCA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgbV9u
b25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OworICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NF
UEFSRU4pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgY2Fz
ZSBUSElTVE9LRU46IHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29udGV4dC50
aGlzRXhwcihtX2xleGVyLT5sYXN0TGluZU51bWJlcigpKTsKKyAgICB9CisgICAgY2FzZSBJREVO
VDogeworICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgIG5leHQoKTsK
KyAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50KTsKKyAgICAgICAgbV9sYXN0SWRlbnRpZmll
ciA9IGlkZW50OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKG1fbGV4ZXIt
Pmxhc3RMaW5lTnVtYmVyKCksIGlkZW50LCBzdGFydCk7CisgICAgfQorICAgIGNhc2UgU1RSSU5H
OiB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRl
bnQ7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlU3RyaW5n
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGlkZW50KTsKKyAgICB9CisgICAgY2FzZSBOVU1C
RVI6IHsKKyAgICAgICAgZG91YmxlIGQgPSBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZTsKKyAg
ICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVOdW1iZXJFeHByKG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGQpOworICAgIH0KKyAgICBjYXNlIE5VTExUT0tFTjog
eworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU51bGwobV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKSk7CisgICAgfQorICAgIGNhc2UgVFJVRVRPS0VOOiB7Cisg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQm9vbGVhbihtX2xl
eGVyLT5sYXN0TGluZU51bWJlcigpLCB0cnVlKTsKKyAgICB9CisgICAgY2FzZSBGQUxTRVRPS0VO
OiB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQm9vbGVh
bihtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBmYWxzZSk7CisgICAgfQorICAgIGNhc2UgRElW
RVFVQUw6CisgICAgY2FzZSBESVZJREU6IHsKKyAgICAgICAgLyogcmVnZXhwICovCisgICAgICAg
IGNvbnN0IElkZW50aWZpZXIqIHBhdHRlcm47CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGZs
YWdzOworICAgICAgICBpZiAobWF0Y2goRElWRVFVQUwpKQorICAgICAgICAgICAgZmFpbElmRmFs
c2UobV9sZXhlci0+c2NhblJlZ0V4cChwYXR0ZXJuLCBmbGFncywgJz0nKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1fbGV4ZXItPnNjYW5SZWdFeHAocGF0dGVybiwg
ZmxhZ3MpKTsKKyAgICAgICAgCisgICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKKyAg
ICAgICAgbmV4dCgpOworICAgICAgICBUcmVlRXhwcmVzc2lvbiByZSA9IGNvbnRleHQuY3JlYXRl
UmVnRXhwKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksICpwYXR0ZXJuLCAqZmxhZ3MsIHN0YXJ0
KTsKKyAgICAgICAgaWYgKCFyZSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogeWFyckVycm9y
TXNnID0gWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi0+dXN0cmluZygpKTsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOworICAgICAgICAgICAgZmFpbFdpdGhN
ZXNzYWdlKHlhcnJFcnJvck1zZyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBmYWlsKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVBcmd1bWVudHMgUGFyc2VyOjpwYXJzZUFyZ3VtZW50cyhU
cmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5Q
QVJFTiwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOworICAgIGlmIChtYXRjaChDTE9T
RVBBUkVOKSkgeworICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJndW1lbnRzKCk7CisgICAgfQorICAgIFRy
ZWVFeHByZXNzaW9uIGZpcnN0QXJnID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICBmYWlsSWZGYWxzZShmaXJzdEFyZyk7CisgICAgCisgICAgVHJlZUFyZ3VtZW50c0xp
c3QgYXJnTGlzdCA9IGNvbnRleHQuY3JlYXRlQXJndW1lbnRzTGlzdChtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBmaXJzdEFyZyk7CisgICAgVHJlZUFyZ3VtZW50c0xpc3QgdGFpbCA9IGFyZ0xp
c3Q7CisgICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgeworICAgICAgICBuZXh0KFRyZWVCdWlsZGVy
OjpEb250QnVpbGRTdHJpbmdzKTsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gYXJnID0gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgZmFpbElmRmFsc2UoYXJnKTsK
KyAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlQXJndW1lbnRzTGlzdChtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpLCB0YWlsLCBhcmcpOworICAgIH0KKyAgICBjb25zdW1lT3JGYWlsKENMT1NF
UEFSRU4pOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFyZ3VtZW50cyhhcmdMaXN0KTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI6OnBh
cnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3sKKyAgICBUcmVlRXhw
cmVzc2lvbiBiYXNlID0gMDsKKyAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgaW50
IGV4cHJlc3Npb25TdGFydCA9IHN0YXJ0OworICAgIGludCBuZXdDb3VudCA9IDA7CisgICAgd2hp
bGUgKG1hdGNoKE5FVykpIHsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBuZXdDb3VudCsrOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobWF0Y2goRlVOQ1RJT04pKSB7CisgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIG5hbWUgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRp
ZmllcjsKKyAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7Cisg
ICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7CisgICAgICAgIGludCBvcGVuQnJhY2VQ
b3MgPSAwOworICAgICAgICBpbnQgY2xvc2VCcmFjZVBvcyA9IDA7CisgICAgICAgIGludCBib2R5
U3RhcnRMaW5lID0gMDsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm88RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIG5h
bWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0
YXJ0TGluZSkpKTsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFj
ZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworICAg
IAorICAgIGZhaWxJZkZhbHNlKGJhc2UpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHN3
aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKKyAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogeworICAg
ICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICBpbnQg
ZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgICAgICAgICAgbmV4dCgpOworICAg
ICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICAgICAgICAgIGlu
dCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAg
ICAgICAgZmFpbElmRmFsc2UocHJvcGVydHkpOworICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQu
Y3JlYXRlQnJhY2tldEFjY2VzcyhtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBiYXNlLCBwcm9w
ZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHByZXNzaW9u
U3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOworICAgICAgICAgICAgY29uc3VtZU9y
RmFpbChDTE9TRUJSQUNLRVQpOworICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0Nv
dW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPUEVOUEFS
RU46IHsKKyAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAg
ICAgICAgaWYgKG5ld0NvdW50KSB7CisgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2goT1BFTlBBUkVOKSkgeworICAgICAgICAgICAgICAgICAgICBp
bnQgZXhwckVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgICAgICAgICAgICAgICAgICBUcmVlQXJn
dW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOworICAgICAgICAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICBiYXNl
ID0gY29udGV4dC5jcmVhdGVOZXdFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGJhc2Us
IGFyZ3VtZW50cywgc3RhcnQsIGV4cHJFbmQsIGxhc3RUb2tlbkVuZCgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3
RXhwcihtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBiYXNlLCBzdGFydCwgbGFzdFRva2VuRW5k
KCkpOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgICAgICAgICAgICAgIGludCBl
eHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgICAgICAgICAgICAgVHJlZUFyZ3Vt
ZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGJhc2UsIGFy
Z3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmQoKSk7
CisgICAgICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBET1Q6IHsK
KyAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICAgICAg
aW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgICAgIG5leHRFeHBl
Y3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRv
bnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKKyAgICAg
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZURvdEFjY2VzcyhtX2xleGVyLT5sYXN0TGluZU51
bWJlcigpLCBiYXNlLCBtX3Rva2VuLm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCB0b2tlbkVuZCgpKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnb3RvIGVu
ZE1lbWJlckV4cHJlc3Npb247CisgICAgICAgIH0KKyAgICB9CitlbmRNZW1iZXJFeHByZXNzaW9u
OgorICAgIHdoaWxlIChuZXdDb3VudC0tKQorICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVO
ZXdFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGJhc2UsIHN0YXJ0LCBsYXN0VG9rZW5F
bmQoKSk7CisgICAgcmV0dXJuIGJhc2U7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbihUcmVlQnVpbGRl
ciYgY29udGV4dCkKK3sKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6VW5hcnlFeHByQ29udGV4
dCB1bmFyeUV4cHJDb250ZXh0KGNvbnRleHQpOworICAgIEFsbG93SW5PdmVycmlkZSBhbGxvd0lu
T3ZlcnJpZGUodGhpcyk7CisgICAgaW50IHRva2VuU3RhY2tEZXB0aCA9IDA7CisgICAgYm9vbCBt
b2RpZmllc0V4cHIgPSBmYWxzZTsKKyAgICBib29sIHJlcXVpcmVzTEV4cHIgPSBmYWxzZTsKKyAg
ICB3aGlsZSAoaXNVbmFyeU9wKG1fdG9rZW4ubV90eXBlKSkgeworICAgICAgICBpZiAoc3RyaWN0
TW9kZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIFBMVVNQTFVTOgorICAgICAgICAgICAgY2FzZSBNSU5VU01JTlVTOgorICAgICAg
ICAgICAgY2FzZSBBVVRPUExVU1BMVVM6CisgICAgICAgICAgICBjYXNlIEFVVE9NSU5VU01JTlVT
OgorICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocmVxdWlyZXNMRXhwcik7CisgICAgICAgICAg
ICAgICAgbW9kaWZpZXNFeHByID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXF1aXJlc0xFeHBy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgREVMRVRF
VE9LRU46CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShyZXF1aXJlc0xFeHByKTsKKyAgICAg
ICAgICAgICAgICByZXF1aXJlc0xFeHByID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShyZXF1aXJl
c0xFeHByKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIGNvbnRleHQuYXBwZW5kVW5hcnlU
b2tlbih0b2tlblN0YWNrRGVwdGgsIG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0KCkpOworICAg
ICAgICBuZXh0KCk7CisgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAg
IH0KKyAgICBpbnQgc3ViRXhwclN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgIFRyZWVFeHByZXNz
aW9uIGV4cHIgPSBwYXJzZU1lbWJlckV4cHJlc3Npb24oY29udGV4dCk7CisgICAgZmFpbElmRmFs
c2UoZXhwcik7CisgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IGZhbHNlOworICAgIGlmIChz
dHJpY3RNb2RlKCkgJiYgIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgeworICAgICAgICBpZiAo
Y29udGV4dC5pc1Jlc29sdmUoZXhwcikpCisgICAgICAgICAgICBpc0V2YWxPckFyZ3VtZW50cyA9
ICptX2xhc3RJZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCB8
fCAqbV9sYXN0SWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50czsKKyAgICB9CisgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGlz
RXZhbE9yQXJndW1lbnRzICYmIG1vZGlmaWVzRXhwciwgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5p
bXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOworICAgIHN3aXRj
aCAobV90b2tlbi5tX3R5cGUpIHsKKyAgICBjYXNlIFBMVVNQTFVTOgorICAgICAgICBtX25vblRy
aXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAgICAg
ICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIo
KSwgZXhwciwgT3BQbHVzUGx1cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5F
bmQoKSk7CisgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgIGZhaWxJZlRydWVJ
ZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJ
ZGVudGlmaWVyLT5pbXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIp
OworICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QocmVxdWlyZXNMRXhwcik7CisgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNSU5VU01JTlVTOgorICAgICAgICBtX25v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAg
ICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgZXhwciwgT3BNaW51c01pbnVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCB0
b2tlbkVuZCgpKTsKKyAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1lbnRzLCAiJyIsIG1f
bGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBt
b2RlIik7CisgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChyZXF1aXJlc0xFeHByKTsKKyAgICAg
ICAgbmV4dCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCisgICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgIAorICAgIGlm
ICghVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QgJiYgKG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCB8
fCAhc3RyaWN0TW9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgCisgICAgd2hpbGUg
KHRva2VuU3RhY2tEZXB0aCkgeworICAgICAgICBzd2l0Y2ggKGNvbnRleHQudW5hcnlUb2tlblN0
YWNrTGFzdFR5cGUodG9rZW5TdGFja0RlcHRoKSkgeworICAgICAgICBjYXNlIEVYQ0xBTUFUSU9O
OgorICAgICAgICAgICAgZXhwciA9IGNvbnRleHQuY3JlYXRlTG9naWNhbE5vdChtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpLCBleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRJTERFOgorICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZUJpdHdpc2VOb3ROb2RlKG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTUlOVVM6CisgICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlTmVnYXRlTm9k
ZShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBleHByKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFBMVVM6CisgICAgICAgICAgICBleHByID0gY29udGV4dC5jcmVhdGVVbmFy
eVBsdXMobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQTFVTUExVUzoKKyAgICAgICAgY2FzZSBBVVRPUExVU1BMVVM6Cisg
ICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RT
dGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOworICAgICAgICAg
ICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1JTlVTTUlOVVM6CisgICAgICAgIGNhc2UgQVVUT01JTlVTTUlOVVM6CisgICAgICAgICAgICBl
eHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBl
eHByLCBPcE1pbnVzTWludXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2Vu
U3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEsIGVuZCk7CisgICAgICAgICAgICBtX2Fzc2ln
bm1lbnRDb3VudCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFlQRU9GOgor
ICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVR5cGVPZk5vZGUobV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSwgZXhwcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWT0lE
VE9LRU46CisgICAgICAgICAgICBleHByID0gY29udGV4dC5jcmVhdGVWb2lkKG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIGV4cHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
REVMRVRFVE9LRU46CisgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1l
c3NhZ2UoY29udGV4dC5pc1Jlc29sdmUoZXhwciksICJDYW5ub3QgZGVsZXRlIHVucXVhbGlmaWVk
IHByb3BlcnR5IiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUiKTsK
KyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2RlKG1fbGV4ZXItPmxhc3RM
aW5lTnVtYmVyKCksIGV4cHIsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2Vu
U3RhY2tEZXB0aCksIGVuZCwgZW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgc29tZXRoaW5nIGhhcyBnb25lIGhv
cnJpYmx5IGhvcnJpYmx5IHdyb25nCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9Cisg
ICAgICAgIHN1YkV4cHJTdGFydCA9IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRv
a2VuU3RhY2tEZXB0aCk7CisgICAgICAgIGNvbnRleHQudW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFz
dCh0b2tlblN0YWNrRGVwdGgpOworICAgIH0KKyAgICByZXR1cm4gZXhwcjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJl
dmlzaW9uIDk4NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5j
bHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgorI2luY2x1ZGUgIlBhcnNl
clRva2Vucy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTM4LDk3ICs0
MCw5OTggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2Rl
OwotICAgIAotICAgIGNsYXNzIFByb2dyYW1Ob2RlOwotICAgIGNsYXNzIFVTdHJpbmc7CitjbGFz
cyBFeGVjU3RhdGU7CitjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOworY2xhc3MgRnVuY3Rpb25QYXJh
bWV0ZXJzOworY2xhc3MgSWRlbnRpZmllcjsKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFBh
cnNlcjsKK2NsYXNzIFByb2dyYW1Ob2RlOworY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFVTdHJp
bmc7CisKKyNkZWZpbmUgZmFpbCgpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvck1lc3Nh
Z2UoKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxXaXRoVG9rZW4odG9rKSBk
byB7IGlmICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNzYWdlKHRvayk7IHJldHVybiAwOyB9IHdo
aWxlICgwKQorI2RlZmluZSBmYWlsV2l0aE1lc3NhZ2UobXNnKSBkbyB7IGlmICghbV9lcnJvcikg
dXBkYXRlRXJyb3JNZXNzYWdlKG1zZyk7IHJldHVybiAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBm
YWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpIGRvIHsgaWYgKCFtX2Vy
cm9yKSB1cGRhdGVFcnJvcldpdGhOYW1lQW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIGFmdGVyKTsg
cmV0dXJuIDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZkZhbHNlKGNvbmQpIGRvIHsgaWYg
KCEoY29uZCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElmRmFsc2VXaXRoTWVz
c2FnZShjb25kLCBtc2cpIGRvIHsgaWYgKCEoY29uZCkpIGZhaWxXaXRoTWVzc2FnZShtc2cpOyB9
IHdoaWxlICgwKQorI2RlZmluZSBmYWlsSWZGYWxzZVdpdGhOYW1lQW5kTWVzc2FnZShjb25kLCBi
ZWZvcmUsIG5hbWUsIG1zZykgZG8geyBpZiAoIShjb25kKSkgZmFpbFdpdGhOYW1lQW5kTWVzc2Fn
ZShiZWZvcmUsIG5hbWUsIG1zZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRydWUoY29u
ZCkgZG8geyBpZiAoKGNvbmQpKSBmYWlsKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRy
dWVXaXRoTWVzc2FnZShjb25kLCBtc2cpIGRvIHsgaWYgKChjb25kKSkgZmFpbFdpdGhNZXNzYWdl
KG1zZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRydWVXaXRoTmFtZUFuZE1lc3NhZ2Uo
Y29uZCwgYmVmb3JlLCBuYW1lLCBtc2cpIGRvIHsgaWYgKChjb25kKSkgZmFpbFdpdGhOYW1lQW5k
TWVzc2FnZShiZWZvcmUsIG5hbWUsIG1zZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRy
dWVJZlN0cmljdChjb25kKSBkbyB7IGlmICgoY29uZCkgJiYgc3RyaWN0TW9kZSgpKSBmYWlsKCk7
IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRydWVJZlN0cmljdFdpdGhNZXNzYWdlKGNvbmQs
IG1zZykgZG8geyBpZiAoKGNvbmQpICYmIHN0cmljdE1vZGUoKSkgZmFpbFdpdGhNZXNzYWdlKG1z
Zyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5kTWVz
c2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIGFmdGVyKSBkbyB7IGlmICgoY29uZCkgJiYgc3RyaWN0
TW9kZSgpKSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpOyB9IHdo
aWxlICgwKQorI2RlZmluZSBmYWlsSWZGYWxzZUlmU3RyaWN0KGNvbmQpIGRvIHsgaWYgKCghKGNv
bmQpKSAmJiBzdHJpY3RNb2RlKCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmFpbElm
RmFsc2VJZlN0cmljdFdpdGhNZXNzYWdlKGNvbmQsIG1zZykgZG8geyBpZiAoKCEoY29uZCkpICYm
IHN0cmljdE1vZGUoKSkgZmFpbFdpdGhNZXNzYWdlKG1zZyk7IH0gd2hpbGUgKDApCisjZGVmaW5l
IGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoY29uZCwgYmVmb3JlLCBuYW1l
LCBhZnRlcikgZG8geyBpZiAoKCEoY29uZCkpICYmIHN0cmljdE1vZGUoKSkgZmFpbFdpdGhOYW1l
QW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIGFmdGVyKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29u
c3VtZU9yRmFpbCh0b2tlblR5cGUpIGRvIHsgaWYgKCFjb25zdW1lKHRva2VuVHlwZSkpIGZhaWxX
aXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29uc3VtZU9yRmFpbFdp
dGhGbGFncyh0b2tlblR5cGUsIGZsYWdzKSBkbyB7IGlmICghY29uc3VtZSh0b2tlblR5cGUsIGZs
YWdzKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXRj
aE9yRmFpbCh0b2tlblR5cGUpIGRvIHsgaWYgKCFtYXRjaCh0b2tlblR5cGUpKSBmYWlsV2l0aFRv
a2VuKHRva2VuVHlwZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZhaWxJZlN0YWNrT3ZlcmZsb3co
KSBkbyB7IGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY2FuUmVjdXJzZSgpLCAiQ29kZSBuZXN0ZWQg
dG9vIGRlZXBseS4iKTsgfSB3aGlsZSAoMCkKKworICAgIC8vIE1hY3JvcyB0byBtYWtlIHRoZSBt
b3JlIGNvbW1vbiBUcmVlQnVpbGRlciB0eXBlcyBhIGxpdHRsZSBsZXNzIHZlcmJvc2UKKyNkZWZp
bmUgVHJlZVN0YXRlbWVudCB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6U3RhdGVtZW50CisjZGVmaW5l
IFRyZWVFeHByZXNzaW9uIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpFeHByZXNzaW9uCisjZGVmaW5l
IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGb3JtYWxQYXJh
bWV0ZXJMaXN0CisjZGVmaW5lIFRyZWVTb3VyY2VFbGVtZW50cyB0eXBlbmFtZSBUcmVlQnVpbGRl
cjo6U291cmNlRWxlbWVudHMKKyNkZWZpbmUgVHJlZUNsYXVzZSB0eXBlbmFtZSBUcmVlQnVpbGRl
cjo6Q2xhdXNlCisjZGVmaW5lIFRyZWVDbGF1c2VMaXN0IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpD
bGF1c2VMaXN0CisjZGVmaW5lIFRyZWVDb25zdERlY2xMaXN0IHR5cGVuYW1lIFRyZWVCdWlsZGVy
OjpDb25zdERlY2xMaXN0CisjZGVmaW5lIFRyZWVBcmd1bWVudHMgdHlwZW5hbWUgVHJlZUJ1aWxk
ZXI6OkFyZ3VtZW50cworI2RlZmluZSBUcmVlQXJndW1lbnRzTGlzdCB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6QXJndW1lbnRzTGlzdAorI2RlZmluZSBUcmVlRnVuY3Rpb25Cb2R5IHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHkKKyNkZWZpbmUgVHJlZVByb3BlcnR5IHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpQcm9wZXJ0eQorI2RlZmluZSBUcmVlUHJvcGVydHlMaXN0IHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpQcm9wZXJ0eUxpc3QKKworQ09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9r
ZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2VkVG9rZW5zKTsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBib29sIGlzRXZhbE5vZGUoKSB7IHJldHVybiBmYWxzZTsgfQordGVtcGxhdGUg
PD4gaW5saW5lIGJvb2wgaXNFdmFsTm9kZTxFdmFsTm9kZT4oKSB7IHJldHVybiB0cnVlOyB9CisK
K3N0cnVjdCBEZXB0aE1hbmFnZXIgeworICAgIERlcHRoTWFuYWdlcihpbnQqIGRlcHRoKQorICAg
ICAgICA6IG1fb3JpZ2luYWxEZXB0aCgqZGVwdGgpCisgICAgICAgICwgbV9kZXB0aChkZXB0aCkK
KyAgICB7CisgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGlz
RXZhbE5vZGUoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHRlbXBsYXRlIDw+IGlubGluZSBib29s
IGlzRXZhbE5vZGU8RXZhbE5vZGU+KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdHJ1Y3QgUGFyc2VyQXJlbmFEYXRhIDogUGFyc2VyQXJlbmFEZWxldGFibGUg
eyBUIGRhdGE7IH07Ci0KLSAgICBjbGFzcyBQYXJzZXIgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQYXJzZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFBhcnNlcigpIHsgfQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4K
LSAgICAgICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRGVidWdnZXIqLCBFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyosIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3Ru
ZXNzLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7Ci0KLSAgICAgICAgdm9pZCBkaWRGaW5pc2hQYXJz
aW5nKFNvdXJjZUVsZW1lbnRzKiwgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpW
YXJTdGFjaz4qLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdExpbmUsIGludCBudW1D
b25zdGFudHMsIElkZW50aWZpZXJTZXQmKTsKKyAgICB+RGVwdGhNYW5hZ2VyKCkKKyAgICB7Cisg
ICAgICAgICptX2RlcHRoID0gbV9vcmlnaW5hbERlcHRoOworICAgIH0KIAotICAgICAgICBQYXJz
ZXJBcmVuYSYgYXJlbmEoKSB7IHJldHVybiBtX2FyZW5hOyB9Citwcml2YXRlOgorICAgIGludCBt
X29yaWdpbmFsRGVwdGg7CisgICAgaW50KiBtX2RlcHRoOworfTsKKworc3RydWN0IFNjb3BlTGFi
ZWxJbmZvIHsKKyAgICBTY29wZUxhYmVsSW5mbyhTdHJpbmdJbXBsKiBpZGVudCwgYm9vbCBpc0xv
b3ApCisgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICAgICAgLCBtX2lzTG9vcChpc0xvb3Ap
CisgICAgeworICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcGFyc2UoSlNHbG9i
YWxEYXRhKiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5l
c3MsIEpTUGFyc2VyTW9kZSBtb2RlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZyk7Cisg
ICAgU3RyaW5nSW1wbCogbV9pZGVudDsKKyAgICBib29sIG1faXNMb29wOworfTsKKworc3RydWN0
IFNjb3BlIHsKKyAgICBTY29wZShjb25zdCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wg
aXNGdW5jdGlvbiwgYm9vbCBzdHJpY3RNb2RlKQorICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9i
YWxEYXRhKQorICAgICAgICAsIG1fc2hhZG93c0FyZ3VtZW50cyhmYWxzZSkKKyAgICAgICAgLCBt
X3VzZXNFdmFsKGZhbHNlKQorICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihmYWxzZSkK
KyAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCisgICAgICAgICwgbV9zdHJpY3RNb2Rl
KHN0cmljdE1vZGUpCisgICAgICAgICwgbV9pc0Z1bmN0aW9uKGlzRnVuY3Rpb24pCisgICAgICAg
ICwgbV9pc0Z1bmN0aW9uQm91bmRhcnkoZmFsc2UpCisgICAgICAgICwgbV9pc1ZhbGlkU3RyaWN0
TW9kZSh0cnVlKQorICAgICAgICAsIG1fbG9vcERlcHRoKDApCisgICAgICAgICwgbV9zd2l0Y2hE
ZXB0aCgwKQorICAgIHsKKyAgICB9CiAKLSAgICAgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgdHlw
ZSBvZiBlcnJvciB0byByZXBvcnQuCi0gICAgICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKFNj
b3BlTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlO
b2RlKEZ1bmN0aW9uQm9keU5vZGUqKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgUGFyc2Vy
QXJlbmEgbV9hcmVuYTsKLSAgICAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7Ci0gICAg
ICAgIFNvdXJjZUVsZW1lbnRzKiBtX3NvdXJjZUVsZW1lbnRzOwotICAgICAgICBQYXJzZXJBcmVu
YURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogbV92YXJEZWNsYXJhdGlvbnM7Ci0g
ICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4q
IG1fZnVuY0RlY2xhcmF0aW9uczsKLSAgICAgICAgSWRlbnRpZmllclNldCBtX2NhcHR1cmVkVmFy
aWFibGVzOwotICAgICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKLSAgICAgICAgaW50IG1f
bGFzdExpbmU7Ci0gICAgICAgIGludCBtX251bUNvbnN0YW50czsKLSAgICB9OworICAgIFNjb3Bl
KGNvbnN0IFNjb3BlJiByaHMpCisgICAgICAgIDogbV9nbG9iYWxEYXRhKHJocy5tX2dsb2JhbERh
dGEpCisgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKHJocy5tX3NoYWRvd3NBcmd1bWVudHMp
CisgICAgICAgICwgbV91c2VzRXZhbChyaHMubV91c2VzRXZhbCkKKyAgICAgICAgLCBtX25lZWRz
RnVsbEFjdGl2YXRpb24ocmhzLm1fbmVlZHNGdWxsQWN0aXZhdGlvbikKKyAgICAgICAgLCBtX2Fs
bG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQorICAgICAgICAsIG1fc3RyaWN0TW9k
ZShyaHMubV9zdHJpY3RNb2RlKQorICAgICAgICAsIG1faXNGdW5jdGlvbihyaHMubV9pc0Z1bmN0
aW9uKQorICAgICAgICAsIG1faXNGdW5jdGlvbkJvdW5kYXJ5KHJocy5tX2lzRnVuY3Rpb25Cb3Vu
ZGFyeSkKKyAgICAgICAgLCBtX2lzVmFsaWRTdHJpY3RNb2RlKHJocy5tX2lzVmFsaWRTdHJpY3RN
b2RlKQorICAgICAgICAsIG1fbG9vcERlcHRoKHJocy5tX2xvb3BEZXB0aCkKKyAgICAgICAgLCBt
X3N3aXRjaERlcHRoKHJocy5tX3N3aXRjaERlcHRoKQorICAgIHsKKyAgICAgICAgaWYgKHJocy5t
X2xhYmVscykgeworICAgICAgICAgICAgbV9sYWJlbHMgPSBhZG9wdFB0cihuZXcgTGFiZWxTdGFj
ayk7CisKKyAgICAgICAgICAgIHR5cGVkZWYgTGFiZWxTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3I7CisgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSByaHMubV9sYWJlbHMtPmVuZCgpOwor
ICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHJocy5tX2xhYmVscy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIG1fbGFiZWxzLT5hcHBlbmQoU2NvcGVMYWJl
bEluZm8oaXQtPm1faWRlbnQsIGl0LT5tX2lzTG9vcCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgbV9zd2l0Y2hEZXB0aCsrOyB9CisgICAgdm9pZCBlbmRT
d2l0Y2goKSB7IG1fc3dpdGNoRGVwdGgtLTsgfQorICAgIHZvaWQgc3RhcnRMb29wKCkgeyBtX2xv
b3BEZXB0aCsrOyB9CisgICAgdm9pZCBlbmRMb29wKCkgeyBBU1NFUlQobV9sb29wRGVwdGgpOyBt
X2xvb3BEZXB0aC0tOyB9CisgICAgYm9vbCBpbkxvb3AoKSB7IHJldHVybiAhIW1fbG9vcERlcHRo
OyB9CisgICAgYm9vbCBicmVha0lzVmFsaWQoKSB7IHJldHVybiBtX2xvb3BEZXB0aCB8fCBtX3N3
aXRjaERlcHRoOyB9CisgICAgYm9vbCBjb250aW51ZUlzVmFsaWQoKSB7IHJldHVybiBtX2xvb3BE
ZXB0aDsgfQorCisgICAgdm9pZCBwdXNoTGFiZWwoY29uc3QgSWRlbnRpZmllciogbGFiZWwsIGJv
b2wgaXNMb29wKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xhYmVscykKKyAgICAgICAgICAgIG1f
bGFiZWxzID0gYWRvcHRQdHIobmV3IExhYmVsU3RhY2spOworICAgICAgICBtX2xhYmVscy0+YXBw
ZW5kKFNjb3BlTGFiZWxJbmZvKGxhYmVsLT5pbXBsKCksIGlzTG9vcCkpOworICAgIH0KKworICAg
IHZvaWQgcG9wTGFiZWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbGFiZWxzKTsKKyAgICAg
ICAgQVNTRVJUKG1fbGFiZWxzLT5zaXplKCkpOworICAgICAgICBtX2xhYmVscy0+cmVtb3ZlTGFz
dCgpOworICAgIH0KKworICAgIFNjb3BlTGFiZWxJbmZvKiBnZXRMYWJlbChjb25zdCBJZGVudGlm
aWVyKiBsYWJlbCkKKyAgICB7CisgICAgICAgIGlmICghbV9sYWJlbHMpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1fbGFiZWxzLT5zaXplKCk7IGkgPiAwOyBp
LS0pIHsKKyAgICAgICAgICAgIGlmIChtX2xhYmVscy0+YXQoaSAtIDEpLm1faWRlbnQgPT0gbGFi
ZWwtPmltcGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJm1fbGFiZWxzLT5hdChpIC0gMSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBzZXRJc0Z1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIG1faXNGdW5jdGlvbiA9IHRydWU7CisgICAgICAgIG1f
aXNGdW5jdGlvbkJvdW5kYXJ5ID0gdHJ1ZTsKKyAgICB9CisgICAgYm9vbCBpc0Z1bmN0aW9uKCkg
eyByZXR1cm4gbV9pc0Z1bmN0aW9uOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uQm91bmRhcnkoKSB7
IHJldHVybiBtX2lzRnVuY3Rpb25Cb3VuZGFyeTsgfQorCisgICAgYm9vbCBkZWNsYXJlVmFyaWFi
bGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCisgICAgeworICAgICAgICBib29sIGlzVmFsaWRT
dHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAm
JiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyAhPSAqaWRlbnQ7CisgICAg
ICAgIG1faXNWYWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRT
dHJpY3RNb2RlOworICAgICAgICBtX2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmlu
ZygpLmltcGwoKSk7CisgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0TW9kZTsKKyAgICB9CisK
KyAgICB2b2lkIGRlY2xhcmVXcml0ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3N0cmljdE1vZGUpOworICAgICAgICBtX3dyaXR0ZW5WYXJpYWJsZXMu
YWRkKGlkZW50LT5pbXBsKCkpOworICAgIH0KKworICAgIHZvaWQgcHJldmVudE5ld0RlY2xzKCkg
eyBtX2FsbG93c05ld0RlY2xzID0gZmFsc2U7IH0KKyAgICBib29sIGFsbG93c05ld0RlY2xzKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd3NOZXdEZWNsczsgfQorCisgICAgYm9vbCBkZWNsYXJlUGFy
YW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQorICAgIHsKKyAgICAgICAgYm9vbCBpc0Fy
Z3VtZW50cyA9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVu
dDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1fZGVjbGFyZWRWYXJpYWJsZXMu
YWRkKGlkZW50LT51c3RyaW5nKCkuaW1wbCgpKS5zZWNvbmQgJiYgbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHM7CisgICAgICAgIG1faXNW
YWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRTdHJpY3RNb2Rl
OworICAgICAgICBpZiAoaXNBcmd1bWVudHMpCisgICAgICAgICAgICBtX3NoYWRvd3NBcmd1bWVu
dHMgPSB0cnVlOworICAgICAgICByZXR1cm4gaXNWYWxpZFN0cmljdE1vZGU7CisgICAgfQorCisg
ICAgdm9pZCB1c2VWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgYm9vbCBpc0V2YWwp
CisgICAgeworICAgICAgICBtX3VzZXNFdmFsIHw9IGlzRXZhbDsKKyAgICAgICAgbV91c2VkVmFy
aWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2YXRpb24gPSB0cnVlOyB9
CisKKyAgICBib29sIGNvbGxlY3RGcmVlVmFyaWFibGVzKFNjb3BlKiBuZXN0ZWRTY29wZSwgYm9v
bCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIGlmIChuZXN0ZWRT
Y29wZS0+bV91c2VzRXZhbCkKKyAgICAgICAgICAgIG1fdXNlc0V2YWwgPSB0cnVlOworICAgICAg
ICBJZGVudGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBuZXN0ZWRTY29wZS0+bV91c2VkVmFyaWFi
bGVzLmVuZCgpOworICAgICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9IG5l
c3RlZFNjb3BlLT5tX3VzZWRWYXJpYWJsZXMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsK
KyAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV9kZWNsYXJlZFZhcmlhYmxlcy5jb250YWlu
cygqcHRyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fdXNlZFZh
cmlhYmxlcy5hZGQoKnB0cik7CisgICAgICAgICAgICBpZiAoc2hvdWxkVHJhY2tDbG9zZWRWYXJp
YWJsZXMpCisgICAgICAgICAgICAgICAgbV9jbG9zZWRWYXJpYWJsZXMuYWRkKCpwdHIpOworICAg
ICAgICB9CisgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV93cml0dGVuVmFyaWFibGVzLnNpemUo
KSkgeworICAgICAgICAgICAgSWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0gbmVzdGVkU2Nv
cGUtPm1fd3JpdHRlblZhcmlhYmxlcy5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoSWRlbnRpZmll
clNldDo6aXRlcmF0b3IgcHRyID0gbmVzdGVkU2NvcGUtPm1fd3JpdHRlblZhcmlhYmxlcy5iZWdp
bigpOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29w
ZS0+bV9kZWNsYXJlZFZhcmlhYmxlcy5jb250YWlucygqcHRyKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZCgqcHRy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZvaWQgZ2V0VW5jYXB0dXJlZFdyaXR0ZW5WYXJpYWJsZXMoSWRlbnRpZmllclNl
dCYgd3JpdHRlblZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIElkZW50aWZpZXJTZXQ6Oml0ZXJh
dG9yIGVuZCA9IG1fd3JpdHRlblZhcmlhYmxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChJZGVudGlm
aWVyU2V0OjppdGVyYXRvciBwdHIgPSBtX3dyaXR0ZW5WYXJpYWJsZXMuYmVnaW4oKTsgcHRyICE9
IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgIGlmICghbV9kZWNsYXJlZFZhcmlhYmxlcy5jb250
YWlucygqcHRyKSkKKyAgICAgICAgICAgICAgICB3cml0dGVuVmFyaWFibGVzLmFkZCgqcHRyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZ2V0Q2FwdHVyZWRWYXJpYWJsZXMoSWRlbnRp
ZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMpCisgICAgeworICAgICAgICBpZiAobV9uZWVkc0Z1
bGxBY3RpdmF0aW9uIHx8IG1fdXNlc0V2YWwpIHsKKyAgICAgICAgICAgIGNhcHR1cmVkVmFyaWFi
bGVzLnN3YXAobV9kZWNsYXJlZFZhcmlhYmxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBwdHIgPSBtX2Nsb3Nl
ZFZhcmlhYmxlcy5iZWdpbigpOyBwdHIgIT0gbV9jbG9zZWRWYXJpYWJsZXMuZW5kKCk7ICsrcHRy
KSB7CisgICAgICAgICAgICBpZiAoIW1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKnB0cikp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxl
cy5hZGQoKnB0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzZXRTdHJpY3RNb2RlKCkg
eyBtX3N0cmljdE1vZGUgPSB0cnVlOyB9CisgICAgYm9vbCBzdHJpY3RNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpY3RNb2RlOyB9CisgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KKyAgICBib29sIHNoYWRvd3NBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NBcmd1bWVudHM7IH0KKworICAgIHZvaWQgY29w
eUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IoY29uc3QgSWRlbnRpZmllclNldCYgY2FwdHVyZWRW
YXJpYWJsZXMsIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiYgdmVjdG9yKQorICAgIHsKKyAg
ICAgICAgSWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0gY2FwdHVyZWRWYXJpYWJsZXMuZW5k
KCk7CisgICAgICAgIGZvciAoSWRlbnRpZmllclNldDo6aXRlcmF0b3IgaXQgPSBjYXB0dXJlZFZh
cmlhYmxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChtX2Rl
Y2xhcmVkVmFyaWFibGVzLmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKCppdCk7CisgICAgICAgIH0KKyAgICAgICAgdmVj
dG9yLnNocmlua1RvRml0KCk7CisgICAgfQorCisgICAgdm9pZCBzYXZlRnVuY3Rpb25JbmZvKFNv
dXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNG
dW5jdGlvbik7CisgICAgICAgIGluZm8tPnVzZXNFdmFsID0gbV91c2VzRXZhbDsKKyAgICAgICAg
aW5mby0+c3RyaWN0TW9kZSA9IG1fc3RyaWN0TW9kZTsKKyAgICAgICAgaW5mby0+bmVlZHNGdWxs
QWN0aXZhdGlvbiA9IG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAgICAgY29weUNhcHR1cmVk
VmFyaWFibGVzVG9WZWN0b3IobV93cml0dGVuVmFyaWFibGVzLCBpbmZvLT53cml0dGVuVmFyaWFi
bGVzKTsKKyAgICAgICAgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IobV91c2VkVmFyaWFi
bGVzLCBpbmZvLT51c2VkVmFyaWFibGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVGdW5j
dGlvbkluZm8oY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGluZm8pCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsKKyAgICAgICAgbV91c2VzRXZhbCA9IGluZm8tPnVz
ZXNFdmFsOworICAgICAgICBtX3N0cmljdE1vZGUgPSBpbmZvLT5zdHJpY3RNb2RlOworICAgICAg
ICBtX25lZWRzRnVsbEFjdGl2YXRpb24gPSBpbmZvLT5uZWVkc0Z1bGxBY3RpdmF0aW9uOworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxlcy5zaXplKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBtX3VzZWRW
YXJpYWJsZXMuYWRkKGluZm8tPnVzZWRWYXJpYWJsZXNbaV0pOworICAgICAgICBzaXplID0gaW5m
by0+d3JpdHRlblZhcmlhYmxlcy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBtX3dyaXR0ZW5WYXJpYWJsZXMuYWRkKGluZm8t
PndyaXR0ZW5WYXJpYWJsZXNbaV0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7
CisgICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKKyAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlv
biA6IDE7CisgICAgYm9vbCBtX2FsbG93c05ld0RlY2xzIDogMTsKKyAgICBib29sIG1fc3RyaWN0
TW9kZSA6IDE7CisgICAgYm9vbCBtX2lzRnVuY3Rpb24gOiAxOworICAgIGJvb2wgbV9pc0Z1bmN0
aW9uQm91bmRhcnkgOiAxOworICAgIGJvb2wgbV9pc1ZhbGlkU3RyaWN0TW9kZSA6IDE7CisgICAg
aW50IG1fbG9vcERlcHRoOworICAgIGludCBtX3N3aXRjaERlcHRoOworCisgICAgdHlwZWRlZiBW
ZWN0b3I8U2NvcGVMYWJlbEluZm8sIDI+IExhYmVsU3RhY2s7CisgICAgT3duUHRyPExhYmVsU3Rh
Y2s+IG1fbGFiZWxzOworICAgIElkZW50aWZpZXJTZXQgbV9kZWNsYXJlZFZhcmlhYmxlczsKKyAg
ICBJZGVudGlmaWVyU2V0IG1fdXNlZFZhcmlhYmxlczsKKyAgICBJZGVudGlmaWVyU2V0IG1fY2xv
c2VkVmFyaWFibGVzOworICAgIElkZW50aWZpZXJTZXQgbV93cml0dGVuVmFyaWFibGVzOworfTsK
KwordHlwZWRlZiBWZWN0b3I8U2NvcGUsIDEwPiBTY29wZVN0YWNrOworCitzdHJ1Y3QgU2NvcGVS
ZWYgeworICAgIFNjb3BlUmVmKFNjb3BlU3RhY2sqIHNjb3BlU3RhY2ssIHVuc2lnbmVkIGluZGV4
KQorICAgICAgICA6IG1fc2NvcGVTdGFjayhzY29wZVN0YWNrKQorICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgeworICAgIH0KKyAgICBTY29wZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuICZt
X3Njb3BlU3RhY2stPmF0KG1faW5kZXgpOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBib29sIGhhc0NvbnRhaW5pbmdTY29wZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9pbmRleCAmJiAhbV9zY29wZVN0YWNrLT5hdChtX2luZGV4KS5p
c0Z1bmN0aW9uQm91bmRhcnkoKTsKKyAgICB9CisKKyAgICBTY29wZVJlZiBjb250YWluaW5nU2Nv
cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NvbnRhaW5pbmdTY29wZSgpKTsKKyAgICAg
ICAgcmV0dXJuIFNjb3BlUmVmKG1fc2NvcGVTdGFjaywgbV9pbmRleCAtIDEpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBTY29wZVN0YWNrKiBtX3Njb3BlU3RhY2s7CisgICAgdW5zaWduZWQgbV9p
bmRleDsKK307CisKKworY2xhc3MgUGFyc2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
YXJzZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgUGFy
c2VyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBKU1BhcnNlclN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSk7CisgICAgflBhcnNlcigpOwogCiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci0gICAgUGFzc1JlZlB0cjxQYXJzZWROb2Rl
PiBQYXJzZXI6OnBhcnNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEZWJ1
Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZGVidWdnZXJFeGVjU3RhdGUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBKU1BhcnNlclN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNPYmplY3QqKiBleGNlcHRpb24pCisgICAgUGFzc1JlZlB0
cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RGVidWdnZXIqLCBFeGVjU3RhdGUqLCBKU09iamVjdCoqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgQWxsb3dJbk92ZXJyaWRlIHsKKyAgICAgICAgQWxsb3dJbk92ZXJyaWRlKFBhcnNlciogcGFy
c2VyKQorICAgICAgICAgICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgICAgICAgICAsIG1fb2xk
QWxsb3dzSW4ocGFyc2VyLT5tX2FsbG93c0luKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJz
ZXItPm1fYWxsb3dzSW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIH5BbGxvd0luT3ZlcnJp
ZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3BhcnNlci0+bV9hbGxvd3NJbiA9IG1fb2xk
QWxsb3dzSW47CisgICAgICAgIH0KKyAgICAgICAgUGFyc2VyKiBtX3BhcnNlcjsKKyAgICAgICAg
Ym9vbCBtX29sZEFsbG93c0luOworICAgIH07CisKKyAgICBzdHJ1Y3QgQXV0b1BvcFNjb3BlUmVm
IDogcHVibGljIFNjb3BlUmVmIHsKKyAgICAgICAgQXV0b1BvcFNjb3BlUmVmKFBhcnNlciogcGFy
c2VyLCBTY29wZVJlZiBzY29wZSkKKyAgICAgICAgOiBTY29wZVJlZihzY29wZSkKKyAgICAgICAg
LCBtX3BhcnNlcihwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgfkF1dG9Qb3BTY29wZVJlZigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3BhcnNl
cikKKyAgICAgICAgICAgICAgICBtX3BhcnNlci0+cG9wU2NvcGUoKnRoaXMsIGZhbHNlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRQb3BwZWQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3BhcnNlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgUGFyc2VyKiBtX3BhcnNlcjsKKyAgICB9OworCisgICAgU2NvcGVSZWYgY3Vy
cmVudFNjb3BlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTY29wZVJlZigmbV9zY29wZVN0YWNr
LCBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7CisgICAgfQorICAgIAorICAgIFNjb3BlUmVmIHB1
c2hTY29wZSgpCisgICAgeworICAgICAgICBib29sIGlzRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAg
ICAgYm9vbCBpc1N0cmljdCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fc2NvcGVTdGFjay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGlzU3RyaWN0ID0gbV9zY29wZVN0YWNrLmxhc3QoKS5zdHJp
Y3RNb2RlKCk7CisgICAgICAgICAgICBpc0Z1bmN0aW9uID0gbV9zY29wZVN0YWNrLmxhc3QoKS5p
c0Z1bmN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29w
ZShtX2dsb2JhbERhdGEsIGlzRnVuY3Rpb24sIGlzU3RyaWN0KSk7CisgICAgICAgIHJldHVybiBj
dXJyZW50U2NvcGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwb3BTY29wZUludGVybmFsKFNj
b3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGV4Y2Vw
dGlvbiAmJiAhKmV4Y2VwdGlvbik7Ci0gICAgICAgIGludCBlcnJMaW5lOwotICAgICAgICBVU3Ry
aW5nIGVyck1zZzsKLQotICAgICAgICBtX3NvdXJjZSA9ICZzb3VyY2U7Ci0gICAgICAgIGlmIChQ
YXJzZWROb2RlOjpzY29wZUlzRnVuY3Rpb24pCi0gICAgICAgICAgICBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkubGV4ZXItPnNldElzUmVwYXJzaW5nKCk7Ci0gICAgICAgIHBhcnNl
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHBhcmFtZXRlcnMsIHN0cmljdG5l
c3MsIFBhcnNlZE5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpT
UGFyc2VQcm9ncmFtQ29kZSwgJmVyckxpbmUsICZlcnJNc2cpOwotCi0gICAgICAgIFJlZlB0cjxQ
YXJzZWROb2RlPiByZXN1bHQ7Ci0gICAgICAgIGlmIChtX3NvdXJjZUVsZW1lbnRzKSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBQYXJzZWROb2RlOjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSwKLSAgICAgICAgICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLAotICAgICAg
ICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8gJm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDog
MCwKLSAgICAgICAgICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRp
b25zLT5kYXRhIDogMCwKLSAgICAgICAgICAgICAgICBtX2NhcHR1cmVkVmFyaWFibGVzLAotICAg
ICAgICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAotICAgICAg
ICAgICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1f
c291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGV4
aWNhbEdsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIG5ldmVyIHNlZSBhIHN5
bnRheCBlcnJvciB3aGVuIHJlcGFyc2luZyBhIGZ1bmN0aW9uLCBzaW5jZSB3ZSBzaG91bGQgaGF2
ZQotICAgICAgICAgICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29u
dGFpbmluZyBwcm9ncmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUKLSAgICAgICAgICAgIC8v
IHBhcnNpbmcgYSBmdW5jdGlvbiBib2R5IG5vZGUsIHdlIGFzc3VtZSB0aGF0IHdoYXQgYWN0dWFs
bHkgaGFwcGVuZWQgaGVyZSBpcyB0aGF0Ci0gICAgICAgICAgICAvLyB3ZSByYW4gb3V0IG9mIHN0
YWNrIHdoaWxlIHBhcnNpbmcuIElmIHdlIHNlZSBhbiBlcnJvciB3aGlsZSBwYXJzaW5nIGV2YWwg
b3IgcHJvZ3JhbQotICAgICAgICAgICAgLy8gY29kZSB3ZSBhc3N1bWUgdGhhdCBpdCB3YXMgYSBz
eW50YXggZXJyb3Igc2luY2UgcnVubmluZyBvdXQgb2Ygc3RhY2sgaXMgbXVjaCBsZXNzCi0gICAg
ICAgICAgICAvLyBsaWtlbHksIGFuZCB3ZSBhcmUgY3VycmVudGx5IHVuYWJsZSB0byBkaXN0aW5n
dWlzaCBiZXR3ZWVuIHRoZSB0d28gY2FzZXMuCi0gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbkJv
ZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNlZE5vZGUqPigwKSkpCi0gICAgICAgICAgICAgICAgKmV4
Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSkKLSAgICAgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgZXJyTXNnKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuaW5kZXgoKSA9
PSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7CisgICAgICAgIEFTU0VSVChtX3Njb3BlU3RhY2su
c2l6ZSgpID4gMSk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9zY29wZVN0YWNrW21fc2NvcGVT
dGFjay5zaXplKCkgLSAyXS5jb2xsZWN0RnJlZVZhcmlhYmxlcygmbV9zY29wZVN0YWNrLmxhc3Qo
KSwgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpOworICAgICAgICBtX3Njb3BlU3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IHBvcFNjb3BlKFNjb3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxl
cykKKyAgICB7CisgICAgICAgIHJldHVybiBwb3BTY29wZUludGVybmFsKHNjb3BlLCBzaG91bGRU
cmFja0Nsb3NlZFZhcmlhYmxlcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgcG9wU2NvcGUoQXV0
b1BvcFNjb3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKKyAg
ICB7CisgICAgICAgIHNjb3BlLnNldFBvcHBlZCgpOworICAgICAgICByZXR1cm4gcG9wU2NvcGVJ
bnRlcm5hbChzY29wZSwgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpOworICAgIH0KKyAgICAK
KyAgICBib29sIGRlY2xhcmVWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKKyAgICAgICAg
QVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgd2hpbGUgKCFtX3Njb3Bl
U3RhY2tbaV0uYWxsb3dzTmV3RGVjbHMoKSkgeworICAgICAgICAgICAgaS0tOworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9zY29wZVN0YWNrW2ldLmRlY2xhcmVWYXJpYWJsZShpZGVudCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZGVjbGFyZVdyaXRlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQorICAgIHsK
KyAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpCisgICAgICAgICAgICBtX3Nj
b3BlU3RhY2subGFzdCgpLmRlY2xhcmVXcml0ZShpZGVudCk7CisgICAgfQorICAgIAorICAgIFNj
b3BlU3RhY2sgbV9zY29wZVN0YWNrOworICAgIAorICAgIGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtKiBmaW5kQ2FjaGVkRnVuY3Rpb25JbmZvKGludCBvcGVuQnJhY2VQb3MpIAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVuY3Rpb25DYWNoZS0+Z2V0KG9w
ZW5CcmFjZVBvcykgOiAwOworICAgIH0KKworICAgIFBhcnNlcigpOworICAgIFVTdHJpbmcgcGFy
c2VJbm5lcigpOworCisgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5j
dGlvblN0YWNrPiosIENvZGVGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
LCBpbnQsIElkZW50aWZpZXJTZXQmKTsKKworICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUg
b2YgZXJyb3IgdG8gcmVwb3J0LgorICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKFNjb3BlTm9k
ZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uQm9keU5vZGUoRnVuY3Rp
b25Cb2R5Tm9kZSopIHsgcmV0dXJuIHRydWU7IH0KKworCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IG5leHQodW5zaWduZWQgbGV4VHlwZSA9IDApCisgICAgeworICAgICAgICBtX2xhc3RMaW5lID0g
bV90b2tlbi5tX2luZm8ubGluZTsKKyAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBtX3Rva2VuLm1f
aW5mby5lbmRPZmZzZXQ7CisgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKG1fbGFz
dExpbmUpOworICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbi5t
X2RhdGEsICZtX3Rva2VuLm1faW5mbywgbGV4VHlwZSwgc3RyaWN0TW9kZSgpKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dEV4cGVjdElkZW50aWZpZXIodW5zaWduZWQgbGV4
VHlwZSA9IDApCisgICAgeworICAgICAgICBtX2xhc3RMaW5lID0gbV90b2tlbi5tX2luZm8ubGlu
ZTsKKyAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQ7Cisg
ICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKG1fbGFzdExpbmUpOworICAgICAgICBt
X3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4ubV9k
YXRhLCAmbV90b2tlbi5tX2luZm8sIGxleFR5cGUsIHN0cmljdE1vZGUoKSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBib29sIG5leHRUb2tlbklzQ29sb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbGV4ZXItPm5leHRUb2tlbklzQ29sb24oKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgY29uc3VtZShKU1Rva2VuVHlwZSBleHBlY3RlZCwgdW5zaWduZWQgZmxhZ3Mg
PSAwKQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX3Rva2VuLm1fdHlwZSA9PSBleHBl
Y3RlZDsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIG5leHQoZmxhZ3MpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFVTdHJp
bmcgZ2V0VG9rZW4oKSB7CisgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciA9
IG1fc291cmNlLT5wcm92aWRlcigpOworICAgICAgICByZXR1cm4gVVN0cmluZyhzb3VyY2VQcm92
aWRlci0+Z2V0UmFuZ2UodG9rZW5TdGFydCgpLCB0b2tlbkVuZCgpKS5pbXBsKCkpOworICAgIH0K
KyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbWF0Y2goSlNUb2tlblR5cGUgZXhwZWN0ZWQp
CisgICAgeworICAgICAgICByZXR1cm4gbV90b2tlbi5tX3R5cGUgPT0gZXhwZWN0ZWQ7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2VuU3RhcnQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdG9rZW4ubV9pbmZvLnN0YXJ0T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIGludCB0b2tlbkxpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG9r
ZW4ubV9pbmZvLmxpbmU7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2Vu
RW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1faW5mby5lbmRPZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIGdldFRva2VuTmFtZShKU1Rva2VuVHlwZSB0b2sp
IAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0b2spIHsKKyAgICAgICAgY2FzZSBOVUxMVE9LRU46
IAorICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKKyAgICAgICAgY2FzZSBUUlVFVE9LRU46Cisg
ICAgICAgICAgICByZXR1cm4gInRydWUiOworICAgICAgICBjYXNlIEZBTFNFVE9LRU46IAorICAg
ICAgICAgICAgcmV0dXJuICJmYWxzZSI7CisgICAgICAgIGNhc2UgQlJFQUs6IAorICAgICAgICAg
ICAgcmV0dXJuICJicmVhayI7CisgICAgICAgIGNhc2UgQ0FTRTogCisgICAgICAgICAgICByZXR1
cm4gImNhc2UiOworICAgICAgICBjYXNlIERFRkFVTFQ6IAorICAgICAgICAgICAgcmV0dXJuICJk
ZWZ1YWx0IjsKKyAgICAgICAgY2FzZSBGT1I6IAorICAgICAgICAgICAgcmV0dXJuICJmb3IiOwor
ICAgICAgICBjYXNlIE5FVzogCisgICAgICAgICAgICByZXR1cm4gIm5ldyI7CisgICAgICAgIGNh
c2UgVkFSOiAKKyAgICAgICAgICAgIHJldHVybiAidmFyIjsKKyAgICAgICAgY2FzZSBDT05TVFRP
S0VOOiAKKyAgICAgICAgICAgIHJldHVybiAiY29uc3QiOworICAgICAgICBjYXNlIENPTlRJTlVF
OiAKKyAgICAgICAgICAgIHJldHVybiAiY29udGludWUiOworICAgICAgICBjYXNlIEZVTkNUSU9O
OiAKKyAgICAgICAgICAgIHJldHVybiAiZnVuY3Rpb24iOworICAgICAgICBjYXNlIElGOiAKKyAg
ICAgICAgICAgIHJldHVybiAiaWYiOworICAgICAgICBjYXNlIFRISVNUT0tFTjogCisgICAgICAg
ICAgICByZXR1cm4gInRoaXMiOworICAgICAgICBjYXNlIERPOiAKKyAgICAgICAgICAgIHJldHVy
biAiZG8iOworICAgICAgICBjYXNlIFdISUxFOiAKKyAgICAgICAgICAgIHJldHVybiAid2hpbGUi
OworICAgICAgICBjYXNlIFNXSVRDSDogCisgICAgICAgICAgICByZXR1cm4gInN3aXRjaCI7Cisg
ICAgICAgIGNhc2UgV0lUSDogCisgICAgICAgICAgICByZXR1cm4gIndpdGgiOworICAgICAgICBj
YXNlIFRIUk9XOiAKKyAgICAgICAgICAgIHJldHVybiAidGhyb3ciOworICAgICAgICBjYXNlIFRS
WTogCisgICAgICAgICAgICByZXR1cm4gInRyeSI7CisgICAgICAgIGNhc2UgQ0FUQ0g6IAorICAg
ICAgICAgICAgcmV0dXJuICJjYXRjaCI7CisgICAgICAgIGNhc2UgRklOQUxMWTogCisgICAgICAg
ICAgICByZXR1cm4gImZpbmFsbHkiOworICAgICAgICBjYXNlIERFQlVHR0VSOiAKKyAgICAgICAg
ICAgIHJldHVybiAiZGVidWdnZXIiOworICAgICAgICBjYXNlIEVMU0U6IAorICAgICAgICAgICAg
cmV0dXJuICJlbHNlIjsKKyAgICAgICAgY2FzZSBPUEVOQlJBQ0U6IAorICAgICAgICAgICAgcmV0
dXJuICJ7IjsKKyAgICAgICAgY2FzZSBDTE9TRUJSQUNFOiAKKyAgICAgICAgICAgIHJldHVybiAi
fSI7CisgICAgICAgIGNhc2UgT1BFTlBBUkVOOiAKKyAgICAgICAgICAgIHJldHVybiAiKCI7Cisg
ICAgICAgIGNhc2UgQ0xPU0VQQVJFTjogCisgICAgICAgICAgICByZXR1cm4gIikiOworICAgICAg
ICBjYXNlIE9QRU5CUkFDS0VUOiAKKyAgICAgICAgICAgIHJldHVybiAiWyI7CisgICAgICAgIGNh
c2UgQ0xPU0VCUkFDS0VUOiAKKyAgICAgICAgICAgIHJldHVybiAiXSI7CisgICAgICAgIGNhc2Ug
Q09NTUE6IAorICAgICAgICAgICAgcmV0dXJuICIsIjsKKyAgICAgICAgY2FzZSBRVUVTVElPTjog
CisgICAgICAgICAgICByZXR1cm4gIj8iOworICAgICAgICBjYXNlIFNFTUlDT0xPTjogCisgICAg
ICAgICAgICByZXR1cm4gIjsiOworICAgICAgICBjYXNlIENPTE9OOiAKKyAgICAgICAgICAgIHJl
dHVybiAiOiI7CisgICAgICAgIGNhc2UgRE9UOiAKKyAgICAgICAgICAgIHJldHVybiAiLiI7Cisg
ICAgICAgIGNhc2UgRVFVQUw6IAorICAgICAgICAgICAgcmV0dXJuICI9IjsKKyAgICAgICAgY2Fz
ZSBQTFVTRVFVQUw6IAorICAgICAgICAgICAgcmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgTUlO
VVNFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBNVUxURVFV
QUw6IAorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgRElWRVFVQUw6IAor
ICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2UgTFNISUZURVFVQUw6IAorICAg
ICAgICAgICAgcmV0dXJuICI8PD0iOworICAgICAgICBjYXNlIFJTSElGVEVRVUFMOiAKKyAgICAg
ICAgICAgIHJldHVybiAiPj49IjsKKyAgICAgICAgY2FzZSBVUlNISUZURVFVQUw6IAorICAgICAg
ICAgICAgcmV0dXJuICI+Pj49IjsKKyAgICAgICAgY2FzZSBBTkRFUVVBTDogCisgICAgICAgICAg
ICByZXR1cm4gIiY9IjsKKyAgICAgICAgY2FzZSBNT0RFUVVBTDogCisgICAgICAgICAgICByZXR1
cm4gIiU9IjsKKyAgICAgICAgY2FzZSBYT1JFUVVBTDogCisgICAgICAgICAgICByZXR1cm4gIl49
IjsKKyAgICAgICAgY2FzZSBPUkVRVUFMOiAKKyAgICAgICAgICAgIHJldHVybiAifD0iOworICAg
ICAgICBjYXNlIEFVVE9QTFVTUExVUzogCisgICAgICAgIGNhc2UgUExVU1BMVVM6IAorICAgICAg
ICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2UgQVVUT01JTlVTTUlOVVM6IAorICAgICAg
ICBjYXNlIE1JTlVTTUlOVVM6IAorICAgICAgICAgICAgcmV0dXJuICItLSI7CisgICAgICAgIGNh
c2UgRVhDTEFNQVRJT046IAorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBU
SUxERTogCisgICAgICAgICAgICByZXR1cm4gIn4iOworICAgICAgICBjYXNlIFRZUEVPRjogCisg
ICAgICAgICAgICByZXR1cm4gInR5cGVvZiI7CisgICAgICAgIGNhc2UgVk9JRFRPS0VOOiAKKyAg
ICAgICAgICAgIHJldHVybiAidm9pZCI7CisgICAgICAgIGNhc2UgREVMRVRFVE9LRU46IAorICAg
ICAgICAgICAgcmV0dXJuICJkZWxldGUiOworICAgICAgICBjYXNlIE9SOiAKKyAgICAgICAgICAg
IHJldHVybiAifHwiOworICAgICAgICBjYXNlIEFORDogCisgICAgICAgICAgICByZXR1cm4gIiYm
IjsKKyAgICAgICAgY2FzZSBCSVRPUjogCisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAg
ICBjYXNlIEJJVFhPUjogCisgICAgICAgICAgICByZXR1cm4gIl4iOworICAgICAgICBjYXNlIEJJ
VEFORDogCisgICAgICAgICAgICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIEVRRVE6IAorICAg
ICAgICAgICAgcmV0dXJuICI9PSI7CisgICAgICAgIGNhc2UgTkU6IAorICAgICAgICAgICAgcmV0
dXJuICIhPSI7CisgICAgICAgIGNhc2UgU1RSRVE6IAorICAgICAgICAgICAgcmV0dXJuICI9PT0i
OworICAgICAgICBjYXNlIFNUUk5FUTogCisgICAgICAgICAgICByZXR1cm4gIiE9PSI7CisgICAg
ICAgIGNhc2UgTFQ6IAorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBHVDog
CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAgICBjYXNlIExFOiAKKyAgICAgICAgICAg
IHJldHVybiAiPD0iOworICAgICAgICBjYXNlIEdFOiAKKyAgICAgICAgICAgIHJldHVybiAiPj0i
OworICAgICAgICBjYXNlIElOU1RBTkNFT0Y6IAorICAgICAgICAgICAgcmV0dXJuICJpbnN0YW5j
ZW9mIjsKKyAgICAgICAgY2FzZSBJTlRPS0VOOiAKKyAgICAgICAgICAgIHJldHVybiAiaW4iOwor
ICAgICAgICBjYXNlIExTSElGVDogCisgICAgICAgICAgICByZXR1cm4gIjw8IjsKKyAgICAgICAg
Y2FzZSBSU0hJRlQ6IAorICAgICAgICAgICAgcmV0dXJuICI+PiI7CisgICAgICAgIGNhc2UgVVJT
SElGVDogCisgICAgICAgICAgICByZXR1cm4gIj4+PiI7CisgICAgICAgIGNhc2UgUExVUzogCisg
ICAgICAgICAgICByZXR1cm4gIisiOworICAgICAgICBjYXNlIE1JTlVTOiAKKyAgICAgICAgICAg
IHJldHVybiAiLSI7CisgICAgICAgIGNhc2UgVElNRVM6IAorICAgICAgICAgICAgcmV0dXJuICIq
IjsKKyAgICAgICAgY2FzZSBESVZJREU6IAorICAgICAgICAgICAgcmV0dXJuICIvIjsKKyAgICAg
ICAgY2FzZSBNT0Q6IAorICAgICAgICAgICAgcmV0dXJuICIlIjsKKyAgICAgICAgY2FzZSBSRVRV
Uk46IAorICAgICAgICBjYXNlIFJFU0VSVkVEX0lGX1NUUklDVDoKKyAgICAgICAgY2FzZSBSRVNF
UlZFRDogCisgICAgICAgIGNhc2UgTlVNQkVSOgorICAgICAgICBjYXNlIElERU5UOiAKKyAgICAg
ICAgY2FzZSBTVFJJTkc6IAorICAgICAgICBjYXNlIEVSUk9SVE9LOgorICAgICAgICBjYXNlIEVP
RlRPSzogCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBMYXN0VW50YWdnZWRU
b2tlbjogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7CisgICAgfQorICAg
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2VTcGVjaWFsQ2FzZShK
U1Rva2VuVHlwZSBleHBlY3RlZFRva2VuKSAKKyAgICB7CisgICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2U7CisgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRUb2tlbikgeworICAgICAgICBjYXNlIFJF
U0VSVkVEX0lGX1NUUklDVDoKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJVc2Ugb2YgcmVz
ZXJ2ZWQgd29yZCAnIjsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmlt
cGwoKTsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAiJyBpbiBzdHJpY3QgbW9kZSI7Cisg
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZS5pbXBsKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgUkVTRVJWRUQ6CisgICAgICAgICAgICBlcnJvck1l
c3NhZ2UgPSAiVXNlIG9mIHJlc2VydmVkIHdvcmQgJyI7CisgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7CisgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIici
OworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE5VTUJFUjogCisgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSAiVW5leHBlY3RlZCBudW1iZXIgJyI7CisgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7CisgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIici
OworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaW1wbCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElERU5UOiAKKyAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9ICJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGJ1dCBmb3VuZCAnIjsKKyAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSArPSBnZXRUb2tlbigpLmltcGwoKTsKKyAgICAgICAgICAgIGVycm9y
TWVzc2FnZSArPSAiJyBpbnN0ZWFkIjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJy
b3JNZXNzYWdlLmltcGwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTVFJJ
Tkc6IAorICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIlVuZXhwZWN0ZWQgc3RyaW5nICI7Cisg
ICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZ2V0VG9rZW4oKS5pbXBsKCk7CisgICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZS5pbXBsKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgRVJST1JUT0s6IAorICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
IlVucmVjb2duaXplZCB0b2tlbiAnIjsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBnZXRU
b2tlbigpLmltcGwoKTsKKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAiJyI7CisgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZS5pbXBsKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgRU9GVE9LOiAgCisgICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9ICJVbmV4cGVjdGVkIEVPRiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
UkVUVVJOOgorICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiUmV0dXJuIHN0YXRlbWVudHMg
YXJlIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyI7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImludGVybmFsIGVycm9yIjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUgdm9pZCB1cGRh
dGVFcnJvck1lc3NhZ2UoKSAKKyAgICB7CisgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lID0gZ2V0VG9rZW5OYW1lKG1fdG9rZW4ubV90eXBlKTsKKyAgICAg
ICAgaWYgKCFuYW1lKSAKKyAgICAgICAgICAgIHVwZGF0ZUVycm9yTWVzc2FnZVNwZWNpYWxDYXNl
KG1fdG9rZW4ubV90eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gVVN0cmluZyhTdHJpbmc6OmZvcm1hdCgiVW5leHBlY3RlZCB0b2tlbiAnJXMnIiwgbmFt
ZSkuaW1wbCgpKTsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHZvaWQgdXBkYXRlRXJy
b3JNZXNzYWdlKEpTVG9rZW5UeXBlIGV4cGVjdGVkVG9rZW4pIAorICAgIHsKKyAgICAgICAgbV9l
cnJvciA9IHRydWU7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnZXRUb2tlbk5hbWUoZXhw
ZWN0ZWRUb2tlbik7CisgICAgICAgIGlmIChuYW1lKQorICAgICAgICAgICAgbV9lcnJvck1lc3Nh
Z2UgPSBVU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCB0b2tlbiAnJXMnIiwgbmFtZSku
aW1wbCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIWdldFRva2VuTmFtZSht
X3Rva2VuLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgdXBkYXRlRXJyb3JNZXNzYWdlU3BlY2lh
bENhc2UobV90b2tlbi5tX3R5cGUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICpleGNlcHRpb24gPSBhZGRFcnJvckluZm8oJmxleGljYWxHbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgY3JlYXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNnKSwgZXJy
TGluZSwgc291cmNlKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVFcnJvck1lc3NhZ2VTcGVjaWFs
Q2FzZShleHBlY3RlZFRva2VuKTsKKyAgICAgICAgfSAKKyAgICB9CisgICAgCisgICAgTkVWRVJf
SU5MSU5FIHZvaWQgdXBkYXRlRXJyb3JXaXRoTmFtZUFuZE1lc3NhZ2UoY29uc3QgY2hhciogYmVm
b3JlTXNnLCBVU3RyaW5nIG5hbWUsIGNvbnN0IGNoYXIqIGFmdGVyTXNnKSAKKyAgICB7CisgICAg
ICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAgICBTdHJpbmcgcHJlZml4KGJlZm9yZU1zZyk7Cisg
ICAgICAgIFN0cmluZyBwb3N0Zml4KGFmdGVyTXNnKTsKKyAgICAgICAgcHJlZml4ICs9ICIgJyI7
CisgICAgICAgIHByZWZpeCArPSBuYW1lLmltcGwoKTsKKyAgICAgICAgcHJlZml4ICs9ICInICI7
CisgICAgICAgIHByZWZpeCArPSBwb3N0Zml4OworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBy
ZWZpeC5pbXBsKCk7CisgICAgfQorICAgIAorICAgIE5FVkVSX0lOTElORSB2b2lkIHVwZGF0ZUVy
cm9yTWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIAorICAgIHsgICAKKyAgICAgICAgbV9lcnJvciA9
IHRydWU7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gVVN0cmluZyhtc2cpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9vcCgpOyB9
CisgICAgdm9pZCBlbmRMb29wKCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9CisgICAg
dm9pZCBzdGFydFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0U3dpdGNoKCk7IH0KKyAg
ICB2b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPmVuZFN3aXRjaCgpOyB9CisgICAg
dm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBjdXJyZW50U2NvcGUoKS0+c2V0U3RyaWN0TW9kZSgpOyB9
CisgICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPnN0cmljdE1v
ZGUoKTsgfQorICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50U2Nv
cGUoKS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQorICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihj
b25zdCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xhcmVQ
YXJhbWV0ZXIoaWRlbnQpOyB9CisgICAgYm9vbCBicmVha0lzVmFsaWQoKQorICAgIHsKKyAgICAg
ICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29wZSgpOworICAgICAgICB3aGlsZSAoIWN1
cnJlbnQtPmJyZWFrSXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ29u
dGFpbmluZ1Njb3BlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQuY29udGFpbmluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGJvb2wgY29udGludWVJc1ZhbGlkKCkKKyAgICB7
CisgICAgICAgIFNjb3BlUmVmIGN1cnJlbnQgPSBjdXJyZW50U2NvcGUoKTsKKyAgICAgICAgd2hp
bGUgKCFjdXJyZW50LT5jb250aW51ZUlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50Lmhhc0NvbnRhaW5pbmdTY29wZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNvbnRhaW5pbmdTY29wZSgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB2b2lkIHB1c2hMYWJlbChjb25z
dCBJZGVudGlmaWVyKiBsYWJlbCwgYm9vbCBpc0xvb3ApIHsgY3VycmVudFNjb3BlKCktPnB1c2hM
YWJlbChsYWJlbCwgaXNMb29wKTsgfQorICAgIHZvaWQgcG9wTGFiZWwoKSB7IGN1cnJlbnRTY29w
ZSgpLT5wb3BMYWJlbCgpOyB9CisgICAgU2NvcGVMYWJlbEluZm8qIGdldExhYmVsKGNvbnN0IElk
ZW50aWZpZXIqIGxhYmVsKQorICAgIHsKKyAgICAgICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJl
bnRTY29wZSgpOworICAgICAgICBTY29wZUxhYmVsSW5mbyogcmVzdWx0ID0gMDsKKyAgICAgICAg
d2hpbGUgKCEocmVzdWx0ID0gY3VycmVudC0+Z2V0TGFiZWwobGFiZWwpKSkgeworICAgICAgICAg
ICAgaWYgKCFjdXJyZW50Lmhhc0NvbnRhaW5pbmdTY29wZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY29udGFpbmluZ1Njb3BlKCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgZW51
bSBTb3VyY2VFbGVtZW50c01vZGUgeyBDaGVja0ZvclN0cmljdE1vZGUsIERvbnRDaGVja0ZvclN0
cmljdE1vZGUgfTsKKyAgICB0ZW1wbGF0ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VTb3VyY2VFbGVtZW50cyhUcmVl
QnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVu
dCBwYXJzZVN0YXRlbWVudChUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3Rp
dmUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRl
ciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJz
ZUNvbnN0RGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VEb1doaWxlU3RhdGVtZW50KFRyZWVCdWlsZGVy
Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNl
V2hpbGVTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VGb3JTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VCcmVha1N0
YXRlbWVudChUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWVudCBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7CisgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlUmV0dXJuU3Rh
dGVtZW50KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IHBhcnNlVGhyb3dTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VXaXRoU3RhdGVtZW50
KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlU3dpdGNoU3RhdGVtZW50KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhdXNlTGlzdCBwYXJzZVN3aXRjaENsYXVzZXMoVHJl
ZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGF1c2Ug
cGFyc2VTd2l0Y2hEZWZhdWx0Q2xhdXNlKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlVHJ5U3RhdGVtZW50KFRyZWVCdWls
ZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBh
cnNlRGVidWdnZXJTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVC
dWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IHBhcnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VJZlN0YXRlbWVudChU
cmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lO
TElORSBUcmVlU3RhdGVtZW50IHBhcnNlQmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlRXhwcmVz
c2lvbihUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3Npb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lv
biBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZUJp
bmFyeUV4cHJlc3Npb24oVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VVbmFyeUV4cHJlc3Npb24o
VHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIHBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVBy
aW1hcnlFeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlQXJyYXlMaXRlcmFsKFRy
ZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5M
SU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlT2JqZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lv
biBwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3Vt
ZW50cyhUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxib29sIHN0cmljdCwgY2xhc3MgVHJl
ZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1
aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUg
VHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1l
dGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VW
YXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3Qg
SWRlbnRpZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwg
aW50JiBpZGVudFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3Qg
cGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCk7CisgICAgZW51
bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9u
TmVlZHNOYW1lIH07CisgICAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBib29sIG5h
bWVJc0luQ29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBwYXJzZUZ1bmN0
aW9uSW5mbyhUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBhcmFt
ZXRlckxpc3QmLCBUcmVlRnVuY3Rpb25Cb2R5JiwgaW50JiBvcGVuQnJhY2UsIGludCYgY2xvc2VC
cmFjZSwgaW50JiBib2R5U3RhcnRMaW5lKTsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFy
eU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsKKyAgICBib29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9u
KCk7CisgICAgCisgICAgYm9vbCBhdXRvU2VtaUNvbG9uKCkKKyAgICB7CisgICAgICAgIGlmICht
X3Rva2VuLm1fdHlwZSA9PSBTRU1JQ09MT04pIHsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBhbGxvd0F1dG9t
YXRpY1NlbWljb2xvbigpOworICAgIH0KKyAgICAKKyAgICBib29sIGNhblJlY3Vyc2UoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKTsKKyAgICB9CisgICAg
CisgICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9s
YXN0VG9rZW5FbmQ7CisgICAgfQogCi0gICAgICAgIG1fYXJlbmEucmVzZXQoKTsKKyAgICBtdXRh
YmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIGNvbnN0IFNvdXJjZUNv
ZGUqIG1fc291cmNlOworICAgIFBhcnNlckFyZW5hKiBtX2FyZW5hOworICAgIExleGVyKiBtX2xl
eGVyOworICAgIAorICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CisgICAgYm9vbCBtX2Vycm9yOwor
ICAgIFVTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisgICAgSlNUb2tlbiBtX3Rva2VuOworICAgIGJv
b2wgbV9hbGxvd3NJbjsKKyAgICBpbnQgbV9sYXN0TGluZTsKKyAgICBpbnQgbV9sYXN0VG9rZW5F
bmQ7CisgICAgaW50IG1fYXNzaWdubWVudENvdW50OworICAgIGludCBtX25vbkxIU0NvdW50Owor
ICAgIGJvb2wgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkOworICAgIGludCBtX3N0YXRlbWVudERl
cHRoOworICAgIGludCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7CisgICAgY29uc3QgSWRl
bnRpZmllciogbV9sYXN0SWRlbnRpZmllcjsKKyAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBtX2Z1
bmN0aW9uQ2FjaGU7CisgICAgU291cmNlRWxlbWVudHMqIG1fc291cmNlRWxlbWVudHM7CisgICAg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIG1fdmFyRGVjbGFy
YXRpb25zOworICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKKyAgICBJZGVudGlmaWVyU2V0IG1fY2FwdHVyZWRW
YXJpYWJsZXM7CisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgaW50IG1fbnVtQ29u
c3RhbnRzOworICAgIAorICAgIHN0cnVjdCBEZXB0aE1hbmFnZXIgeworICAgICAgICBEZXB0aE1h
bmFnZXIoaW50KiBkZXB0aCkKKyAgICAgICAgOiBtX29yaWdpbmFsRGVwdGgoKmRlcHRoKQorICAg
ICAgICAsIG1fZGVwdGgoZGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgfkRlcHRoTWFuYWdlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgICptX2RlcHRoID0g
bV9vcmlnaW5hbERlcHRoOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIGludCBtX29yaWdpbmFsRGVwdGg7CisgICAgICAgIGludCogbV9kZXB0aDsKKyAgICB9Owor
fTsKIAotICAgICAgICBtX3NvdXJjZSA9IDA7Cit0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4K
K1Bhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRGVidWdnZXIqIGRlYnVnZ2VyLCBFeGVjU3RhdGUqIGRlYnVnZ2Vy
RXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQobGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbiAmJiAhKmV4Y2VwdGlvbik7CisgICAg
aW50IGVyckxpbmU7CisgICAgVVN0cmluZyBlcnJNc2c7CisKKyAgICBpZiAoUGFyc2VkTm9kZTo6
c2NvcGVJc0Z1bmN0aW9uKQorICAgICAgICBtX2xleGVyLT5zZXRJc1JlcGFyc2luZygpOworCisg
ICAgbV9zb3VyY2VFbGVtZW50cyA9IDA7CisKKyAgICBlcnJMaW5lID0gLTE7CisgICAgZXJyTXNn
ID0gVVN0cmluZygpOworCisgICAgVVN0cmluZyBwYXJzZUVycm9yID0gcGFyc2VJbm5lcigpOwor
CisgICAgaW50IGxpbmVOdW1iZXIgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CisgICAgYm9vbCBs
ZXhFcnJvciA9IG1fbGV4ZXItPnNhd0Vycm9yKCk7CisgICAgVVN0cmluZyBsZXhFcnJvck1lc3Nh
Z2UgPSBsZXhFcnJvciA/IG1fbGV4ZXItPmdldEVycm9yTWVzc2FnZSgpIDogVVN0cmluZygpOwor
ICAgIEFTU0VSVChsZXhFcnJvck1lc3NhZ2UuaXNOdWxsKCkgIT0gbGV4RXJyb3IpOworICAgIG1f
bGV4ZXItPmNsZWFyKCk7CisKKyAgICBpZiAoIXBhcnNlRXJyb3IuaXNOdWxsKCkgfHwgbGV4RXJy
b3IpIHsKKyAgICAgICAgZXJyTGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIGVyck1zZyA9ICFs
ZXhFcnJvck1lc3NhZ2UuaXNOdWxsKCkgPyBsZXhFcnJvck1lc3NhZ2UgOiBwYXJzZUVycm9yOwog
ICAgICAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKLSAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMg
PSAwOwotICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOworICAgIH0KIAotICAgICAgICBp
ZiAoZGVidWdnZXIgJiYgIVBhcnNlZE5vZGU6OnNjb3BlSXNGdW5jdGlvbikKLSAgICAgICAgICAg
IGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3RhdGUsIHNvdXJjZS5wcm92aWRl
cigpLCBlcnJMaW5lLCBlcnJNc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
KyAgICBSZWZQdHI8UGFyc2VkTm9kZT4gcmVzdWx0OworICAgIGlmIChtX3NvdXJjZUVsZW1lbnRz
KSB7CisgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZSgmbGV4aWNhbEdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc291cmNlRWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAm
bV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY2FwdHVyZWRWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqbV9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1D
b25zdGFudHMpOworICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCks
IG1fbGFzdExpbmUpOworICAgIH0gZWxzZSBpZiAobGV4aWNhbEdsb2JhbE9iamVjdCkgeworICAg
ICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4gcmVwYXJzaW5nIGEg
ZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCisgICAgICAgIC8vIHJlcG9ydGVkIHRoZSBl
cnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBldmFsIGNvZGUuIFNv
IGlmIHdlJ3JlCisgICAgICAgIC8vIHBhcnNpbmcgYSBmdW5jdGlvbiBib2R5IG5vZGUsIHdlIGFz
c3VtZSB0aGF0IHdoYXQgYWN0dWFsbHkgaGFwcGVuZWQgaGVyZSBpcyB0aGF0CisgICAgICAgIC8v
IHdlIHJhbiBvdXQgb2Ygc3RhY2sgd2hpbGUgcGFyc2luZy4gSWYgd2Ugc2VlIGFuIGVycm9yIHdo
aWxlIHBhcnNpbmcgZXZhbCBvciBwcm9ncmFtCisgICAgICAgIC8vIGNvZGUgd2UgYXNzdW1lIHRo
YXQgaXQgd2FzIGEgc3ludGF4IGVycm9yIHNpbmNlIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlzIG11
Y2ggbGVzcworICAgICAgICAvLyBsaWtlbHksIGFuZCB3ZSBhcmUgY3VycmVudGx5IHVuYWJsZSB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28gY2FzZXMuCisgICAgICAgIGlmIChpc0Z1bmN0
aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+KDApKSkKKyAgICAgICAgICAgICpl
eGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgICAgIGVsc2UgaWYgKGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSkKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVTeW50YXhFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJN
c2cpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gYWRkRXJyb3JJbmZv
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGNyZWF0ZVN5bnRheEVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIGVyck1zZyksIGVyckxpbmUsICptX3NvdXJjZSk7CiAgICAgfQog
CisgICAgaWYgKGRlYnVnZ2VyICYmICFQYXJzZWROb2RlOjpzY29wZUlzRnVuY3Rpb24pCisgICAg
ICAgIGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3RhdGUsIG1fc291cmNlLT5w
cm92aWRlcigpLCBlcnJMaW5lLCBlcnJNc2cpOworCisgICAgbV9hcmVuYS0+cmVzZXQoKTsKKwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2Vk
Tm9kZT4KK1Bhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIEpTUGFyc2VyU3RyaWN0
bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgRGVidWdnZXIqIGRlYnVn
Z2VyLCBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCit7CisgICAg
UGFyc2VyIHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMsIHN0cmljdG5lc3Ms
IHBhcnNlck1vZGUpOworICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4obGV4aWNh
bEdsb2JhbE9iamVjdCwgZGVidWdnZXIsIGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKTsKK30KIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gUGFyc2VyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJzZXJUb2tlbnNfaAorI2RlZmluZSBQ
YXJzZXJUb2tlbnNfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKKwor
ZW51bSB7CisgICAgVW5hcnlPcFRva2VuRmxhZyA9IDY0LAorICAgIEtleXdvcmRUb2tlbkZsYWcg
PSAxMjgsCisgICAgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCA9IDgsCisgICAgQmluYXJ5
T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9uYWxTaGlmdCA9IDQsCisgICAgQmluYXJ5
T3BUb2tlblByZWNlZGVuY2VNYXNrID0gMTUgPDwgQmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlm
dCwKK307CisKKyNkZWZpbmUgQklOQVJZX09QX1BSRUNFREVOQ0UocHJlYykgKCgocHJlYykgPDwg
QmluYXJ5T3BUb2tlblByZWNlZGVuY2VTaGlmdCkgfCAoKHByZWMpIDw8IChCaW5hcnlPcFRva2Vu
UHJlY2VkZW5jZVNoaWZ0ICsgQmluYXJ5T3BUb2tlbkFsbG93c0luUHJlY2VkZW5jZUFkZGl0aW9u
YWxTaGlmdCkpKQorI2RlZmluZSBJTl9PUF9QUkVDRURFTkNFKHByZWMpICgocHJlYykgPDwgKEJp
bmFyeU9wVG9rZW5QcmVjZWRlbmNlU2hpZnQgKyBCaW5hcnlPcFRva2VuQWxsb3dzSW5QcmVjZWRl
bmNlQWRkaXRpb25hbFNoaWZ0KSkKKworZW51bSBKU1Rva2VuVHlwZSB7CisgICAgTlVMTFRPS0VO
ID0gS2V5d29yZFRva2VuRmxhZywKKyAgICBUUlVFVE9LRU4sCisgICAgRkFMU0VUT0tFTiwKKyAg
ICBCUkVBSywKKyAgICBDQVNFLAorICAgIERFRkFVTFQsCisgICAgRk9SLAorICAgIE5FVywKKyAg
ICBWQVIsCisgICAgQ09OU1RUT0tFTiwKKyAgICBDT05USU5VRSwKKyAgICBGVU5DVElPTiwKKyAg
ICBSRVRVUk4sCisgICAgSUYsCisgICAgVEhJU1RPS0VOLAorICAgIERPLAorICAgIFdISUxFLAor
ICAgIFNXSVRDSCwKKyAgICBXSVRILAorICAgIFJFU0VSVkVELAorICAgIFJFU0VSVkVEX0lGX1NU
UklDVCwKKyAgICBUSFJPVywKKyAgICBUUlksCisgICAgQ0FUQ0gsCisgICAgRklOQUxMWSwKKyAg
ICBERUJVR0dFUiwKKyAgICBFTFNFLAorICAgIE9QRU5CUkFDRSA9IDAsCisgICAgQ0xPU0VCUkFD
RSwKKyAgICBPUEVOUEFSRU4sCisgICAgQ0xPU0VQQVJFTiwKKyAgICBPUEVOQlJBQ0tFVCwKKyAg
ICBDTE9TRUJSQUNLRVQsCisgICAgQ09NTUEsCisgICAgUVVFU1RJT04sCisgICAgTlVNQkVSLAor
ICAgIElERU5ULAorICAgIFNUUklORywKKyAgICBTRU1JQ09MT04sCisgICAgQ09MT04sCisgICAg
RE9ULAorICAgIEVSUk9SVE9LLAorICAgIEVPRlRPSywKKyAgICBFUVVBTCwKKyAgICBQTFVTRVFV
QUwsCisgICAgTUlOVVNFUVVBTCwKKyAgICBNVUxURVFVQUwsCisgICAgRElWRVFVQUwsCisgICAg
TFNISUZURVFVQUwsCisgICAgUlNISUZURVFVQUwsCisgICAgVVJTSElGVEVRVUFMLAorICAgIEFO
REVRVUFMLAorICAgIE1PREVRVUFMLAorICAgIFhPUkVRVUFMLAorICAgIE9SRVFVQUwsCisgICAg
TGFzdFVudGFnZ2VkVG9rZW4sCisKKyAgICAvLyBCZWdpbiB0YWdnZWQgdG9rZW5zCisgICAgUExV
U1BMVVMgPSAwIHwgVW5hcnlPcFRva2VuRmxhZywKKyAgICBNSU5VU01JTlVTID0gMSB8IFVuYXJ5
T3BUb2tlbkZsYWcsCisgICAgRVhDTEFNQVRJT04gPSAyIHwgVW5hcnlPcFRva2VuRmxhZywKKyAg
ICBUSUxERSA9IDMgfCBVbmFyeU9wVG9rZW5GbGFnLAorICAgIEFVVE9QTFVTUExVUyA9IDQgfCBV
bmFyeU9wVG9rZW5GbGFnLAorICAgIEFVVE9NSU5VU01JTlVTID0gNSB8IFVuYXJ5T3BUb2tlbkZs
YWcsCisgICAgVFlQRU9GID0gNiB8IFVuYXJ5T3BUb2tlbkZsYWcgfCBLZXl3b3JkVG9rZW5GbGFn
LAorICAgIFZPSURUT0tFTiA9IDcgfCBVbmFyeU9wVG9rZW5GbGFnIHwgS2V5d29yZFRva2VuRmxh
ZywKKyAgICBERUxFVEVUT0tFTiA9IDggfCBVbmFyeU9wVG9rZW5GbGFnIHwgS2V5d29yZFRva2Vu
RmxhZywKKyAgICBPUiA9IDAgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxKSwKKyAgICBBTkQgPSAx
IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoMiksCisgICAgQklUT1IgPSAyIHwgQklOQVJZX09QX1BS
RUNFREVOQ0UoMyksCisgICAgQklUWE9SID0gMyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDQpLAor
ICAgIEJJVEFORCA9IDQgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSg1KSwKKyAgICBFUUVRID0gNSB8
IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAorICAgIE5FID0gNiB8IEJJTkFSWV9PUF9QUkVDRURF
TkNFKDYpLAorICAgIFNUUkVRID0gNyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDYpLAorICAgIFNU
Uk5FUSA9IDggfCBCSU5BUllfT1BfUFJFQ0VERU5DRSg2KSwKKyAgICBMVCA9IDkgfCBCSU5BUllf
T1BfUFJFQ0VERU5DRSg3KSwKKyAgICBHVCA9IDEwIHwgQklOQVJZX09QX1BSRUNFREVOQ0UoNyks
CisgICAgTEUgPSAxMSB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDcpLAorICAgIEdFID0gMTIgfCBC
SU5BUllfT1BfUFJFQ0VERU5DRSg3KSwKKyAgICBJTlNUQU5DRU9GID0gMTMgfCBCSU5BUllfT1Bf
UFJFQ0VERU5DRSg3KSB8IEtleXdvcmRUb2tlbkZsYWcsCisgICAgSU5UT0tFTiA9IDE0IHwgSU5f
T1BfUFJFQ0VERU5DRSg3KSB8IEtleXdvcmRUb2tlbkZsYWcsCisgICAgTFNISUZUID0gMTUgfCBC
SU5BUllfT1BfUFJFQ0VERU5DRSg4KSwKKyAgICBSU0hJRlQgPSAxNiB8IEJJTkFSWV9PUF9QUkVD
RURFTkNFKDgpLAorICAgIFVSU0hJRlQgPSAxNyB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDgpLAor
ICAgIFBMVVMgPSAxOCB8IEJJTkFSWV9PUF9QUkVDRURFTkNFKDkpIHwgVW5hcnlPcFRva2VuRmxh
ZywKKyAgICBNSU5VUyA9IDE5IHwgQklOQVJZX09QX1BSRUNFREVOQ0UoOSkgfCBVbmFyeU9wVG9r
ZW5GbGFnLAorICAgIFRJTUVTID0gMjAgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxMCksCisgICAg
RElWSURFID0gMjEgfCBCSU5BUllfT1BfUFJFQ0VERU5DRSgxMCksCisgICAgTU9EID0gMjIgfCBC
SU5BUllfT1BfUFJFQ0VERU5DRSgxMCkKK307CisKK3VuaW9uIEpTVG9rZW5EYXRhIHsKKyAgICBp
bnQgaW50VmFsdWU7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50OworfTsKKworc3RydWN0IEpTVG9rZW5JbmZvIHsKKyAgICBKU1Rva2VuSW5mbygp
IDogbGluZSgwKSB7IH0KKyAgICBpbnQgbGluZTsKKyAgICBpbnQgc3RhcnRPZmZzZXQ7CisgICAg
aW50IGVuZE9mZnNldDsKK307CisKK3N0cnVjdCBKU1Rva2VuIHsKKyAgICBKU1Rva2VuVHlwZSBt
X3R5cGU7CisgICAgSlNUb2tlbkRhdGEgbV9kYXRhOworICAgIEpTVG9rZW5JbmZvIG1faW5mbzsK
K307CisKK2VudW0gSlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVN0
cmljdCB9OworZW51bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJvZ3JhbUNvZGUsIEpTUGFyc2VG
dW5jdGlvbkNvZGUgfTsKKyAgICAKK30KKworCisjZW5kaWYgLy8gUGFyc2VyVG9rZW5zX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCShyZXZpc2lvbiA5
ODc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw2ICs3NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQg
ZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRDaGFyOyB9CiAgICAgICAgIGNvbnN0IFVD
aGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlci0+ZGF0YSgpICsgbV9zdGFydENo
YXI7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ2hhciAtIG1f
c3RhcnRDaGFyOyB9CisgICAgICAgIAorICAgICAgICBTb3VyY2VDb2RlIHN1YkV4cHJlc3Npb24o
aW50LCBpbnQsIGludCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U291cmNlUHJv
dmlkZXI+IG1fcHJvdmlkZXI7CkBAIC04Niw2ICs4OCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3Jl
YXRlKHNvdXJjZSwgdXJsKSwgZmlyc3RMaW5lKTsKICAgICB9CisgICAgCisgICAgaW5saW5lIFNv
dXJjZUNvZGUgU291cmNlQ29kZTo6c3ViRXhwcmVzc2lvbihpbnQgb3BlbkJyYWNlLCBpbnQgY2xv
c2VCcmFjZSwgaW50IGZpcnN0TGluZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChwcm92aWRlcigp
LT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOworICAgICAgICBBU1NFUlQocHJvdmlkZXIoKS0+
ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CisgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKHBy
b3ZpZGVyKCksIG9wZW5CcmFjZSwgY2xvc2VCcmFjZSArIDEsIGZpcnN0TGluZSk7CisgICAgfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaAkocmV2aXNpb24gOTg3NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDEwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkpTUGFyc2VyLmgiCisjaWZuZGVmIFNv
dXJjZVByb3ZpZGVyQ2FjaGVJdGVtX2gKKyNkZWZpbmUgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1f
aAorCisjaW5jbHVkZSAiUGFyc2VyVG9rZW5zLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02NiwzICs2OSw1IEBAIHB1Ymxp
YzoKIH07CiAKIH0KKworI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lv
biA5ODc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8eWFyci9ZYXJyU3lu
dGF4Q2hlY2tlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKKyAgICAKIGNsYXNzIFN5bnRheENoZWNr
ZXIgewogcHVibGljOgogICAgIHN0cnVjdCBCaW5hcnlFeHByQ29udGV4dCB7CkBAIC02Myw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgU3ludGF4Q2hlY2tlciogbV9jb250ZXh0OwogICAgIH07
CiAgICAgCi0gICAgU3ludGF4Q2hlY2tlcihKU0dsb2JhbERhdGEqICwgTGV4ZXIqKQorICAgIFN5
bnRheENoZWNrZXIoSlNHbG9iYWxEYXRhKiAsIHZvaWQqKQogICAgIHsKICAgICB9CiAKQEAgLTEx
OCw0MiArMTE5LDQyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1
aWxkU3RyaW5ncyA9IExleGVyOjpEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0ZVNv
dXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5j
dGlvbkNhbGxOb2RlKGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsg
fQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CiAgICAgdm9pZCBhcHBlbmRUb0Nv
bW1hKEV4cHJlc3Npb25UeXBlJiBiYXNlLCBFeHByZXNzaW9uVHlwZSByaWdodCkgeyBiYXNlID0g
cmlnaHQ7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb21tYUV4cHIoRXhwcmVzc2lvblR5
cGUsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KSB7IHJldHVybiByaWdodDsgfQotICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VBc3NpZ25Ob2RlKEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lv
blR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHBy
OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUoRXhwcmVzc2lvblR5cGUsIE9w
ZXJhdG9yLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQcmVFeHByOyB9Ci0gICAgRXhwcmVzc2lv
blR5cGUgbWFrZVBvc3RmaXhOb2RlKEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gUG9zdEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlVHlwZU9m
Tm9kZShFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVHlwZW9mRXhwcjsgfQotICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VEZWxldGVOb2RlKEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiBEZWxldGVFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZU5lZ2F0ZU5vZGUoRXhw
cmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1h
a2VCaXR3aXNlTm90Tm9kZShFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9Ci0g
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTG9naWNhbE5vdChFeHByZXNzaW9uVHlwZSkgeyByZXR1
cm4gVW5hcnlFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVW5hcnlQbHVzKEV4cHJl
c3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVWb2lkKEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KLSAgICBFeHByZXNz
aW9uVHlwZSB0aGlzRXhwcigpIHsgcmV0dXJuIFRoaXNFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiBSZXNvbHZl
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoKSB7IHJldHVy
biBPYmplY3RMaXRlcmFsRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhw
cihpbnQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSByaWdodCkgeyByZXR1cm4gcmln
aHQ7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlQXNzaWduTm9kZShpbnQsIEV4cHJlc3Npb25U
eXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZp
eE5vZGUoaW50LCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIFByZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlUG9zdGZpeE5vZGUoaW50LCBF
eHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFBvc3RFeHBy
OyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVR5cGVPZk5vZGUoaW50LCBFeHByZXNzaW9uVHlw
ZSkgeyByZXR1cm4gVHlwZW9mRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VEZWxldGVO
b2RlKGludCwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIERlbGV0ZUV4
cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlTmVnYXRlTm9kZShpbnQsIEV4cHJlc3Npb25U
eXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlQml0d2lz
ZU5vdE5vZGUoaW50LCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CisgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlTG9naWNhbE5vdChpbnQsIEV4cHJlc3Npb25UeXBlKSB7IHJl
dHVybiBVbmFyeUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoaW50
LCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CisgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlVm9pZChpbnQsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSB0aGlzRXhwcihpbnQpIHsgcmV0dXJuIFRoaXNFeHByOyB9Cisg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBp
bnQpIHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2Jq
ZWN0TGl0ZXJhbChpbnQpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9Ci0gICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlQXJyYXkoaW50KSB7IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9Cisg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChpbnQsIGludCkgeyByZXR1cm4g
T2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBcnJheShpbnQs
IGludCkgeyByZXR1cm4gQXJyYXlMaXRlcmFsRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZU51bWJlckV4cHIoZG91YmxlKSB7IHJldHVybiBOdW1iZXJFeHByOyB9Ci0gICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlU3RyaW5nKGNvbnN0IElkZW50aWZpZXIqKSB7IHJldHVybiBTdHJpbmdF
eHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQm9vbGVhbihib29sKSB7IHJldHVybiBC
b29sRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU51bGwoKSB7IHJldHVybiBOdWxs
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJyYWNrZXRBY2Nlc3MoRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBCcmFj
a2V0RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZURvdEFjY2VzcyhFeHByZXNzaW9u
VHlwZSwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIERvdEV4cHI7
IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZWdFeHAoY29uc3QgSWRlbnRpZmllciYgcGF0
dGVybiwgY29uc3QgSWRlbnRpZmllciYsIGludCkgeyByZXR1cm4gWWFycjo6Y2hlY2tTeW50YXgo
cGF0dGVybi51c3RyaW5nKCkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlw
ZSBjcmVhdGVOZXdFeHByKEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIE5ld0V4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKEV4cHJlc3Np
b25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4cHI7IH0KLSAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlw
ZSwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KLSAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSWRlbnRpZmllciosIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGlu
dCBjcmVhdGVGdW5jdGlvbkJvZHkoYm9vbCkgeyByZXR1cm4gMTsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUFycmF5KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFycmF5TGl0ZXJhbEV4cHI7
IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdW1iZXJFeHByKGludCwgZG91YmxlKSB7IHJl
dHVybiBOdW1iZXJFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3RyaW5nKGludCwg
Y29uc3QgSWRlbnRpZmllciopIHsgcmV0dXJuIFN0cmluZ0V4cHI7IH0KKyAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVCb29sZWFuKGludCwgYm9vbCkgeyByZXR1cm4gQm9vbEV4cHI7IH0KKyAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVOdWxsKGludCkgeyByZXR1cm4gTnVsbEV4cHI7IH0KKyAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVCcmFja2V0QWNjZXNzKGludCwgRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBCcmFja2V0RXhwcjsg
fQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZURvdEFjY2VzcyhpbnQsIEV4cHJlc3Npb25UeXBl
LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gRG90RXhwcjsgfQor
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChpbnQsIGNvbnN0IElkZW50aWZpZXImIHBh
dHRlcm4sIGNvbnN0IElkZW50aWZpZXImLCBpbnQpIHsgcmV0dXJuIFlhcnI6OmNoZWNrU3ludGF4
KHBhdHRlcm4udXN0cmluZygpKSA/IDAgOiBSZWdFeHBFeHByOyB9CisgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlTmV3RXhwcihpbnQsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGlu
dCwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9CisgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGludCwgRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9
CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShpbnQsIGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoaW50
LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gRnVuY3Rpb25FeHByOyB9CisgICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShpbnQsIGJvb2wp
IHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gMTsgfQog
ICAgIGludCBjcmVhdGVBcmd1bWVudHMoaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0
ZUFyZ3VtZW50c0xpc3QoaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50
c0xpc3QoaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlz
dChpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgdGVtcGxhdGUgPGJvb2wgY29tcGxl
dGU+IFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBpZiAoIWNvbXBsZXRlKQpA
QCAtMTY1LDEwICsxNjYsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFjb21wbGV0
ZSkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFBy
b3BlcnR5KCZnbG9iYWxEYXRhLT5wYXJzZXItPmFyZW5hKCkuaWRlbnRpZmllckFyZW5hKCkubWFr
ZU51bWVyaWNJZGVudGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpLCB0eXBlKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5KCZnbG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpLCB0eXBlKTsKICAgICB9Ci0g
ICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChQcm9wZXJ0eSkgeyByZXR1cm4gMTsgfQotICAgIGlu
dCBjcmVhdGVQcm9wZXJ0eUxpc3QoUHJvcGVydHksIGludCkgeyByZXR1cm4gMTsgfQorICAgIGlu
dCBjcmVhdGVQcm9wZXJ0eUxpc3QoaW50LCBQcm9wZXJ0eSkgeyByZXR1cm4gMTsgfQorICAgIGlu
dCBjcmVhdGVQcm9wZXJ0eUxpc3QoaW50LCBQcm9wZXJ0eSwgaW50KSB7IHJldHVybiAxOyB9CiAg
ICAgaW50IGNyZWF0ZUVsZW1lbnRMaXN0KGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50
IGNyZWF0ZUVsZW1lbnRMaXN0KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQg
Y3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4gMTsg
fQpAQCAtMTc3LDMyICsxNzgsMzIgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0
KGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0KGludCwgaW50KSB7
IHJldHVybiAxOyB9CiAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKGludCkgeyB9Ci0gICAgaW50
IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUJsb2NrU3RhdGVt
ZW50KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRXhwclN0YXRl
bWVudChpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUlmU3RhdGVt
ZW50KGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5j
RGVjbFN0YXRlbWVudChpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUJsb2NrU3RhdGVtZW50KGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVFeHByU3RhdGVt
ZW50KGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVJZlN0
YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBj
cmVhdGVGb3JMb29wKGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgaW50LCBpbnQpIHsgcmV0dXJu
IDE7IH0KLSAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
LSAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUVtcHR5U3RhdGVtZW50KCkgeyBy
ZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVWYXJTdGF0ZW1lbnQoaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVt
ZW50KGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
LSAgICBpbnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IElkZW50aWZp
ZXIqLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlVHJ5
U3RhdGVtZW50KGludCwgY29uc3QgSWRlbnRpZmllciosIGJvb2wsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVXaGlsZVN0
YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRl
V2l0aFN0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
Ci0gICAgaW50IGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IElkZW50aWZpZXIq
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVRocm93U3RhdGVt
ZW50KGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0
ZURlYnVnZ2VyKGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnN0U3Rh
dGVtZW50KGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgYXBwZW5kQ29uc3RE
ZWNsKGludCwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gMTsgfQotICAgIHRlbXBs
YXRlIDxib29sIHN0cmljdD4gUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkKKyAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQoaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGb3JMb29w
KGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQor
ICAgIGludCBjcmVhdGVGb3JJbkxvb3AoaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Cisg
ICAgaW50IGNyZWF0ZUZvckluTG9vcChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUVtcHR5U3RhdGVtZW50KGlu
dCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVWYXJTdGF0ZW1lbnQoaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVJldHVyblN0YXRlbWVudChpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUJy
ZWFrU3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAg
aW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGludCwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRlbWVu
dChpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVD
b250aW51ZVN0YXRlbWVudChpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlVHJ5U3RhdGVtZW50KGludCwgaW50LCBj
b25zdCBJZGVudGlmaWVyKiwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
CisgICAgaW50IGNyZWF0ZVN3aXRjaFN0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlV2hpbGVTdGF0ZW1lbnQoaW50
LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlV2l0aFN0
YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlRG9XaGlsZVN0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVMYWJlbFN0YXRlbWVudChpbnQsIGNvbnN0IElk
ZW50aWZpZXIqLCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVRo
cm93U3RhdGVtZW50KGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlRGVidWdnZXIoaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAg
IGludCBjcmVhdGVDb25zdFN0YXRlbWVudChpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7
IH0KKyAgICBpbnQgYXBwZW5kQ29uc3REZWNsKGludCwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwg
aW50KSB7IHJldHVybiAxOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0PiBQcm9wZXJ0eSBj
cmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUs
IGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpCiAg
ICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGlmICghc3RyaWN0KQpAQCAtMjEy
LDcgKzIxMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kU3RhdGVtZW50KGludCwgaW50
KSB7IH0KICAgICB2b2lkIGFkZFZhcihjb25zdCBJZGVudGlmaWVyKiwgYm9vbCkgeyB9Ci0gICAg
aW50IGNvbWJpbmVDb21tYU5vZGVzKGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNv
bWJpbmVDb21tYU5vZGVzKGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgZXZh
bENvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVz
c2lvbkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQs
IGJvb2wpCiAgICAgewpAQCAtMjI4LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJh
dG9yU3RhY2tIYXNIaWdoZXJQcmVjZWRlbmNlKGludCYsIGludCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIEJpbmFyeU9wZXJhbmQgZ2V0RnJvbU9wZXJhbmRTdGFjayhpbnQpIHsgcmV0dXJuIG1fdG9w
QmluYXJ5RXhwcjsgfQogICAgIHZvaWQgc2hyaW5rT3BlcmFuZFN0YWNrQnkoaW50JiBvcGVyYW5k
U3RhY2tEZXB0aCwgaW50IGFtb3VudCkgeyBvcGVyYW5kU3RhY2tEZXB0aCAtPSBhbW91bnQ7IH0K
LSAgICB2b2lkIGFwcGVuZEJpbmFyeU9wZXJhdGlvbihpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBp
bnQmLCBCaW5hcnlPcGVyYW5kLCBCaW5hcnlPcGVyYW5kKSB7IG9wZXJhbmRTdGFja0RlcHRoKys7
IH0KKyAgICB2b2lkIGFwcGVuZEJpbmFyeU9wZXJhdGlvbihpbnQsIGludCYgb3BlcmFuZFN0YWNr
RGVwdGgsIGludCYsIEJpbmFyeU9wZXJhbmQsIEJpbmFyeU9wZXJhbmQpIHsgb3BlcmFuZFN0YWNr
RGVwdGgrKzsgfQogICAgIHZvaWQgb3BlcmF0b3JTdGFja0FwcGVuZChpbnQmIG9wZXJhdG9yU3Rh
Y2tEZXB0aCwgaW50LCBpbnQpIHsgb3BlcmF0b3JTdGFja0RlcHRoKys7IH0KICAgICBpbnQgcG9w
T3BlcmFuZFN0YWNrKGludCYpIHsgaW50IHJlcyA9IG1fdG9wQmluYXJ5RXhwcjsgbV90b3BCaW5h
cnlFeHByID0gMDsgcmV0dXJuIHJlczsgfQogICAgIApAQCAtMjM4LDcgKzIzOSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVuYXJ5VG9rZW5TdGFja1JlbW92ZUxhc3QoaW50JiBzdGFja0RlcHRoKSB7
IHN0YWNrRGVwdGggPSAwOyB9CiAgICAgCiAgICAgdm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQo
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIE9wZXJhdG9yKSB7IH0KLSAgICBpbnQgY3JlYXRlQXNz
aWdubWVudChpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQXNzaWdubWVudChpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMTsgfQogICAgIGNvbnN0
IElkZW50aWZpZXImIGdldE5hbWUoY29uc3QgUHJvcGVydHkmIHByb3BlcnR5KSBjb25zdCB7IEFT
U0VSVChwcm9wZXJ0eS5uYW1lKTsgcmV0dXJuICpwcm9wZXJ0eS5uYW1lOyB9CiAgICAgUHJvcGVy
dHlOb2RlOjpUeXBlIGdldFR5cGUoY29uc3QgUHJvcGVydHkmIHByb3BlcnR5KSBjb25zdCB7IHJl
dHVybiBwcm9wZXJ0eS50eXBlOyB9CiAgICAgYm9vbCBpc1Jlc29sdmUoRXhwcmVzc2lvblR5cGUg
ZXhwcikgY29uc3QgeyByZXR1cm4gZXhwciA9PSBSZXNvbHZlRXhwciB8fCBleHByID09IFJlc29s
dmVFdmFsRXhwcjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAJKHJldmlzaW9uIDk4NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBK
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAg
ICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgIkV2YWwgaXMgZGlzYWJs
ZWQiKSk7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGdsb2JhbERhdGEtPnBhcnNl
ci0+cGFyc2U8RXZhbE5vZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QtPmRlYnVnZ2VyKCksIGV4ZWMsIG1fc291cmNlLCAwLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFy
c2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RXZhbE5v
ZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxP
YmplY3QsIG1fc291cmNlLCAwLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1Bh
cnNlTm9ybWFsLCBFdmFsTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2Rl
IDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBl
eGVjLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWV2YWxOb2RlKSB7CiAgICAgICAgIEFTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMjYwLDcgKzI2MCw3IEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3Jh
bU5vZGUgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCBtX3NvdXJj
ZSwgMCwgSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2Rl
PiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVu
Y3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4
aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KHByb2dyYW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoZXhjZXB0aW9uKTsK
QEAgLTI4Niw3ICsyODYsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8
UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxQcm9n
cmFtTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdn
ZXIoKSwgZXhlYywgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6
IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJv
Z3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFy
c2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNv
ZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCks
IGV4ZWMsICZleGNlcHRpb24pOwogICAgIGlmICghcHJvZ3JhbU5vZGUpIHsKICAgICAgICAgQVNT
RVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CkBAIC00MjksNyArNDI5
LDggQEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIGV4Y2Vw
dGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUt
Pmdsb2JhbERhdGE7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hh
aW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2Jh
bE9iamVjdCwgMCwgMCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2Rl
KCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CisgICAgUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3Ry
aWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEZ1bmN0aW9uQm9keU5v
ZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFt
Q29kZSwgMCwgMCwgJmV4Y2VwdGlvbik7CisKICAgICBpZiAoIWJvZHkpIHsKICAgICAgICAgQVNT
RVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ0LDcgKzY0NSw3
IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiBGdW5jdGlvbkV4ZWN1
dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmll
ciYgZnVuY3Rpb25OYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKIHsKICAgICBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBleGVjLT5nbG9iYWxEYXRh
KCkucGFyc2VyLT5wYXJzZTxQcm9ncmFtTm9kZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVidWdn
ZXIsIGV4ZWMsIHNvdXJjZSwgMCwgSlNQYXJzZU5vcm1hbCwgZXhjZXB0aW9uKTsKKyAgICBSZWZQ
dHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc291cmNlLCAwLCBKU1BhcnNlTm9ybWFsLCBQ
cm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJz
ZVByb2dyYW1Db2RlLCBkZWJ1Z2dlciwgZXhlYywgZXhjZXB0aW9uKTsKICAgICBpZiAoIXByb2dy
YW0pIHsKICAgICAgICAgQVNTRVJUKCpleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
cmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiTGV4
ZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgotI2luY2x1ZGUg
IlBhcnNlci5oIgorI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQogI2luY2x1ZGUgIlJlZ0V4cC5oIgogI2VuZGlmCkBAIC0xODIsOCArMTgyLDggQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCiAgICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCi0gICAgLCBs
ZXhlcihuZXcgTGV4ZXIodGhpcykpCi0gICAgLCBwYXJzZXIobmV3IFBhcnNlcikKKyAgICAsIHBh
cnNlckFyZW5hKG5ldyBQYXJzZXJBcmVuYSkKKyAgICAsIGtleXdvcmRzKG5ldyBLZXl3b3Jkcyh0
aGlzKSkKICAgICAsIGludGVycHJldGVyKDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQog
I2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM4LDkgKzMzOCw2IEBAIEpTR2xvYmFsRGF0YTo6fkpT
R2xvYmFsRGF0YSgpCiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHN0cmlu
Z1RhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHN0cmluZ0Nv
bnN0cnVjdG9yVGFibGUpKTsKIAotICAgIGRlbGV0ZSBwYXJzZXI7Ci0gICAgZGVsZXRlIGxleGVy
OwotCiAgICAgZGVsZXRlQWxsVmFsdWVzKG9wYXF1ZUpTQ2xhc3NEYXRhKTsKIAogICAgIGRlbGV0
ZSBlbXB0eUxpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkocmV2aXNpb24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9i
amVjdDsKICAgICBjbGFzcyBKU09iamVjdDsKLSAgICBjbGFzcyBMZXhlcjsKKyAgICBjbGFzcyBL
ZXl3b3JkczsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIFBhcnNlcjsK
KyAgICBjbGFzcyBQYXJzZXJBcmVuYTsKICAgICBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICBjbGFz
cyBTdHJpbmdpZmllcjsKICAgICBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC0yMTksOCArMjE5LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgOiB3dGZUaHJlYWREYXRhKCkuc3RhY2so
KTsKICAgICAgICAgfQogCi0gICAgICAgIExleGVyKiBsZXhlcjsKLSAgICAgICAgUGFyc2VyKiBw
YXJzZXI7CisgICAgICAgIFBhcnNlckFyZW5hKiBwYXJzZXJBcmVuYTsKKyAgICAgICAgS2V5d29y
ZHMqIGtleXdvcmRzOwogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNp
b24gOTg3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIExpdGVyYWxQYXJzZXI6
OnRyeUpTT05QUGFyc2UoVmVjdG9yCiAgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUg
PSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAg
ICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfQotICAgICAgICBpZiAobV9l
eGVjLT5nbG9iYWxEYXRhKCkubGV4ZXItPmlzS2V5d29yZChlbnRyeS5tX3BhdGhFbnRyeU5hbWUp
KQorICAgICAgICBpZiAobV9leGVjLT5nbG9iYWxEYXRhKCkua2V5d29yZHMtPmlzS2V5d29yZChl
bnRyeS5tX3BhdGhFbnRyeU5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBUb2tlblR5cGUgdG9rZW5UeXBlID0gbV9sZXhlci5uZXh0KCk7CiAgICAgICAgIHdoaWxlICh0
b2tlblR5cGUgIT0gVG9rQXNzaWduKSB7Cg==
</data>
<flag name="review"
          id="111146"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>