<?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>121056</bug_id>
          
          <creation_ts>2013-09-09 15:54:21 -0700</creation_ts>
          <short_desc>Add local to/from operand helpers similar to argument to/from operand</short_desc>
          <delta_ts>2013-09-10 17:55:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>118758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>926967</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-09 15:54:21 -0700</bug_when>
    <thetext>This is in preparation to invert the JSC stack.  Currently local virtual registers are positive.  When the stack is inverted they will be &lt;= 0.  In many cases the code assumes that locals are positive.  A common pattern is to use an array index also as a virtual register operand.  Through the use of helpers that map local variable to/from operand these assumptions can be broken.  This should be patterns after the existing localToArgument helpers in Operands.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926997</commentid>
    <comment_count>1</comment_count>
      <attachid>211119</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-09 16:55:19 -0700</bug_when>
    <thetext>Created attachment 211119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927011</commentid>
    <comment_count>2</comment_count>
      <attachid>211119</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-09 17:22:02 -0700</bug_when>
    <thetext>Comment on attachment 211119
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        registers in intended instead of the actual virtual register offset.  When the stack is

&quot;in&quot; should be &quot;is&quot;.

&quot;a index&quot; should be &quot;an index&quot;.

I think you mean &quot;index into a data structure&quot;, or something like that. &quot;index to the local registers&quot; implies some kind of memory offset in a register bank, which the opposite of what you&apos;re doing.

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        * bytecode/CodeBlock.cpp:
&gt; +        (JSC::CodeBlock::registerName):
&gt; +        * bytecode/CodeBlock.h:
&gt; +        (JSC::CodeBlock::isCaptured):

Giant empty list not so helpful.

&gt; Source/JavaScriptCore/dfg/DFGScoreBoard.h:92
&gt; +            return (VirtualRegister)localToOperand(index);

I see this cast a lot. Why doesn&apos;t localToOperand return the VirtualRegister type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927128</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-09 22:36:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 211119 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211119&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        registers in intended instead of the actual virtual register offset.  When the stack is
&gt; 
&gt; &quot;in&quot; should be &quot;is&quot;.
&gt; 
&gt; &quot;a index&quot; should be &quot;an index&quot;.
&gt; 
&gt; I think you mean &quot;index into a data structure&quot;, or something like that. &quot;index to the local registers&quot; implies some kind of memory offset in a register bank, which the opposite of what you&apos;re doing.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:18
&gt; &gt; +        * bytecode/CodeBlock.cpp:
&gt; &gt; +        (JSC::CodeBlock::registerName):
&gt; &gt; +        * bytecode/CodeBlock.h:
&gt; &gt; +        (JSC::CodeBlock::isCaptured):
&gt; 
&gt; Giant empty list not so helpful.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGScoreBoard.h:92
&gt; &gt; +            return (VirtualRegister)localToOperand(index);
&gt; 
&gt; I see this cast a lot. Why doesn&apos;t localToOperand return the VirtualRegister type?

I made the suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927129</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-09 22:38:58 -0700</bug_when>
    <thetext>Committed r155415: &lt;http://trac.webkit.org/changeset/155415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927604</commentid>
    <comment_count>5</comment_count>
      <attachid>211119</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-10 17:55:50 -0700</bug_when>
    <thetext>Comment on attachment 211119
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGScoreBoard.h:92
&gt;&gt; +            return (VirtualRegister)localToOperand(index);
&gt; 
&gt; I see this cast a lot. Why doesn&apos;t localToOperand return the VirtualRegister type?

It turns out that compilers don&apos;t treat the implicit enum to int correctly where a negative enum is used directly for an array index.  In that case it is treated as an unsigned.  I think it is better for us to cast an int result from localToOperand() to VirtualRegister than having to remember to cast an enum result to an (signed) int. The compiler flags an error when an int is used where an enum is needed, but silently does the wrong thing if an enum is used where an int is needed.  Besides, there are many other places where we use c-style casts to VirtualRegister.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211119</attachid>
            <date>2013-09-09 16:55:19 -0700</date>
            <delta_ts>2013-09-10 17:55:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>121056.patch</filename>
            <type>text/plain</type>
            <size>61233</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxMy0wOS0wOSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgbG9jYWwgdG8vZnJvbSBvcGVyYW5kIGhlbHBlcnMgc2ltaWxhciB0byBhcmd1bWVu
dCB0by9mcm9tIG9wZXJhbmQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjEwNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBsb2NhbFRvT3BlcmFuZCgpLCBvcGVyYW5kVG9Mb2NhbCgpIGFuZCBv
cGVyYW5kSXNMb2NhbCgpIHRvIE9wZXJhbmRzLmgsIHZlcnkgc2ltaWxhciB0bworICAgICAgICBh
cmd1bWVudFRvT3BlcmFuZCgpLCBldCBhbC4gIFVzZWQgdGhlIG5ldyBoZWxwZXJzIGV2ZXJ5d2hl
cmUgd2hlcmUgYSAiaW5kZXgiIHRvIHRoZSBsb2NhbAorICAgICAgICByZWdpc3RlcnMgaW4gaW50
ZW5kZWQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHZpcnR1YWwgcmVnaXN0ZXIgb2Zmc2V0LiAgV2hl
biB0aGUgc3RhY2sgaXMKKyAgICAgICAgY2hhbmdlZCB0byBncm93IGRvd24sIGxvY2FsIHJlZ2lz
dGVyIG9mZnNldHMgY2FuIGJlIG5lZ2F0aXZlLiAgQWxzbyBhZGRlZCB0aGUgaGVscGVyCisgICAg
ICAgIERGRzo6U3BlY3VsYXRpdmVKSVQ6OmdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rl
cigpIGZvciB0aGUgY29tbW9uIGNhc2UgYWNjZXNzaW5nIAorICAgICAgICBtX2dlbmVyYXRpb25J
bmZvW29wZXJhbmRUb0xvY2FsKHZhbCldLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ2FwdHVy
ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6OmxvY2Fs
VG9PcGVyYW5kKToKKyAgICAgICAgKEpTQzo6b3BlcmFuZElzTG9jYWwpOgorICAgICAgICAoSlND
OjpvcGVyYW5kVG9Mb2NhbCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6c2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXgp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0VGltZSk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6
CisgICAgICAgIChKU0M6OkRGRzo6OjpjbG9iYmVyQ2FwdHVyZWRWYXJzKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQ
aGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhy
ZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1Njb3JlQm9hcmQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U2NvcmVCb2FyZDo6dXNlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYW5SZXVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNG
aWxsZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ZpbGxlZERvdWJs
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6aW50ZWdlclJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNlbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpi
b29sZWFuUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6anNWYWx1
ZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnN0b3JhZ2VSZXN1
bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkb3VibGVSZXN1bHQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppbml0Q29uc3RhbnRJbmZvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNJbnRlZ2VyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Z2VuZXJhdGlvbkluZm9Gcm9tVmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxp
ZGF0ZUNQUyk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAg
ICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisKIDIwMTMtMDktMDkgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgV3JvbmcgZm9yIFNsb3dQYXRo
Q2FsbCB0byBsb2FkIGNhbGxGcmFtZSByZWcgZnJvbSB2bS50b3BDYWxsRnJhbWUgYWZ0ZXIgY2Fs
bApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgQ1N0cmluZyBDb2Rl
QmxvY2s6OnJlZ2lzdGVyTmFtZShpbnQgcikgYwogICAgICAgICByZXR1cm4gdG9DU3RyaW5nKCJh
cmciLCBvcGVyYW5kVG9Bcmd1bWVudChyKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRvQ1N0cmlu
ZygibG9jIiwgcik7CisgICAgcmV0dXJuIHRvQ1N0cmluZygibG9jIiwgb3BlcmFuZFRvTG9jYWwo
cikpOwogfQogCiBzdGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJl
Z0V4cCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSAmJiB1c2VzQXJndW1lbnRz
KCk7CiAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBp
bmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5nZXQob3BlcmFuZCk7CisgICAgICAgICAgICBy
ZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuZ2V0KG9wZXJhbmRUb0xvY2FsKG9w
ZXJhbmQpKTsKIAogICAgICAgICAvLyBUaGUgYWN0aXZhdGlvbiBvYmplY3QgaXNuJ3QgaW4gdGhl
IGNhcHR1cmVkIHJlZ2lvbiwgYnV0IGl0J3MgImNhcHR1cmVkIgogICAgICAgICAvLyBpbiB0aGUg
c2Vuc2UgdGhhdCBzdG9yZXMgdG8gaXRzIGxvY2F0aW9uIGNhbiBiZSBvYnNlcnZlZCBpbmRpcmVj
dGx5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJl
dmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAoraW5saW5lIGludCBsb2NhbFRvT3BlcmFuZChpbnQgbG9jYWwpIHsgcmV0dXJuIGxvY2FsOyB9
CitpbmxpbmUgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFu
ZCA+PSAwOyB9CitpbmxpbmUgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVy
biBvcGVyYW5kOyB9CisKIC8vIGFyZ3VtZW50IDAgaXMgJ3RoaXMnLgogaW5saW5lIGJvb2wgb3Bl
cmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CiBpbmxp
bmUgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiAtb3BlcmFuZCAr
IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KQEAgLTE0Myw3ICsxNDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9sb2NhbHNbb3BlcmFuZF07CisgICAgICAg
IHJldHVybiBtX2xvY2Fsc1tvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKV07CiAgICAgfQogICAgIAog
ICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KSk7IH0KQEAgLTE1Miw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZCkgPCBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kVG9Mb2NhbChvcGVy
YW5kKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldE9wZXJh
bmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQpAQCAtMTYzLDcgKzE2Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2V0
TG9jYWwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBzZXRMb2NhbChvcGVyYW5kVG9Mb2NhbChv
cGVyYW5kKSwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOyB9CkBAIC0xOTYs
NyArMjAwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudFRvT3BlcmFuZChpbmRleCk7
Ci0gICAgICAgIHJldHVybiBpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJl
dHVybiBsb2NhbFRvT3BlcmFuZChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQpAQCAtMjA2LDcgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwg
dmFsdWUpOworICAgICAgICBzZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kVG9Mb2NhbChvcGVyYW5k
KSwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDE0ICs0
OTgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJG
b3IoaW50IGluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jYWxsZWVSZWdpc3RlcnNbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKG9wZXJhbmRJc0xvY2FsKGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9j
YWxsZWVSZWdpc3RlcnNbb3BlcmFuZFRvTG9jYWwoaW5kZXgpXTsKIAogICAgICAgICAgICAgaWYg
KGluZGV4ID09IEpTU3RhY2s6OkNhbGxlZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWxs
ZWVSZWdpc3RlcjsKIAogICAgICAgICAgICAgQVNTRVJUKG1fcGFyYW1ldGVycy5zaXplKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fcGFyYW1ldGVyc1tpbmRleCArIG1fcGFyYW1ldGVycy5zaXpl
KCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplXTsKKyAgICAgICAgICAgIHJldHVybiBt
X3BhcmFtZXRlcnNbb3BlcmFuZFRvQXJndW1lbnQoaW5kZXgpXTsKICAgICAgICAgfQogCiAgICAg
ICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDcgKzE1NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOwogICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPnVubGlua2VkTG9j
YWwoKSkKLSAgICAgICAgICAgICYmIG1fZ3JhcGgubV9sYXp5VmFycy5nZXQobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSkgeworICAgICAgICAgICAgJiYgbV9ncmFwaC5tX2xhenlWYXJzLmdldChvcGVy
YW5kVG9Mb2NhbChub2RlLT51bmxpbmtlZExvY2FsKCkpKSkgewogICAgICAgICAgICAgLy8gVGhp
cyBpcyBraW5kIG9mIHBlc3NpbWlzdGljIC0gd2UgY291bGQga25vdyBpbiBzb21lIGNhc2VzIHRo
YXQgdGhlCiAgICAgICAgICAgICAvLyBERkcgY29kZSBhdCB0aGUgcG9pbnQgb2YgdGhlIE9TUiBo
YWQgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgbGF6eQogICAgICAgICAgICAgLy8gdmFyaWFibGUu
IEJ1dCBtYXliZSB0aGlzIGlzIGZpbmUsIHNpbmNlIHdlJ3JlIGluc2VydGluZyBPU1IKQEAgLTE1
OTgsNyArMTU5OCw3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2NvZGVC
bG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q2FwdHVyZWQoaSkpCisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9j
YWxUb09wZXJhbmQoaSkpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9j
YWwoaSkubWFrZVRvcCgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NTM5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDggQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIGluIGlt
cGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2
YXJpYWJsZS4KICAgICBOb2RlKiBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZFRvTG9jYWwob3BlcmFu
ZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlz
Q2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKICAgICAgICAg
Ly8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBk
YXRhcywgYW5kIDIpCkBAIC0yODcsMTYgKzI4OCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fcHJl
c2VydmVkVmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0
KGxvY2FsKTsKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBub2RlID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCkgPSBub2RlOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAg
ICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNl
dE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJh
bmRUb0xvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9j
ay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKQEAgLTMxMSw3ICszMTMsNyBAQCBwcml2
YXRlOgogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5n
RmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUq
IG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwg
dmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID0gbm9kZTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChsb2NhbCkgPSBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5n
IGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4KQEAgLTQz
MSw3ICs0MzMsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmICghb3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQp
OworICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kVG9Mb2NhbChvcGVyYW5k
KSk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKQEAgLTQ1OSw5ICs0NjEsOSBA
QCBwcml2YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJndW1lbnRz
OyBhcmd1bWVudC0tID4gMTspCiAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CiAgICAgICAg
IGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9j
ay0+bV9udW1WYXJzOyArK2xvY2FsKSB7Ci0gICAgICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50
cnktPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsKSkKKyAgICAgICAgICAgIGlmICghaW5s
aW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWxUb09wZXJhbmQobG9j
YWwpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZsdXNoRGlyZWN0
KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChsb2NhbCkpOworICAgICAgICAgICAgZmx1
c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKGxvY2FsVG9PcGVyYW5kKGxv
Y2FsKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjgwLDExICsxMjgyLDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBpbnQgaW5saW5lQ2FsbEZy
YW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVnaXN0ZXJPZmZzZXQp
IC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBjYWxsIGZyYW1lIGlzIHJlc2VydmVkLgotICAgIGZv
ciAoaW50IGFyZyA9IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1WYXJzOyBhcmctLSA+IGlubGluZUNhbGxGcmFtZVN0
YXJ0OykKKyAgICBmb3IgKGludCBhcmcgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWVT
dGFydCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bVZh
cnM7IGFyZy0tID4gb3BlcmFuZFRvTG9jYWwoaW5saW5lQ2FsbEZyYW1lU3RhcnQpOykKICAgICAg
ICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChhcmcpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KLSAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMgPSBpbmxp
bmVDYWxsRnJhbWVTdGFydCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIHVuc2lnbmVkIG5ld051bUxvY2FscyA9IG9w
ZXJhbmRUb0xvY2FsKGlubGluZUNhbGxGcmFtZVN0YXJ0KSArIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdO
dW1Mb2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxv
Y2FsczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2kpCkBAIC0xODg0LDcgKzE4ODYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgICAgICAgICAvLyBJbml0
aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCi0g
ICAgICAgICAgICAgICAgc2V0KGksIGNvbnN0YW50VW5kZWZpbmVkKCksIFNldE9uRW50cnkpOwor
ICAgICAgICAgICAgICAgIHNldChsb2NhbFRvT3BlcmFuZChpKSwgY29uc3RhbnRVbmRlZmluZWQo
KSwgU2V0T25FbnRyeSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAKICAg
ICAgICAgY2FzZSBvcF90b190aGlzOiB7CkBAIC0zMTUxLDggKzMxNTMsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOwotICAgICAg
ICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7Ci0gICAg
ICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQo
b3BlcmFuZFRvTG9jYWwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMzM4MSwxOCArMzM4MywxOSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lCiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FwdHVyZWRWYXJzID0g
aW5saW5lQ2FsbEZyYW1lLmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZUNv
ZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGkpKQorICAgICAgICAgICAgICAgIGlm
IChieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWxUb09wZXJhbmQo
aSkpKQogICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FwdHVyZWRWYXJzLnNl
dChpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgaS0tOykgewogICAgICAgICAgICAgaWYgKGNvZGVC
bG9jay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLmNhcHR1cmVkVmFycy5zZXQoYXJndW1lbnRUb09wZXJhbmQoaSkgKyBp
bmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS5jYXB0dXJlZFZhcnMuc2V0KG9wZXJhbmRUb0xvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkp
ICsgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgIH0KICAgICAgICAgZm9y
IChzaXplX3QgaSA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBp
ZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGkpKQotICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS5jYXB0dXJlZFZhcnMuc2V0KGkgKyBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQpOwor
ICAgICAgICAgICAgaW50IGxvY2FsT3BlcmFuZCA9IGxvY2FsVG9PcGVyYW5kKGkpOworICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChsb2NhbE9wZXJhbmQpKQorICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS5jYXB0dXJlZFZhcnMuc2V0KG9wZXJhbmRUb0xvY2FsKGxv
Y2FsT3BlcmFuZCArIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCkpOwogICAgICAgICB9CiAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBwcml2YXRl
OgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVy
YW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1
bWVudFRvT3BlcmFuZChpKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlz
b25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAg
ICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNv
ZGVPcmlnaW4sIGkpOworICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgamV0dGlz
b25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGxvY2FsVG9PcGVyYW5kKGkpKTsKICAgICAg
ICAgCiAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2ssIGpldHRpc29uZWRC
bG9jayk7CiAgICAgfQpAQCAtMzgyLDcgKzM4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZl
KGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVu
dFRvT3BlcmFuZChpKSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRp
c29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAg
ICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywg
Ym91bmRhcnlDb2RlT3JpZ2luLCBpKTsKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZl
KGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBsb2NhbFRv
T3BlcmFuZChpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRl
OgogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5kPihub2RlLCB2
YXJpYWJsZSwgb3BlcmFuZFRvQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgY2Fub25pY2Fs
aXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3BlcmFuZFRvTG9j
YWwodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxp
emVTZXRMb2NhbChOb2RlKiBub2RlKQpAQCAtMjg4LDcgKzI4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkpCiAgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Bcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwo
KSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Mb2Nh
bCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6
ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwyMSArMTM5LDIx
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBm
b3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVt
YmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICBpZiAoZW50cnktPm1fbG9jYWxzRm9y
Y2VkRG91YmxlLmdldChsb2NhbCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+cmVnaXN0ZXJz
KClbbG9jYWxdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoIWV4ZWMt
PnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2NhbCwgIiBpcyAiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQg
bnVtYmVyLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSB2YXJpYWJsZSAiLCBsb2NhbFRvT3BlcmFuZChsb2NhbCksICIgaXMgIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0u
anNWYWx1ZSgpLCAiLCBleHBlY3RlZCBudW1iZXIuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxv
Y2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpKSkg
eworICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS52YWxp
ZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSkp
IHsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB2YXJpYWJsZSAiLCBsb2NhbCwgIiBpcyAiLAotICAgICAgICAgICAgICAgICAgICBleGVjLT5y
ZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAgICAgICAgICAg
ICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2NhbFRvT3BlcmFu
ZChsb2NhbCksICIgaXMgIiwKKyAgICAgICAgICAgICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClb
bG9jYWxUb09wZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkICIsCiAgICAgICAg
ICAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzksNyArMTc5LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vIDMpIFBl
cmZvcm0gZGF0YSBmb3JtYXQgY29udmVyc2lvbnMuCiAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAw
OyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9j
YWwpIHsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5nZXQobG9jYWwp
KQotICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxkb3VibGUqPihleGVjLT5yZWdpc3RlcnMoKSAr
IGxvY2FsKSA9IGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuYXNOdW1iZXIoKTsK
KyAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oZXhlYy0+cmVnaXN0ZXJzKCkgKyBs
b2NhbFRvT3BlcmFuZChsb2NhbCkpID0gZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxUb09wZXJhbmQo
bG9jYWwpXS5qc1ZhbHVlKCkuYXNOdW1iZXIoKTsKICAgICB9CiAgICAgCiAgICAgLy8gNCkgRml4
IHRoZSBjYWxsIGZyYW1lLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE1NTM5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTksOSArMTk5LDkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazogewogICAgICAgICAgICAgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICBBU1NFUlQoKGludCly
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChvcGVy
YW5kSXNMb2NhbChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1
YWwgcmVnaXN0ZXIgYmVmb3JlIGRvaW5nCiAgICAgICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVy
IHNodWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCkBAIC0y
MTAsMTYgKzIxMCwxNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3Rl
IHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQogICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28g
dGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCiAgICAgICAg
ICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCkpIHsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2FsKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgaW50IGxvY2FsID0gb3BlcmFu
ZFRvTG9jYWwocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgaWYgKGxv
Y2FsIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChvcGVyYW5kcy5sb2NhbChsb2NhbCkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIEluR1BSOgogICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6
CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgogICAgICAgICAgICAg
ICAgIGNhc2UgVUludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBJblBhaXI6CiAgICAg
ICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbbG9jYWxdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbbG9jYWxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjgsNyArMjI5LDggQEAgdm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIGhhdmVVSW50MzJz
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQzLDcgKzU0NSw3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIGNhc2UgVW5ib3hl
ZEludDMySW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKICAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRj
aERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZzsKICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
PT0gSW5HUFIpCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CkBA
IC01NTEsNyArNTUzLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgICAgICAgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5U
YWc7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMih0YWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZp
cnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIodGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1
YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTU2MCw4ICs1NjIsOCBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBjYXNlIFVJbnQz
MkluR1BSOgogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNo
YXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlcikpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwg
R1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJl
dF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdp
c3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
dmlydHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZv
OjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFs
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihH
UFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcils
b2NhbFRvT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlz
aW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsOSArMTgwLDkgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAg
ICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIERpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAg
ICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAgQVNT
RVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICBB
U1NFUlQob3BlcmFuZElzTG9jYWwocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUgdG8g
dGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwogICAgICAgICAgICAgLy8gdmlydHVh
bCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCByZWdp
c3RlcgpAQCAtMTkxLDE0ICsxOTEsMTUgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2ll
bnRseS4gTm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKICAgICAgICAgICAgIC8vIHRvIGJl
IHJhcmUsIHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBp
bgogICAgICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgotICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxv
Y2FscygpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChvcGVyYW5kcy5sb2NhbChyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGludCBsb2Nh
bCA9IG9wZXJhbmRUb0xvY2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIGlmIChsb2NhbCA8IChpbnQpb3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAob3BlcmFuZHMubG9jYWwobG9jYWwpLnRlY2huaXF1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgogICAgICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6CiAgICAgICAgICAg
ICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbbG9jYWxdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbbG9jYWxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJl
ck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDcsNyArMjA4LDcgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAg
ICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNT
dGFja0FzVW5ib3hlZEludDMyOgogICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVl
OwpAQCAtNTMwLDcgKzUzMSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6CiAgICAgICAgICAgICBjYXNlIElu
RlBSOgogICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoRGF0YUJ1ZmZlciArIHBv
aXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHJl
dmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyNSArODksMjUgQEAgcHVibGljOgogICAgICAgICAg
ICAgLy8gVXNlIGNvdW50IG11c3QgaGF2ZSBoaXQgemVybyBmb3IgaXQgdG8gaGF2ZSBiZWVuIGFk
ZGVkIHRvIHRoZSBmcmVlIGxpc3QhCiAgICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpbmRleF0p
OwogICAgICAgICAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0ZXJtYXJr
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpICsgMSk7Ci0gICAgICAgICAgICByZXR1cm4g
KFZpcnR1YWxSZWdpc3RlcilpbmRleDsKKyAgICAgICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lz
dGVyKWxvY2FsVG9PcGVyYW5kKGluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9j
YXRlIGEgbmV3IFZpcnR1YWxSZWdpc3RlciwgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgZW50cnkg
dG8gbV91c2VkLgogICAgICAgICBzaXplX3QgbmV4dCA9IG1fdXNlZC5zaXplKCk7CiAgICAgICAg
IG1fdXNlZC5hcHBlbmQoMCk7CiAgICAgICAgIG1faGlnaFdhdGVybWFyayA9IHN0ZDo6bWF4KG1f
aGlnaFdhdGVybWFyaywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5leHQpICsgMSk7Ci0gICAgICAg
IHJldHVybiAoVmlydHVhbFJlZ2lzdGVyKW5leHQ7CisgICAgICAgIHJldHVybiAoVmlydHVhbFJl
Z2lzdGVyKWxvY2FsVG9PcGVyYW5kKG5leHQpOwogICAgIH0KIAotICAgIC8vIEluY3JlbWVudCB0
aGUgdXNlY291bnQgZm9yIHRoZSBWaXJ0dWFsUmVnc2l0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGls
ZCcsCi0gICAgLy8gaWYgaXQgcmVhY2hlcyB0aGUgbm9kZSdzIHJlZmNvdW50LCBmcmVlIHRoZSBW
aXJ0dWFsUmVnc2l0ZXIuCisgICAgLy8gSW5jcmVtZW50IHRoZSB1c2Vjb3VudCBmb3IgdGhlIFZp
cnR1YWxSZWdpc3RlciBhc3NvY2lhdGVkIHdpdGggJ2NoaWxkJywKKyAgICAvLyBpZiBpdCByZWFj
aGVzIHRoZSBub2RlJ3MgcmVmY291bnQsIGZyZWUgdGhlIFZpcnR1YWxSZWdpc3Rlci4KICAgICB2
b2lkIHVzZShOb2RlKiBjaGlsZCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgLy8gRmluZCB0aGUgdmlydHVhbCByZWdpc3RlciBudW1i
ZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVudCBpdHMgdXNlIGNvdW50LgotICAgICAgICB1aW50
MzJfdCBpbmRleCA9IGNoaWxkLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdWludDMyX3Qg
aW5kZXggPSBvcGVyYW5kVG9Mb2NhbChjaGlsZC0+dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAg
ICBBU1NFUlQobV91c2VkW2luZGV4XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChjaGlsZC0+cmVm
Q291bnQoKSA9PSArK21fdXNlZFtpbmRleF0pIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdl
cihFZGdlIAogICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSk7CiAg
ICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxS
ZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICBpZiAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAgICAgICAgIEdQUlJlZyBncHIg
PSBhbGxvY2F0ZSgpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKEVkZ2UgZWQKICAgICBVTlVTRURfUEFSQU0oZnByKTsKIAogICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
KyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CkBAIC04NjUsNyArODY1LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIEFTU0VSVChlZGdlLnVz
ZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNJbnQzMikp
OwogICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjSW50MzIpOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CkBAIC05NjYsNyArOTY2LDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIEFTU0VSVChlZGdl
LnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjTnVt
YmVyKSk7CiAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNOdW1iZXIpOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogCkBAIC0xMTAzLDcgKzExMDMsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgQVNTRVJUKChlZGdlLnVz
ZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UgJiYgZWRnZS51c2VLaW5kKCkgIT0gS25vd25TdHJpbmdV
c2UpIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7CiAgICAgbV9pbnRlcnByZXRlci5m
aWx0ZXIodmFsdWUsIFNwZWNDZWxsKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Tm9uZTogewpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5
cGU7CiAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7
Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0
dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewpAQCAtMjAwMiw3ICsyMDAy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2NhbCgp
KSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIG1fZnBycy5yZXRh
aW4ocmVzdWx0LmZwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAg
ICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXREb3VibGUobm9k
ZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpLmluaXREb3VibGUobm9k
ZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjAxNCw3ICsyMDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJl
c2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZsb3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4K
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgICAgIG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SW50ZWdlcihub2RlLCBub2RlLT5yZWZDb3Vu
dCgpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVh
bFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikuaW5pdEludGVnZXIobm9kZSwgbm9kZS0+cmVmQ291
bnQoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMjAyNiw3ICsyMDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0
aGluIHRoaXMgZGF0YWZsb3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDZWxsKTsKLSAgICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXS5pbml0Q2VsbChub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlcikuaW5pdENlbGwobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjAzOCw3ICsyMDM4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
Ly8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZsb3cgd2l0aCB2
aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFuKTsKLSAg
ICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0Qm9vbGVhbihu
b2RlLCBub2RlLT5yZWZDb3VudCgpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgZ2VuZXJh
dGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikuaW5pdEJvb2xlYW4o
bm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTIwNTMsNyArMjA1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCks
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0
YWcuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKIAotICAgICAgICBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVm
Q291bnQoKSwgdGFnLmdwcigpLCByZXN1bHQuZ3ByKCksIERhdGFGb3JtYXRKUyk7CisgICAgICAg
IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpLmluaXRK
U1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHRhZy5ncHIoKSwgcmVzdWx0LmdwcigpLCBE
YXRhRm9ybWF0SlMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEwMSw3
ICsyMTAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVu
dEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdGlvbkluZm9bbm9k
ZS0+Y2hpbGQxKCktPnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpID09IERhdGFG
b3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFs
UmVnaXN0ZXIobm9kZS0+Y2hpbGQxKCktPnZpcnR1YWxSZWdpc3RlcigpKS5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihFZGdlIAog
ICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSk7CiAgICAgCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3Rlcigp
OwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmly
dHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIoRWRnZSAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlKQog
ewogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIAogICAgIHN3aXRjaCAo
aW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewpAQCAt
ODI1LDcgKzgyNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkK
ICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZhbHVlLm1f
dHlwZSAmIH5TcGVjSW50MzIpKTsKICAgICBtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3Bl
Y0ludDMyKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmly
dHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0
aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAgIHN3aXRj
aCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewpA
QCAtOTc1LDcgKzk3NSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1
ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwogICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVl
LCBTcGVjTnVtYmVyKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRn
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBn
ZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAg
IGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAg
aWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKQEAgLTExMzIsNyArMTEzMiw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBBU1NFUlQoKGVkZ2UudXNlS2lu
ZCgpICE9IEtub3duQ2VsbFVzZSAmJiBlZGdlLnVzZUtpbmQoKSAhPSBLbm93blN0cmluZ1VzZSkg
fHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKICAgICBtX2ludGVycHJldGVyLmZpbHRl
cih2YWx1ZSwgU3BlY0NlbGwpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwog
CiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3Jt
YXROb25lOiB7CkBAIC0xMjE0LDcgKzEyMTQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCb29sCiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsK
ICAgICBtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0Jvb2xlYW4pOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CkBAIC0xOTY5LDcgKzE5NjksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxvY2FsKCkpLCBy
ZXN1bHQuZnByKCkpOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihy
ZXN1bHQuZnByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAg
ICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdERvdWJsZShub2RlLCBu
b2RlLT5yZWZDb3VudCgpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikuaW5pdERvdWJsZShub2RlLCBu
b2RlLT5yZWZDb3VudCgpLCByZXN1bHQuZnByKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xOTgxLDcgKzE5ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50
IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICAgICAgbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRJbnRlZ2VyKG5vZGUsIG5vZGUtPnJlZkNvdW50KCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKS5pbml0SW50ZWdlcihub2RlLCBub2RlLT5yZWZDb3VudCgp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjAw
MSw3ICsyMDAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7CiAKLSAgICAg
ICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG5vZGUsIG5v
ZGUtPnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKKyAgICAgICAgZ2VuZXJhdGlv
bkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikuaW5pdEpTVmFsdWUobm9k
ZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmdwcigpLCBmb3JtYXQpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMx
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJhdGlvbkluZm8KIAogU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U2F2ZVBsYW5Gb3JHUFIoVmly
dHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCiB7Ci0gICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOworICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHNwaWxsTWUpOwogICAg
IE5vZGUqIG5vZGUgPSBpbmZvLm5vZGUoKTsKICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0
ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwogICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7CkBAIC00MzYsNyArNDM2LDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxh
biBTcGVjdWxhdGl2ZUpJVDo6cwogICAgIAogU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxh
dGl2ZUpJVDo6c2lsZW50U2F2ZVBsYW5Gb3JGUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEZQ
UlJlZyBzb3VyY2UpCiB7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3NwaWxsTWVdOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9G
cm9tVmlydHVhbFJlZ2lzdGVyKHNwaWxsTWUpOwogICAgIE5vZGUqIG5vZGUgPSBpbmZvLm5vZGUo
KTsKICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
OwogCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9k
ZSogbm9kZQogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShFZGdlIGVkZ2UpCiB7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdp
c3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9G
cm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgCiAgICAgc3dpdGNoIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CkBAIC0x
MDc2LDcgKzEwNzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0NvbnNpc3RlbmN5KCkK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVh
bFJlZ2lzdGVyKWk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdl
bmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBpZiAoIWluZm8uYWxpdmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzd2l0
Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAgICAgICAgIGlmICh2aXJ0dWFsUmVn
aXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby5ncHIoKSkgewogICAgICAgICAgICAg
ZGF0YUxvZ0YoIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9y
IGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0
dWFsUmVnaXN0ZXIpOwpAQCAtMTE1MCw3ICsxMTUwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tDb25zaXN0ZW5jeSgpCiAgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBpZiAoaXRlci5yZWdJRCgpICE9IGluZm8u
ZnByKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFp
bGVkOiBuYW1lIG1pc21hdGNoIGZvciBmcHIgJXMgKHZpcnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwg
aXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgICAgIGZhaWxlZCA9
IHRydWU7CkBAIC0xNTQ4LDcgKzE1NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub3RpY2VP
U1JCaXJ0aChOb2RlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyKTsKICAgICAKICAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwg
bm9kZSwgdmlydHVhbFJlZ2lzdGVyKTsKIH0KQEAgLTE2ODEsNyArMTY4MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgIHZhbHVlU291cmNl
ID0gVmFsdWVTb3VyY2U6OmZvclNwZWN1bGF0aW9uKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpKTsKICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSB2
YWx1ZVNvdXJjZTsKICAgICAgICAgLy8gRklYTUU6IERvbid0IGVtaXQgU2V0TG9jYWwoRGVhZCku
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwMTkKLSAgICAgICAg
bV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChpLCB2YWx1ZVNv
dXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJp
YWJsZUV2ZW50OjpzZXRMb2NhbChsb2NhbFRvT3BlcmFuZChpKSwgdmFsdWVTb3VyY2UuZGF0YUZv
cm1hdCgpKSk7CiAgICAgfQogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpOwpAQCAtMjE3Niw3ICsyMTc2LDcgQEAgR2VuZXJhdGVkT3Bl
cmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogICAgIGRhdGFMb2dGKCJjaGVja0dlbmVyYXRl
ZFR5cGVGb3JUb0ludDMyQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0g
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFs
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZv
cm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKQEAgLTIyOTAsNyArMjI5MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICNlbHNlCiAgICAg
ICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTUzOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5SZXVzZShOb2RlKiBub2RlKQog
ICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgcmV0dXJuIGluZm8uY2FuUmV1c2UoKTsKICAgICB9CiAgICAgYm9vbCBjYW5SZXVzZShF
ZGdlIG5vZGVVc2UpCkBAIC0xODksNyArMTg5LDcgQEAgcHVibGljOgogICAgICAgICBHUFJSZWcg
Z3ByID0gbV9ncHJzLmFsbG9jYXRlKHNwaWxsTWUpOwogICAgICAgICBpZiAoc3BpbGxNZSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKyAg
ICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVh
bFJlZ2lzdGVyKHNwaWxsTWUpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5yZWdp
c3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICBpZiAoKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykpCiAgICAgICAgICAgICAgICAgbV9n
cHJzLnJlbGVhc2UoaW5mby50YWdHUFIoKSA9PSBncHIgPyBpbmZvLnBheWxvYWRHUFIoKSA6IGlu
Zm8udGFnR1BSKCkpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNwaWxsTWUgPSBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhzcGVjaWZpYyk7CiAg
ICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3NwaWxsTWVdOworICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBn
ZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3BpbGxNZSk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTRG91Ymxl
KTsKICAgICAgICAgICAgIGlmICgoaW5mby5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpT
KSkKICAgICAgICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLnRhZ0dQUigpID09IHNwZWNp
ZmljID8gaW5mby5wYXlsb2FkR1BSKCkgOiBpbmZvLnRhZ0dQUigpKTsKQEAgLTIzOSwxMyArMjM5
LDEzIEBAIHB1YmxpYzoKICAgICBib29sIGlzRmlsbGVkKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lz
dGVyKCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICByZXR1
cm4gaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lOwogICAgIH0KICAgICBi
b29sIGlzRmlsbGVkRG91YmxlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1
YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICByZXR1cm4gaW5mby5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGU7CiAgICAgfQogCkBAIC0yNTUsNyArMjU1LDcg
QEAgcHVibGljOgogICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+
dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwog
CiAgICAgICAgIC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRl
YWQsIGFuZCBhbnkKICAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVk
LgpAQCAtNDgzLDcgKzQ4Myw3IEBAIHB1YmxpYzoKICAgICAvLyBTcGlsbCBhIFZpcnR1YWxSZWdp
c3RlciB0byB0aGUgSlNTdGFjay4KICAgICB2b2lkIHNwaWxsKFZpcnR1YWxSZWdpc3RlciBzcGls
bE1lKQogICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3NwaWxsTWVdOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25J
bmZvRnJvbVZpcnR1YWxSZWdpc3RlcihzcGlsbE1lKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIC8v
IGl0IGhhcyBiZWVuIHNwaWxsZWQuIEpTIHZhbHVlcyB3aGljaCBoYXZlIHR3byBHUFJzIGNhbiBy
ZWFjaCBoZXJlCkBAIC03OTYsNyArNzk2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgdXNlQ2hp
bGRyZW4obm9kZSk7CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyKTsKIAogICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAg
ICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0ludDMyKHJlZyk7CkBAIC04MzAsNyArODMwLDcgQEAg
cHVibGljOgogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyKTsKICAgICAgICAgaW5mby5pbml0Q2VsbChub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcp
OwogICAgIH0KICAgICB2b2lkIGJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCkBAIC04NDAsNyArODQwLDcg
QEAgcHVibGljOgogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlLCBub2RlLT5yZWZDb3Vu
dCgpLCByZWcpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODU0LDcgKzg1NCw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9k
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJl
ZywgZm9ybWF0KTsKICAgICB9CiAgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcsIE5v
ZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQpAQCAtODcwLDcgKzg3MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dwcnMucmV0YWluKHRhZywgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVySlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWQsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgdGFn
LCBwYXlsb2FkLCBmb3JtYXQpOwogICAgIH0KICAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVn
IHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQpA
QCAtODg1LDcgKzg4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAg
bV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclN0b3JhZ2UpOwot
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zy
b21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgaW5mby5pbml0U3Rv
cmFnZShub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KICAgICB2b2lkIGRvdWJs
ZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENh
bGxVc2VDaGlsZHJlbikKQEAgLTg5NSwxMyArODk1LDEzIEBAIHB1YmxpYzoKIAogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgICAgIG1fZnBycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJE
b3VibGUpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0
aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgaW5m
by5pbml0RG91YmxlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CiAgICAgfQogICAgIHZv
aWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlz
SW50MzJDb25zdGFudChub2RlKSB8fCBpc051bWJlckNvbnN0YW50KG5vZGUpIHx8IGlzSlNDb25z
dGFudChub2RlKSk7Ci0gICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bbm9kZS0+dmlydHVhbFJlZ2lz
dGVyKCldLmluaXRDb25zdGFudChub2RlLCBub2RlLT5yZWZDb3VudCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpKS5p
bml0Q29uc3RhbnQobm9kZSwgbm9kZS0+cmVmQ291bnQoKSk7CiAgICAgfQogICAgIAogICAgIC8v
IFRoZXNlIG1ldGhvZHMgYWRkIGNhbGxzIHRvIEMrKyBoZWxwZXIgZnVuY3Rpb25zLgpAQCAtMTg4
NSw3ICsxODg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rl
cigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9u
SW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7CiAgICAgfQpAQCAtMjE3MiwxMSArMjE3Miwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVu
dChvcGVyYW5kKTsKICAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVudF07CiAg
ICAgICAgIH0KKworICAgICAgICBpbnQgbG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKTsK
KyAgICAgICAgaWYgKCh1bnNpZ25lZClsb2NhbCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUobG9jYWwgKyAxKTsKICAgICAgICAgCi0gICAgICAg
IGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCi0gICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIG1fdmFyaWFibGVzW29wZXJhbmRdOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbbG9j
YWxdOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKGludCBvcGVyYW5kLCBW
YWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSkKQEAgLTIxODQsNyArMjE4NSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IHZhbHVlU291
cmNlOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExv
Y2FsKG9wZXJhbmQsIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAgIH0KLSAgICAKKwor
ICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dl
bmVyYXRpb25JbmZvW29wZXJhbmRUb0xvY2FsKHZpcnR1YWxSZWdpc3RlcildOworICAgIH0KKwog
ICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rp
b25hbGl0eS4KICAgICBKSVRDb21waWxlciYgbV9qaXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTUzOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
MTEgKzc0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE5CLiBUaGlzIGNvZGUgaXMg
bm90IHdyaXR0ZW4gZm9yIHBlcmZvcm1hbmNlLCBzaW5jZSBpdCBpcyBub3QgaW50ZW5kZWQgdG8g
cnVuCiAgICAgICAgIC8vIGluIHJlbGVhc2UgYnVpbGRzLgotICAgICAgICAKKwogICAgICAgICAv
LyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMgYXQgdGhlIGhlYWQgb2YgdGhlIHJv
b3QgYmxvY2sgYXJlIGRlYWQuCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJs
b2NrKDApOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm9vdC0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDApLCBzdGF0aWNfY2FzdDxOb2RlKj4oMCksIHJv
b3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAgICAgICBWX0VRVUFMKChzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGxvY2FsVG9PcGVyYW5kKGkpKSwgMCksIHN0YXRpY19j
YXN0PE5vZGUqPigwKSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKICAgICAgICAg
CiAgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5kIHVzZXMuCiAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMzI1LDkgKzMyNSw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURB
VEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihsb2NhbFRvT3BlcmFuZChpKSksIGJsb2Nr
KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayks
ICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGxvY2FsVG9P
cGVyYW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9n
cmFwaCkpOwogCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBu
b3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RT
ZXQ7CkBAIC0zOTMsNyArMzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCi0gICAgICAg
ICAgICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMs
IGkpOworICAgICAgICAgICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExv
Y2FsUG9zaXRpb25zLCBsb2NhbFRvT3BlcmFuZChpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKICAgICBpZiAoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Cisg
ICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBvcGVy
YW5kVG9Mb2NhbChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAg
IGVsc2UKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzOwogICAgIApAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgLy8gdGhhdCB0aG9zZSB2YWx1ZXMgZG9uJ3QgaGF2
ZSB0byBiZSByZWNvdmVyZWQuIFNpZ25hbCB0aGlzIGJ5IHVzaW5nIFZhbHVlUmVjb3Zlcnk6OmFs
cmVhZHlJbkpTU3RhY2soKQogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVD
YWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgaS0t
OykKLSAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5zZXRMb2NhbChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IC0gaSAtIDEsIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKSk7
CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMuc2V0TG9jYWwob3BlcmFuZFRvTG9jYWwoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkgLSBpIC0gMSwgVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluSlNTdGFjaygpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxp
bmVDYWxsRnJhbWVDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUmIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVCbG9jaygpLT5pbmxpbmVDYWxsRnJhbWVzKClbaV07CiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKCZpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVxdWly
ZWRDYWxsZWVSZWdpc3RlcnMgPSBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgKyBjb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgICAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRD
YWxsZWVSZWdpc3RlcnMgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZz
ZXQpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgICAgIGlmIChy
ZXF1aXJlZENhbGxlZVJlZ2lzdGVycyA+IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgICAgICAg
ICBjYWxsZWVSZWdpc3RlcnMgPSByZXF1aXJlZENhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NTM5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NTgsNyArNzU4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyYyA9PSBtX2xhc3RS
ZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKKyAgICBpZiAoc3JjID09IG1fbGFzdFJl
c3VsdEJ5dGVjb2RlUmVnaXN0ZXIgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5UmVnaXN0ZXJJ
bmRleChvcGVyYW5kVG9Mb2NhbChzcmMpKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKICAgICAgICAg
Ly8gVGhlIGFyZ3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4CiAgICAgICAg
IGlmIChkc3QgIT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCiAgICAgICAgICAgICBtb3ZlKGNhY2hl
ZFJlc3VsdFJlZ2lzdGVyLCBkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTU1Mzk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk5
LDcgKzEwOTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsg
KytpKQotICAgICAgICBlbWl0U3RvcmUoaSwganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVtaXRT
dG9yZShsb2NhbFRvT3BlcmFuZChpKSwganNVbmRlZmluZWQoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDE1NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzNiw3ICs4MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJ
bnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7CiAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lz
dGVyKGopOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKGxvY2FsVG9PcGVyYW5kKGopKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikK
</data>
<flag name="review"
          id="233170"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>