<?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>153293</bug_id>
          
          <creation_ts>2016-01-20 16:06:18 -0800</creation_ts>
          <short_desc>Current implementation of Parser::createSavePoint is a foot gun</short_desc>
          <delta_ts>2016-03-22 18:33:59 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1157096</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:06:18 -0800</bug_when>
    <thetext>We often create a SavePoint, and restore it, when we really want to do more.
Often we want to save and restore some internal fields and not just lexer state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157099</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-01-20 16:08:46 -0800</bug_when>
    <thetext>SavePoint should be saving everything necessary - I&apos;m not saying it is, i&apos;m saying that the whole point of it is to do that. SavePoint should not be a footgun, it should just be &quot;correct&quot;

The correct solution is probably to put all parser state, and all lever state, into structs so that SavePoint can just do a struct copy and not worry about things going out of sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157105</commentid>
    <comment_count>2</comment_count>
      <attachid>269400</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:29:04 -0800</bug_when>
    <thetext>Created attachment 269400
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157106</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:30:48 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; SavePoint should be saving everything necessary - I&apos;m not saying it is, i&apos;m
&gt; saying that the whole point of it is to do that. SavePoint should not be a
&gt; footgun, it should just be &quot;correct&quot;
I agree. SavePoint should just work. I&apos;ve renamed the old SavePoint
to LexerState and made the new SavePoint LexerState+ParserState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157107</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:33:24 -0800</bug_when>
    <thetext>(In reply to comment #1)

&gt; The correct solution is probably to put all parser state, and all lever
&gt; state, into structs so that SavePoint can just do a struct copy and not
&gt; worry about things going out of sync.
That&apos;s a good idea. I&apos;ll change it so that Parser now owns
a ParserState. It might not be as clean to have LexerState
be this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157113</commentid>
    <comment_count>5</comment_count>
      <attachid>269402</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:46:39 -0800</bug_when>
    <thetext>Created attachment 269402
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157116</commentid>
    <comment_count>6</comment_count>
      <attachid>269403</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-20 16:54:44 -0800</bug_when>
    <thetext>Created attachment 269403
patch

renamed the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157133</commentid>
    <comment_count>7</comment_count>
      <attachid>269403</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-01-20 17:24:12 -0800</bug_when>
    <thetext>Comment on attachment 269403
patch

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

&gt; Source/JavaScriptCore/parser/Parser.h:1302
&gt; +    ALWAYS_INLINE LexerState saveLexerState()

An idea: make this internalSaveLexerState, make it private, make SavePoint a friend of lexer, and have SavePoint have a saveLexerState(Lexer*) function that calls it.

But that&apos;s a somewhat convoluted so maybe not worth it?

&gt; Source/JavaScriptCore/parser/Parser.h:1368
&gt;      const Identifier* m_lastIdentifier;
&gt;      const Identifier* m_lastFunctionName;

We should probably pull all of these into parser state. What&apos;s the rational for not doing so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157399</commentid>
    <comment_count>8</comment_count>
      <attachid>269403</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-21 13:12:53 -0800</bug_when>
    <thetext>Comment on attachment 269403
patch

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

&gt;&gt; Source/JavaScriptCore/parser/Parser.h:1302
&gt;&gt; +    ALWAYS_INLINE LexerState saveLexerState()
&gt; 
&gt; An idea: make this internalSaveLexerState, make it private, make SavePoint a friend of lexer, and have SavePoint have a saveLexerState(Lexer*) function that calls it.
&gt; 
&gt; But that&apos;s a somewhat convoluted so maybe not worth it?

Ok. The reason I did it this way is that there are a few places where we only need to 
save lexer information (i.e, one token lookahead).
That said, I think it&apos;s still somewhat of a footgun to have this. Let me see
what the performance is if we always use SavePoints.

&gt;&gt; Source/JavaScriptCore/parser/Parser.h:1368
&gt;&gt;      const Identifier* m_lastFunctionName;
&gt; 
&gt; We should probably pull all of these into parser state. What&apos;s the rational for not doing so?

I thought about this, and I think for correctness/completeness, we should have it.
We also might want m_statementDepth there, too, even though we sometimes 
manage manually with DepthManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157723</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-22 10:42:56 -0800</bug_when>
    <thetext>It&apos;s perf neutral to always use SavePoints.
Going to do that.
I&apos;m going to rename saveLexerState to internalSaveLexerState, but
I&apos;m going to keep it a Parser method because it consults Parser&apos;s fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157762</commentid>
    <comment_count>10</comment_count>
      <attachid>269594</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-22 11:43:24 -0800</bug_when>
    <thetext>Created attachment 269594
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157848</commentid>
    <comment_count>11</comment_count>
      <attachid>269594</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-22 14:52:52 -0800</bug_when>
    <thetext>Comment on attachment 269594
patch

Clearing flags on attachment: 269594

Committed r195484: &lt;http://trac.webkit.org/changeset/195484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157849</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-22 14:52:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166835</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-02-21 09:57:45 -0800</bug_when>
    <thetext>This regressed Dromaeo CSS selector tests by 2.5%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177252</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-22 18:33:59 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This regressed Dromaeo CSS selector tests by 2.5%.

Writing this for the record.

This patch didn&apos;t actually regress Dromaeo. Our calculations
of performance showed a regression because this patch fixed a 
bug where one Dromaeo test wouldn&apos;t parse. Because it now passes
with this patch, we showed a regression.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269400</attachid>
            <date>2016-01-20 16:29:04 -0800</date>
            <delta_ts>2016-01-20 16:46:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>12489</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTAxLTIwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFBhcnNlcjo6U2F2ZVBvaW50IGlzIGEgZm9vdCBndW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyB1c2Ugb2YgU2F2ZVBvaW50ICh1
cCB1bnRpbCB0aGlzIHBhdGNoKQorICAgICAgICByZWFsbHkgbWVhbnQgdGhhdCB3ZSdyZSBzYXZp
bmcgdGhlIExleGVyU3RhdGUuIFRoaXMKKyAgICAgICAgd2FzIHNvIHBvb3JseSBuYW1lZCB0aGF0
IGl0IHdhcyBiZWluZyBtaXN1c2VkIGFsbCBvdmVyCisgICAgICAgIG91ciBwYXJzZXIuIEZvciBl
eGFtcGxlLCBhbnl0aGluZyB0aGF0IHBhcnNlZCBhbgorICAgICAgICBBc3NpZ25tZW50RXhwcmVz
c2lvbiBiZXR3ZWVuIHNhdmluZy9yZXN0b3JpbmcgcmVhbGx5CisgICAgICAgIHdhbnRlZCB0byBz
YXZlIGJvdGggTGV4ZXIgc3RhdGUgYW5kIFBhcnNlciBzdGF0ZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGNoYW5nZXMgU2F2ZVBvaW50IHRvIG1lYW4gc2F2ZSBhbGwgdGhlCisgICAgICAgIHN0YXRl
LiBUaGUgb2xkIFNhdmVQb2ludCBpcyByZW5hbWVkIHRvIExleGVyU3RhdGUgd2l0aAorICAgICAg
ICBjb3JyZXNwb25kaW5nIDxzYXZlL3Jlc3RvcmU+TGV4ZXJTdGF0ZSBmdW5jdGlvbnMuCisgICAg
ICAgIFRoZSBvbGQgPHNhdmUvcmVzdG9yZT5TdGF0ZSgpIGZ1bmN0aW9uIGlzIHJlbmFtZWQgdG8K
KyAgICAgICAgPHNhdmUvcmVzdG9yZT5QYXJzZXJTdGF0ZSgpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBjbGVhbnMgdXAgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlIG9sZCAKKyAgICAgICAgY3Jl
YXRlU2F2ZVBvaW50KCkgdG8gdXNlIHNhdmVMZXhlclN0YXRlKCkgd2hlbiB0aGV5CisgICAgICAg
IGRvbid0IG5lZWQgdGhlIHdob2xlIGtpdCBhbmQgY2Fib29kbGUuCisKKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmlzQXJyb3dG
dW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VTdGF0ZW1lbnRMaXN0SXRlbSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUNsYXNzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwb3J0RGVj
bGFyYXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RM
aXRlcmFsKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6cHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BTY29wZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BTY29wZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
aGFzRXJyb3IpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnNhdmVQYXJzZXJTdGF0ZSk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVBhcnNlclN0YXRlKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpzYXZlTGV4ZXJTdGF0ZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZUxleGVy
U3RhdGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNyZWF0ZVNhdmVQb2ludEZvckVycm9yKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpjcmVhdGVTYXZlUG9pbnQpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnJlc3RvcmVTYXZlUG9pbnRXaXRoRXJyb3IpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OnJlc3RvcmVTYXZlUG9pbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnNhdmVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVN0YXRlKTogRGVsZXRlZC4KKwog
MjAxNi0wMS0yMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBGaXggYSB0eXBvIGluIHRoZSBBaXIgZGVmaW5pdGlvbiBvZiBDZWlsRG91Ymxl
L0NlaWxGbG9hdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAko
cmV2aXNpb24gMTk1Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCBQYXJzZXI8TGV4ZXJU
eXBlPjo6aXNBcnJvd0Z1bmN0aW9uUAogICAgICAgICAgICAgLy8gV2UgbWFrZSBmYWtlIHNjb3Bl
LCBvdGhlcndpc2UgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzIHdpbGwgYWRkIHZhcmlhYmxlIHRvIGN1
cnJlbnQgc2NvcGUgdGhhdCBsZWFkIHRvIGVycm9ycwogICAgICAgICAgICAgQXV0b1BvcFNjb3Bl
UmVmIGZha2VTY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgICAgICBmYWtlU2NvcGUt
PnNldFNvdXJjZVBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlKTsK
LSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50
ID0gMDsKICAgICAgICAgICAgIGlzQXJyb3dGdW5jdGlvbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVy
cyhzeW50YXhDaGVja2VyLCBzeW50YXhDaGVja2VyLmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3Qo
KSwgcGFyYW1ldGVyc0NvdW50KSAmJiBjb25zdW1lKENMT1NFUEFSRU4pICYmIG1hdGNoKEFSUk9X
RlVOQ1RJT04pOwogICAgICAgICAgICAgICAgIApAQCAtNTY5LDcgKzU2OSw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBjYXNlIExFVDogewogICAgICAg
ICBib29sIHNob3VsZFBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgICAgIGlm
ICghc3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3Jl
YXRlU2F2ZVBvaW50KCk7CisgICAgICAgICAgICBMZXhlclN0YXRlIHNhdmVQb2ludCA9IHNhdmVM
ZXhlclN0YXRlKCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAvLyBJbnRlbnRp
b25hbGx5IHVzZSBgbWF0Y2goSURFTlQpIHx8IG1hdGNoKExFVCkgfHwgbWF0Y2goWUlFTEQpYCBh
bmQgZG9uJ3QgdXNlIGBtYXRjaFNwZWNJZGVudGlmaWVyKClgLgogICAgICAgICAgICAgLy8gV2Ug
d291bGQgbGlrZSB0byBmYWxsIGludG8gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uIHBhdGggZXZl
biBpZiAieWllbGQiIGlzIG5vdCB0cmVhdGVkIGFzIGFuIElkZW50aWZpZXIuCkBAIC01NzgsNyAr
NTc4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAg
ICAgICAgLy8gdG8gcmFpc2UgY29uc2lzdGVudCBlcnJvcnMgYmV0d2VlbiAidmFyIiwgImNvbnN0
IiBhbmQgImxldCIuCiAgICAgICAgICAgICBpZiAoIShtYXRjaChJREVOVCkgfHwgbWF0Y2goTEVU
KSB8fCBtYXRjaChZSUVMRCkpICYmICFtYXRjaChPUEVOQlJBQ0UpICYmICFtYXRjaChPUEVOQlJB
Q0tFVCkpCiAgICAgICAgICAgICAgICAgc2hvdWxkUGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uID0g
ZmFsc2U7Ci0gICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CisgICAgICAg
ICAgICByZXN0b3JlTGV4ZXJTdGF0ZShzYXZlUG9pbnQpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChzaG91bGRQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXN1bHQgPSBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgRGVjbGFyYXRpb25UeXBlOjpMZXREZWNs
YXJhdGlvbik7CkBAIC0yMDAzLDcgKzIwMDMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IGJvb2wgUGFyc2VyCiAgICAgfQogICAgIAogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxh
c3RGdW5jdGlvbk5hbWU7Ci0gICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsK
KyAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0ZSA9IHNhdmVQYXJzZXJTdGF0ZSgpOwogCiAgICAgYXV0
byBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9uQm9keSA9IFsmXSB7CiAgICAgICAgIHJldHVybiBwYXJz
ZUZ1bmN0aW9uQm9keShjb250ZXh0LCBzdGFydExvY2F0aW9uLCBzdGFydENvbHVtbiwgZnVuY3Rp
b25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIGNvbnN0
cnVjdG9yS2luZCwgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGZ1bmN0aW9uQm9keVR5cGUsIGZ1bmN0
aW9uSW5mby5wYXJhbWV0ZXJDb3VudCwgbW9kZSk7CkBAIC0yMDI2LDcgKzIwMjYsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgfSBlbHNlCiAgICAgICAg
IGZ1bmN0aW9uSW5mby5ib2R5ID0gcGVyZm9ybVBhcnNpbmdGdW5jdGlvbkJvZHkoKTsKICAgICAK
LSAgICByZXN0b3JlU3RhdGUob2xkU3RhdGUpOworICAgIHJlc3RvcmVQYXJzZXJTdGF0ZShvbGRT
dGF0ZSk7CiAgICAgZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLmJvZHksICJDYW5ub3QgcGFyc2Ug
dGhlIGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwogICAgIGNv
bnRleHQuc2V0RW5kT2Zmc2V0KGZ1bmN0aW9uSW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zm
c2V0KCkpOwogICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgZnVuY3Rpb25J
bmZvLm5hbWUpIHsKQEAgLTIxOTMsMTEgKzIxOTMsMTEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlQ2xhc3NFeAogICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHksICJzdGF0aWMiIGlzIGEgbm9uLXJlc2VydmVkIGtleXdvcmQgaW4gbm9uLXN0cmljdCBtb2Rl
LgogICAgICAgICBib29sIGlzU3RhdGljTWV0aG9kID0gZmFsc2U7CiAgICAgICAgIGlmIChtYXRj
aChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5zdGF0aWNLZXl3b3JkKSB7Ci0gICAgICAgICAgICBhdXRvIHNhdmVQb2lu
dCA9IGNyZWF0ZVNhdmVQb2ludCgpOworICAgICAgICAgICAgTGV4ZXJTdGF0ZSBsZXhlclN0YXRl
ID0gc2F2ZUxleGVyU3RhdGUoKTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGlm
IChtYXRjaChPUEVOUEFSRU4pKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVwYXJzZSAic3RhdGlj
KCkiIGFzIGEgbWV0aG9kIG5hbWVkICJzdGF0aWMiLgotICAgICAgICAgICAgICAgIHJlc3RvcmVT
YXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgICAgICByZXN0b3JlTGV4ZXJTdGF0ZShs
ZXhlclN0YXRlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGlzU3RhdGlj
TWV0aG9kID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjcxMSw3ICsyNzExLDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBUcmVlU3RhdGVtZW50IHJl
c3VsdCA9IDA7CiAgICAgICAgIGJvb2wgaXNGdW5jdGlvbk9yQ2xhc3NEZWNsYXJhdGlvbiA9IGZh
bHNlOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBsb2NhbE5hbWUgPSBudWxscHRyOwotICAg
ICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CisgICAgICAgIExl
eGVyU3RhdGUgbGV4ZXJTdGF0ZSA9IHNhdmVMZXhlclN0YXRlKCk7CiAKICAgICAgICAgYm9vbCBz
dGFydHNXaXRoRnVuY3Rpb24gPSBtYXRjaChGVU5DVElPTik7CiAgICAgICAgIGlmIChzdGFydHNX
aXRoRnVuY3Rpb24KQEAgLTI3MjksNyArMjcyOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICNlbmRpZgogICAgICAgICAgICAgaWYgKG1hdGNoKElERU5UKSkK
ICAgICAgICAgICAgICAgICBsb2NhbE5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAg
ICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKKyAgICAgICAgICAgIHJlc3RvcmVM
ZXhlclN0YXRlKGxleGVyU3RhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvY2FsTmFt
ZSkgewpAQCAtMzMwNSw3ICszMzA1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcgogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlT2Jq
ZWN0TGl0ZXJhbChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKLSAgICBhdXRvIHNhdmVQb2ludCA9
IGNyZWF0ZVNhdmVQb2ludCgpOworICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZSA9IHNhdmVMZXhl
clN0YXRlKCk7CiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWls
ZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0
IG9mIGFuIG9iamVjdCBsaXRlcmFsIik7CiAKICAgICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX25v
bkxIU0NvdW50OwpAQCAtMzMyMCw3ICszMzIwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNl
IG9iamVjdCBsaXRlcmFsIHByb3BlcnR5Iik7CiAKICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZh
bGlkYXRlZCAmJiBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgKFByb3BlcnR5Tm9kZTo6R2V0
dGVyIHwgUHJvcGVydHlOb2RlOjpTZXR0ZXIpKSB7Ci0gICAgICAgIHJlc3RvcmVTYXZlUG9pbnQo
c2F2ZVBvaW50KTsKKyAgICAgICAgcmVzdG9yZUxleGVyU3RhdGUobGV4ZXJTdGF0ZSk7CiAgICAg
ICAgIHJldHVybiBwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CiAgICAgfQogCkBA
IC0zMzM4LDcgKzMzMzgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzCiAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eShjb250ZXh0LCBmYWxzZSk7CiAg
ICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIG9iamVjdCBsaXRlcmFs
IHByb3BlcnR5Iik7CiAgICAgICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkICYmIGNv
bnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiAoUHJvcGVydHlOb2RlOjpHZXR0ZXIgfCBQcm9wZXJ0
eU5vZGU6OlNldHRlcikpIHsKLSAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50
KTsKKyAgICAgICAgICAgIHJlc3RvcmVMZXhlclN0YXRlKGxleGVyU3RhdGUpOwogICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQcm90b0R1cGxpY2F0
ZShjb250ZXh0LCBwcm9wZXJ0eSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkocmV2aXNpb24gMTk1Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2OCwyMiArMTI2OCw3NSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpOwogICAgIH0KIAotICAg
IHN0cnVjdCBTYXZlUG9pbnQgeworICAgIGVudW0gY2xhc3MgRnVuY3Rpb25QYXJzZVBoYXNlIHsg
UGFyYW1ldGVycywgQm9keSB9OworICAgIHN0cnVjdCBQYXJzZXJTdGF0ZSB7CisgICAgICAgIGlu
dCBhc3NpZ25tZW50Q291bnQ7CisgICAgICAgIGludCBub25MSFNDb3VudDsKKyAgICAgICAgaW50
IG5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7CisgICAgICAgIEZ1bmN0aW9uUGFyc2VQaGFzZSBm
dW5jdGlvblBhcnNlUGhhc2U7CisgICAgfTsKKworICAgIC8vIElmIHlvdSdyZSB1c2luZyB0aGlz
IGRpcmVjdGx5LCB5b3Ugc2hvdWxkIHN0b3AgYW5kIHRoaW5rIGZvciBhIHNlY29uZC4gWW91Cisg
ICAgLy8gcHJvYmFibHkgbmVlZCB0byBiZSB1c2luZyBhIFNhdmVQb2ludC4KKyAgICBBTFdBWVNf
SU5MSU5FIFBhcnNlclN0YXRlIHNhdmVQYXJzZXJTdGF0ZSgpCisgICAgeworICAgICAgICBQYXJz
ZXJTdGF0ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hc3NpZ25tZW50Q291bnQgPSBtX2Fzc2ln
bm1lbnRDb3VudDsKKyAgICAgICAgcmVzdWx0Lm5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsK
KyAgICAgICAgcmVzdWx0Lm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQgPSBtX25vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQ7CisgICAgICAgIHJlc3VsdC5mdW5jdGlvblBhcnNlUGhhc2UgPSBtX2Z1
bmN0aW9uUGFyc2VQaGFzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcmVzdG9yZVBhcnNlclN0YXRlKGNvbnN0IFBhcnNlclN0YXRlJiBz
dGF0ZSkKKyAgICB7CisgICAgICAgIG1fYXNzaWdubWVudENvdW50ID0gc3RhdGUuYXNzaWdubWVu
dENvdW50OworICAgICAgICBtX25vbkxIU0NvdW50ID0gc3RhdGUubm9uTEhTQ291bnQ7CisgICAg
ICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCA9IHN0YXRlLm5vblRyaXZpYWxFeHByZXNz
aW9uQ291bnQ7CisgICAgICAgIG1fZnVuY3Rpb25QYXJzZVBoYXNlID0gc3RhdGUuZnVuY3Rpb25Q
YXJzZVBoYXNlOworICAgIH0KKworICAgIHN0cnVjdCBMZXhlclN0YXRlIHsKICAgICAgICAgaW50
IHN0YXJ0T2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBvbGRMaW5lU3RhcnRPZmZzZXQ7CiAgICAg
ICAgIHVuc2lnbmVkIG9sZExhc3RMaW5lTnVtYmVyOwogICAgICAgICB1bnNpZ25lZCBvbGRMaW5l
TnVtYmVyOwogICAgIH07Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBTYXZlUG9pbnQgY3JlYXRl
U2F2ZVBvaW50Rm9yRXJyb3IoKQorCisgICAgLy8gSWYgeW91J3JlIHVzaW5nIHRoaXMgZGlyZWN0
bHksIHlvdSBzaG91bGQgc3RvcCBhbmQgdGhpbmsgZm9yIGEgc2Vjb25kLiBZb3UKKyAgICAvLyBw
cm9iYWJseSBuZWVkIHRvIGJlIHVzaW5nIGEgU2F2ZVBvaW50LiBpLmUsIGlmIHlvdSBwYXJzZSBh
bnkga2luZCBvZiAKKyAgICAvLyBBc3NpZ25tZW50RXhwcmVzc2lvbiBiZXR3ZWVuIHNhdmluZy9y
ZXN0b3JpbmcsIHlvdSBzaG91bGQgZGVmaW5pdGVseSAKKyAgICAvLyBub3QgYmUgdXNpbmcgdGhp
cyBkaXJlY3RseS4KKyAgICBBTFdBWVNfSU5MSU5FIExleGVyU3RhdGUgc2F2ZUxleGVyU3RhdGUo
KQogICAgIHsKLSAgICAgICAgU2F2ZVBvaW50IHJlc3VsdDsKKyAgICAgICAgTGV4ZXJTdGF0ZSBy
ZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zdGFydE9mZnNldCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5z
dGFydE9mZnNldDsKICAgICAgICAgcmVzdWx0Lm9sZExpbmVTdGFydE9mZnNldCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHJlc3VsdC5vbGRMYXN0TGluZU51
bWJlciA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAgICAgICAgIHJlc3VsdC5vbGRMaW5l
TnVtYmVyID0gbV9sZXhlci0+bGluZU51bWJlcigpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlTGV4ZXJTdGF0ZShjb25zdCBM
ZXhlclN0YXRlJiBsZXhlclN0YXRlKQorICAgIHsKKyAgICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0
KGxleGVyU3RhdGUuc3RhcnRPZmZzZXQsIGxleGVyU3RhdGUub2xkTGluZVN0YXJ0T2Zmc2V0KTsK
KyAgICAgICAgbmV4dCgpOworICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihsZXhl
clN0YXRlLm9sZExhc3RMaW5lTnVtYmVyKTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGluZU51bWJl
cihsZXhlclN0YXRlLm9sZExpbmVOdW1iZXIpOworICAgIH0KKworICAgIHN0cnVjdCBTYXZlUG9p
bnQgeworICAgICAgICBQYXJzZXJTdGF0ZSBwYXJzZXJTdGF0ZTsKKyAgICAgICAgTGV4ZXJTdGF0
ZSBsZXhlclN0YXRlOworICAgIH07CisgICAgCisgICAgQUxXQVlTX0lOTElORSBTYXZlUG9pbnQg
Y3JlYXRlU2F2ZVBvaW50Rm9yRXJyb3IoKQorICAgIHsKKyAgICAgICAgU2F2ZVBvaW50IHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0LnBhcnNlclN0YXRlID0gc2F2ZVBhcnNlclN0YXRlKCk7CisgICAg
ICAgIHJlc3VsdC5sZXhlclN0YXRlID0gc2F2ZUxleGVyU3RhdGUoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBTYXZlUG9pbnQgY3JlYXRl
U2F2ZVBvaW50KCkKICAgICB7CkBAIC0xMjk0LDEwICsxMzQ3LDggQEAgcHJpdmF0ZToKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcmVzdG9yZVNhdmVQb2ludFdpdGhFcnJvcihjb25zdCBTYXZlUG9p
bnQmIHNhdmVQb2ludCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXQoc2F2ZVBv
aW50LnN0YXJ0T2Zmc2V0LCBzYXZlUG9pbnQub2xkTGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAg
bmV4dCgpOwotICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihzYXZlUG9pbnQub2xk
TGFzdExpbmVOdW1iZXIpOwotICAgICAgICBtX2xleGVyLT5zZXRMaW5lTnVtYmVyKHNhdmVQb2lu
dC5vbGRMaW5lTnVtYmVyKTsKKyAgICAgICAgcmVzdG9yZUxleGVyU3RhdGUoc2F2ZVBvaW50Lmxl
eGVyU3RhdGUpOworICAgICAgICByZXN0b3JlUGFyc2VyU3RhdGUoc2F2ZVBvaW50LnBhcnNlclN0
YXRlKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzdG9yZVNhdmVQb2ludChj
b25zdCBTYXZlUG9pbnQmIHNhdmVQb2ludCkKQEAgLTEzMDUsMzIgKzEzNTYsNiBAQCBwcml2YXRl
OgogICAgICAgICByZXN0b3JlU2F2ZVBvaW50V2l0aEVycm9yKHNhdmVQb2ludCwgU3RyaW5nKCkp
OwogICAgIH0KIAotICAgIGVudW0gY2xhc3MgRnVuY3Rpb25QYXJzZVBoYXNlIHsgUGFyYW1ldGVy
cywgQm9keSB9OwotICAgIHN0cnVjdCBQYXJzZXJTdGF0ZSB7Ci0gICAgICAgIGludCBhc3NpZ25t
ZW50Q291bnQ7Ci0gICAgICAgIGludCBub25MSFNDb3VudDsKLSAgICAgICAgaW50IG5vblRyaXZp
YWxFeHByZXNzaW9uQ291bnQ7Ci0gICAgICAgIEZ1bmN0aW9uUGFyc2VQaGFzZSBmdW5jdGlvblBh
cnNlUGhhc2U7Ci0gICAgfTsKLQotICAgIEFMV0FZU19JTkxJTkUgUGFyc2VyU3RhdGUgc2F2ZVN0
YXRlKCkKLSAgICB7Ci0gICAgICAgIFBhcnNlclN0YXRlIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0
LmFzc2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OwotICAgICAgICByZXN1bHQubm9u
TEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwotICAgICAgICByZXN1bHQubm9uVHJpdmlhbEV4cHJl
c3Npb25Db3VudCA9IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAgcmVzdWx0
LmZ1bmN0aW9uUGFyc2VQaGFzZSA9IG1fZnVuY3Rpb25QYXJzZVBoYXNlOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlU3RhdGUo
Y29uc3QgUGFyc2VyU3RhdGUmIHN0YXRlKQotICAgIHsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291
bnQgPSBzdGF0ZS5hc3NpZ25tZW50Q291bnQ7Ci0gICAgICAgIG1fbm9uTEhTQ291bnQgPSBzdGF0
ZS5ub25MSFNDb3VudDsKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gc3Rh
dGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAgbV9mdW5jdGlvblBhcnNlUGhh
c2UgPSBzdGF0ZS5mdW5jdGlvblBhcnNlUGhhc2U7Ci0gICAgfQotCiAgICAgVk0qIG1fdm07CiAg
ICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJlbmEgbV9wYXJzZXJB
cmVuYTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269402</attachid>
            <date>2016-01-20 16:46:39 -0800</date>
            <delta_ts>2016-01-20 16:54:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>31442</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTAxLTIwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFBhcnNlcjo6U2F2ZVBvaW50IGlzIGEgZm9vdCBndW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyB1c2Ugb2YgU2F2ZVBvaW50ICh1
cCB1bnRpbCB0aGlzIHBhdGNoKQorICAgICAgICByZWFsbHkgbWVhbnQgdGhhdCB3ZSdyZSBzYXZp
bmcgdGhlIExleGVyU3RhdGUuIFRoaXMKKyAgICAgICAgd2FzIHNvIHBvb3JseSBuYW1lZCB0aGF0
IGl0IHdhcyBiZWluZyBtaXN1c2VkIGFsbCBvdmVyCisgICAgICAgIG91ciBwYXJzZXIuIEZvciBl
eGFtcGxlLCBhbnl0aGluZyB0aGF0IHBhcnNlZCBhbgorICAgICAgICBBc3NpZ25tZW50RXhwcmVz
c2lvbiBiZXR3ZWVuIHNhdmluZy9yZXN0b3JpbmcgcmVhbGx5CisgICAgICAgIHdhbnRlZCB0byBz
YXZlIGJvdGggTGV4ZXIgc3RhdGUgYW5kIFBhcnNlciBzdGF0ZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGNoYW5nZXMgU2F2ZVBvaW50IHRvIG1lYW4gc2F2ZSBhbGwgdGhlCisgICAgICAgIHN0YXRl
LiBUaGUgb2xkIFNhdmVQb2ludCBpcyByZW5hbWVkIHRvIExleGVyU3RhdGUgd2l0aAorICAgICAg
ICBjb3JyZXNwb25kaW5nIDxzYXZlL3Jlc3RvcmU+TGV4ZXJTdGF0ZSBmdW5jdGlvbnMuCisgICAg
ICAgIFRoZSBvbGQgPHNhdmUvcmVzdG9yZT5TdGF0ZSgpIGZ1bmN0aW9uIGlzIHJlbmFtZWQgdG8K
KyAgICAgICAgPHNhdmUvcmVzdG9yZT5QYXJzZXJTdGF0ZSgpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBjbGVhbnMgdXAgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlIG9sZCAKKyAgICAgICAgY3Jl
YXRlU2F2ZVBvaW50KCkgdG8gdXNlIHNhdmVMZXhlclN0YXRlKCkgd2hlbiB0aGV5CisgICAgICAg
IGRvbid0IG5lZWQgdGhlIHdob2xlIGtpdCBhbmQgY2Fib29kbGUuCisKKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmlzQXJyb3dG
dW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VTdGF0ZW1lbnRMaXN0SXRlbSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUNsYXNzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwb3J0RGVj
bGFyYXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RM
aXRlcmFsKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6cHVzaFNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BTY29wZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3BTY29wZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
aGFzRXJyb3IpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnNhdmVQYXJzZXJTdGF0ZSk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVBhcnNlclN0YXRlKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpzYXZlTGV4ZXJTdGF0ZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZUxleGVy
U3RhdGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNyZWF0ZVNhdmVQb2ludEZvckVycm9yKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpjcmVhdGVTYXZlUG9pbnQpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnJlc3RvcmVTYXZlUG9pbnRXaXRoRXJyb3IpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OnJlc3RvcmVTYXZlUG9pbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnNhdmVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVN0YXRlKTogRGVsZXRlZC4KKwog
MjAxNi0wMS0yMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBGaXggYSB0eXBvIGluIHRoZSBBaXIgZGVmaW5pdGlvbiBvZiBDZWlsRG91Ymxl
L0NlaWxGbG9hdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAko
cmV2aXNpb24gMTk1Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTIgKzIwMCw4IEBAIFBhcnNlcjxMZXhlclR5cGU+
OjpQYXJzZXIoCiAgICAgLCBtX3NvdXJjZSgmc291cmNlKQogICAgICwgbV9oYXNTdGFja092ZXJm
bG93KGZhbHNlKQogICAgICwgbV9hbGxvd3NJbih0cnVlKQotICAgICwgbV9hc3NpZ25tZW50Q291
bnQoMCkKLSAgICAsIG1fbm9uTEhTQ291bnQoMCkKICAgICAsIG1fc3ludGF4QWxyZWFkeVZhbGlk
YXRlZChzb3VyY2UucHJvdmlkZXIoKS0+aXNWYWxpZCgpKQogICAgICwgbV9zdGF0ZW1lbnREZXB0
aCgwKQotICAgICwgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50KDApCi0gICAgLCBtX2Z1bmN0
aW9uUGFyc2VQaGFzZShGdW5jdGlvblBhcnNlUGhhc2U6OkJvZHkpCiAgICAgLCBtX2xhc3RJZGVu
dGlmaWVyKDApCiAgICAgLCBtX2xhc3RGdW5jdGlvbk5hbWUobnVsbHB0cikKICAgICAsIG1fc291
cmNlRWxlbWVudHMoMCkKQEAgLTI0NSw3ICsyNDEsNyBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlSW5uZXIoY29uCiAgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2Up
KTsKICAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOwogICAgIHNjb3BlLT5zZXRJ
c0xleGljYWxTY29wZSgpOwotICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQaGFzZT4gZnVu
Y3Rpb25QYXJzZVBoYXNlUG9pc29uZXIobV9mdW5jdGlvblBhcnNlUGhhc2UsIEZ1bmN0aW9uUGFy
c2VQaGFzZTo6Qm9keSk7CisgICAgU2V0Rm9yU2NvcGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5j
dGlvblBhcnNlUGhhc2VQb2lzb25lcihtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSwg
RnVuY3Rpb25QYXJzZVBoYXNlOjpCb2R5KTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQm9k
eUV4cHJlc3Npb24gPSBmYWxzZTsKICAgICBpZiAobV9sZXhlci0+aXNSZXBhcnNpbmdGdW5jdGlv
bigpKSB7CkBAIC00MDMsNyArMzk5LDcgQEAgYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNBcnJv
d0Z1bmN0aW9uUAogICAgICAgICAgICAgLy8gV2UgbWFrZSBmYWtlIHNjb3BlLCBvdGhlcndpc2Ug
cGFyc2VGb3JtYWxQYXJhbWV0ZXJzIHdpbGwgYWRkIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUg
dGhhdCBsZWFkIHRvIGVycm9ycwogICAgICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGZha2VTY29w
ZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgICAgICBmYWtlU2NvcGUtPnNldFNvdXJjZVBh
cnNlTW9kZShTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlKTsKLSAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50ID0gMDsKICAgICAg
ICAgICAgIGlzQXJyb3dGdW5jdGlvbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhzeW50YXhDaGVj
a2VyLCBzeW50YXhDaGVja2VyLmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKSwgcGFyYW1ldGVy
c0NvdW50KSAmJiBjb25zdW1lKENMT1NFUEFSRU4pICYmIG1hdGNoKEFSUk9XRlVOQ1RJT04pOwog
ICAgICAgICAgICAgICAgIApAQCAtNTY5LDcgKzU2NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBjYXNlIExFVDogewogICAgICAgICBib29sIHNob3Vs
ZFBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgICAgIGlmICghc3RyaWN0TW9k
ZSgpKSB7Ci0gICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50
KCk7CisgICAgICAgICAgICBMZXhlclN0YXRlIHNhdmVQb2ludCA9IHNhdmVMZXhlclN0YXRlKCk7
CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSBg
bWF0Y2goSURFTlQpIHx8IG1hdGNoKExFVCkgfHwgbWF0Y2goWUlFTEQpYCBhbmQgZG9uJ3QgdXNl
IGBtYXRjaFNwZWNJZGVudGlmaWVyKClgLgogICAgICAgICAgICAgLy8gV2Ugd291bGQgbGlrZSB0
byBmYWxsIGludG8gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uIHBhdGggZXZlbiBpZiAieWllbGQi
IGlzIG5vdCB0cmVhdGVkIGFzIGFuIElkZW50aWZpZXIuCkBAIC01NzgsNyArNTc0LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgLy8gdG8g
cmFpc2UgY29uc2lzdGVudCBlcnJvcnMgYmV0d2VlbiAidmFyIiwgImNvbnN0IiBhbmQgImxldCIu
CiAgICAgICAgICAgICBpZiAoIShtYXRjaChJREVOVCkgfHwgbWF0Y2goTEVUKSB8fCBtYXRjaChZ
SUVMRCkpICYmICFtYXRjaChPUEVOQlJBQ0UpICYmICFtYXRjaChPUEVOQlJBQ0tFVCkpCiAgICAg
ICAgICAgICAgICAgc2hvdWxkUGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CisgICAgICAgICAgICByZXN0b3Jl
TGV4ZXJTdGF0ZShzYXZlUG9pbnQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChzaG91bGRQYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb24oY29udGV4dCwgRGVjbGFyYXRpb25UeXBlOjpMZXREZWNsYXJhdGlvbik7CkBA
IC04OTcsNyArODkzLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJuIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBE
ZXN0cnVjdHVyaW5nS2luZCBraW5kLCBFeHBvcnRUeXBlIGV4cG9ydFR5cGUsIGNvbnN0IElkZW50
aWZpZXIqKiBkdXBsaWNhdGVJZGVudGlmaWVyLCBib29sKiBoYXNEZXN0cnVjdHVyaW5nUGF0dGVy
biwgQXNzaWdubWVudENvbnRleHQgYmluZGluZ0NvbnRleHQsIGludCBkZXB0aCkKIHsKICAgICBm
YWlsSWZTdGFja092ZXJmbG93KCk7Ci0gICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3Vu
dDsKKyAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogICAg
IFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuOwogICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CkBAIC0xMDUyLDcgKzEwNDgsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICB9Ci0gICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgIG1fcGFy
c2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKICAgICByZXR1cm4gcGF0dGVybjsK
IH0KIApAQCAtMTA3NCw3ICsxMDcwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZQogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKICAgICBuZXh0KCk7
CiAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChPUEVOUEFSRU4sICIoIiwgInN0YXJ0IiwgImZv
ci1sb29wIGhlYWRlciIpOwotICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7Cisg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKICAgICBpbnQg
ZGVjbGFyYXRpb25zID0gMDsKICAgICBKU1RleHRQb3NpdGlvbiBkZWNsc1N0YXJ0OwogICAgIEpT
VGV4dFBvc2l0aW9uIGRlY2xzRW5kOwpAQCAtMTIyNiw3ICsxMjIyLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIAogICAgIC8vIEZvci1pbiBhbmQgRm9y
LW9mIGxvb3AKIGVudW1lcmF0aW9uTG9vcDoKLSAgICBmYWlsSWZGYWxzZShub25MSFNDb3VudCA9
PSBtX25vbkxIU0NvdW50LCAiRXhwZWN0ZWQgYSByZWZlcmVuY2Ugb24gdGhlIGxlZnQgaGFuZCBz
aWRlIG9mIGFuIGVudW1lcmF0aW9uIHN0YXRlbWVudCIpOworICAgIGZhaWxJZkZhbHNlKG5vbkxI
U0NvdW50ID09IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQsICJFeHBlY3RlZCBhIHJlZmVyZW5j
ZSBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYW4gZW51bWVyYXRpb24gc3RhdGVtZW50Iik7CiAg
ICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoIWNvbnN1bWUoSU5UT0tF
TikpIHsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goSURFTlQpICYmICptX3Rva2VuLm1fZGF0
YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZiwgIkV4cGVjdGVkIGVpdGhlciAnaW4n
IG9yICdvZicgaW4gZW51bWVyYXRpb24gc3ludGF4Iik7CkBAIC0xNjQ3LDExICsxNjQzLDExIEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZGlyZWN0
aXZlID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIGlmIChkaXJlY3RpdmVMaXRlcmFs
TGVuZ3RoKQogICAgICAgICAgICAgKmRpcmVjdGl2ZUxpdGVyYWxMZW5ndGggPSBtX3Rva2VuLm1f
bG9jYXRpb24uZW5kT2Zmc2V0IC0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwotICAg
ICAgICBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50OworICAgICAgICBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9wYXJzZXJTdGF0ZS5u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50OwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBkZWZh
dWx0OgogICAgICAgICBUcmVlU3RhdGVtZW50IGV4cHJTdGF0ZW1lbnQgPSBwYXJzZUV4cHJlc3Np
b25TdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgIGlmIChkaXJlY3RpdmUgJiYgbm9uVHJpdmlh
bEV4cHJlc3Npb25Db3VudCAhPSBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQpCisgICAgICAg
IGlmIChkaXJlY3RpdmUgJiYgbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCAhPSBtX3BhcnNlclN0
YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQpCiAgICAgICAgICAgICBkaXJlY3RpdmUgPSAw
OwogICAgICAgICByZXN1bHQgPSBleHByU3RhdGVtZW50OwogICAgICAgICBicmVhazsKQEAgLTE3
NjUsNyArMTc2MSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDwK
ICAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0ID0gY29udGV4dC5jcmVh
dGVGb3JtYWxQYXJhbWV0ZXJMaXN0KCk7CiAgICAgZnVuY3Rpb25JbmZvLnBhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJMaXN0OwogICAgIGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCA9IHBhcmFtZXRlcnNT
dGFydDsKLSAgICBTZXRGb3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1bmN0aW9uUGFyc2VQ
aGFzZVBvaXNvbmVyKG1fZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBhcnNlUGhhc2U6OlBh
cmFtZXRlcnMpOworICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQaGFzZT4gZnVuY3Rpb25Q
YXJzZVBoYXNlUG9pc29uZXIobV9wYXJzZXJTdGF0ZS5mdW5jdGlvblBhcnNlUGhhc2UsIEZ1bmN0
aW9uUGFyc2VQaGFzZTo6UGFyYW1ldGVycyk7CiAgICAgCiAgICAgaWYgKG1vZGUgPT0gU291cmNl
UGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSkgewogICAgICAgICBpZiAoIW1hdGNoKElERU5U
KSAmJiAhbWF0Y2goT1BFTlBBUkVOKSkgewpAQCAtMTg2Miw3ICsxODU4LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgIGJvb2wgdXBwZXJTY29wZUlzR2Vu
ZXJhdG9yID0gY3VycmVudFNjb3BlKCktPmlzR2VuZXJhdG9yKCk7CiAgICAgQXV0b1BvcFNjb3Bl
UmVmIGZ1bmN0aW9uU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgIGZ1bmN0aW9uU2NvcGUt
PnNldFNvdXJjZVBhcnNlTW9kZShtb2RlKTsKLSAgICBTZXRGb3JTY29wZTxGdW5jdGlvblBhcnNl
UGhhc2U+IGZ1bmN0aW9uUGFyc2VQaGFzZVBvaXNvbmVyKG1fZnVuY3Rpb25QYXJzZVBoYXNlLCBG
dW5jdGlvblBhcnNlUGhhc2U6OkJvZHkpOworICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQ
aGFzZT4gZnVuY3Rpb25QYXJzZVBoYXNlUG9pc29uZXIobV9wYXJzZXJTdGF0ZS5mdW5jdGlvblBh
cnNlUGhhc2UsIEZ1bmN0aW9uUGFyc2VQaGFzZTo6Qm9keSk7CiAgICAgaW50IGZ1bmN0aW9uTmFt
ZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGxhc3RGdW5jdGlvbk5hbWUgPSBtX2xhc3RGdW5jdGlvbk5hbWU7CiAgICAgbV9sYXN0
RnVuY3Rpb25OYW1lID0gbnVsbHB0cjsKQEAgLTIwMDMsNyArMTk5OSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICB9CiAgICAgCiAgICAgbV9sYXN0RnVu
Y3Rpb25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsKLSAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0ZSA9
IHNhdmVTdGF0ZSgpOworICAgIFBhcnNlclN0YXRlIG9sZFN0YXRlID0gc2F2ZVBhcnNlclN0YXRl
KCk7CiAKICAgICBhdXRvIHBlcmZvcm1QYXJzaW5nRnVuY3Rpb25Cb2R5ID0gWyZdIHsKICAgICAg
ICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQsIHN0YXJ0TG9jYXRpb24sIHN0YXJ0
Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQsIHBhcmFtZXRl
cnNTdGFydCwgY29uc3RydWN0b3JLaW5kLCBleHBlY3RlZFN1cGVyQmluZGluZywgZnVuY3Rpb25C
b2R5VHlwZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50LCBtb2RlKTsKQEAgLTIwMjYsNyAr
MjAyMiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICB9
IGVsc2UKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHkgPSBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9u
Qm9keSgpOwogICAgIAotICAgIHJlc3RvcmVTdGF0ZShvbGRTdGF0ZSk7CisgICAgcmVzdG9yZVBh
cnNlclN0YXRlKG9sZFN0YXRlKTsKICAgICBmYWlsSWZGYWxzZShmdW5jdGlvbkluZm8uYm9keSwg
IkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZSht
b2RlKSk7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQoZnVuY3Rpb25JbmZvLmJvZHksIG1fbGV4
ZXItPmN1cnJlbnRPZmZzZXQoKSk7CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUo
KSAmJiBmdW5jdGlvbkluZm8ubmFtZSkgewpAQCAtMjE5MywxMSArMjE4OSwxMSBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiAgICAgICAgIC8vIEZvciBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eSwgInN0YXRpYyIgaXMgYSBub24tcmVzZXJ2ZWQga2V5d29yZCBpbiBu
b24tc3RyaWN0IG1vZGUuCiAgICAgICAgIGJvb2wgaXNTdGF0aWNNZXRob2QgPSBmYWxzZTsKICAg
ICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlk
ZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKLSAgICAgICAgICAg
IGF1dG8gc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CisgICAgICAgICAgICBMZXhlclN0
YXRlIGxleGVyU3RhdGUgPSBzYXZlTGV4ZXJTdGF0ZSgpOwogICAgICAgICAgICAgbmV4dCgpOwog
ICAgICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikpIHsKICAgICAgICAgICAgICAgICAvLyBS
ZXBhcnNlICJzdGF0aWMoKSIgYXMgYSBtZXRob2QgbmFtZWQgInN0YXRpYyIuCi0gICAgICAgICAg
ICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAgICAgICAgICAgICAgIHJlc3Rv
cmVMZXhlclN0YXRlKGxleGVyU3RhdGUpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgaXNTdGF0aWNNZXRob2QgPSB0cnVlOwogICAgICAgICB9CkBAIC0yNzExLDcgKzI3MDcs
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIFRy
ZWVTdGF0ZW1lbnQgcmVzdWx0ID0gMDsKICAgICAgICAgYm9vbCBpc0Z1bmN0aW9uT3JDbGFzc0Rl
Y2xhcmF0aW9uID0gZmFsc2U7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGxvY2FsTmFtZSA9
IG51bGxwdHI7Ci0gICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQo
KTsKKyAgICAgICAgTGV4ZXJTdGF0ZSBsZXhlclN0YXRlID0gc2F2ZUxleGVyU3RhdGUoKTsKIAog
ICAgICAgICBib29sIHN0YXJ0c1dpdGhGdW5jdGlvbiA9IG1hdGNoKEZVTkNUSU9OKTsKICAgICAg
ICAgaWYgKHN0YXJ0c1dpdGhGdW5jdGlvbgpAQCAtMjcyOSw3ICsyNzI1LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogI2VuZGlmCiAgICAgICAgICAgICBpZiAo
bWF0Y2goSURFTlQpKQogICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IG1fdG9rZW4ubV9kYXRh
LmlkZW50OwotICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOworICAgICAg
ICAgICAgcmVzdG9yZUxleGVyU3RhdGUobGV4ZXJTdGF0ZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobG9jYWxOYW1lKSB7CkBAIC0yODc4LDggKzI4NzQsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgaWYgKCFtYXRjaChDT01NQSkpCiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIG5leHQoKTsKLSAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICBtX25vbkxIU0NvdW50Kys7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFs
RXhwcmVzc2lvbkNvdW50Kys7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCsrOwogICAg
IFRyZWVFeHByZXNzaW9uIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShyaWdodCwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIGluIGEg
Y29tbWEgZXhwcmVzc2lvbiIpOwogICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KHJpZ2h0LCBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uLm9mZnNldCk7CkBAIC0yOTE5LDggKzI5MTUsOCBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgZmFpbElmU3RhY2tPdmVyZmxv
dygpOwogICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAg
ICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgaW50IGlu
aXRpYWxBc3NpZ25tZW50Q291bnQgPSBtX2Fzc2lnbm1lbnRDb3VudDsKLSAgICBpbnQgaW5pdGlh
bE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRD
b3VudCA9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50OworICAgIGludCBpbml0aWFsTm9u
TEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogICAgIGJvb2wgbWF5YmVBc3Np
Z25tZW50UGF0dGVybiA9IG1hdGNoKE9QRU5CUkFDRSkgfHwgbWF0Y2goT1BFTkJSQUNLRVQpOwog
ICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKIApAQCAtMjk1NSw3
ICsyOTUxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAg
IH0KIAogICAgIGZhaWxJZkZhbHNlKGxocywgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIik7Ci0g
ICAgaWYgKGluaXRpYWxOb25MSFNDb3VudCAhPSBtX25vbkxIU0NvdW50KSB7CisgICAgaWYgKGlu
aXRpYWxOb25MSFNDb3VudCAhPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50KSB7CiAgICAgICAg
IGlmIChtX3Rva2VuLm1fdHlwZSA+PSBFUVVBTCAmJiBtX3Rva2VuLm1fdHlwZSA8PSBPUkVRVUFM
KQogICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJMZWZ0IGhhbmQgc2lkZSBvZiBvcGVyYXRvciAn
IiwgZ2V0VG9rZW4oKSwgIicgbXVzdCBiZSBhIHJlZmVyZW5jZSIpOwogCkBAIC0yOTgyLDExICsy
OTc4LDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICB9Ci0gICAgICAgIG1f
bm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRy
aXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgaGFkQXNzaWdubWVudCA9IHRydWU7Ci0g
ICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRTdGFjaywgbGhz
LCBzdGFydCwgdG9rZW5TdGFydFBvc2l0aW9uKCksIG1fYXNzaWdubWVudENvdW50LCBvcCk7Cisg
ICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRTdGFjaywgbGhz
LCBzdGFydCwgdG9rZW5TdGFydFBvc2l0aW9uKCksIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50LCBvcCk7CiAgICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7Ci0gICAgICAg
IG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50Kys7CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAg
ICAgICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fbGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jl
c29sdmUobGhzKSkgewogICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFzdElkZW50aWZpZXIsICJDYW5ub3QgbW9kaWZ5ICdldmFs
JyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtMjk5Niw3ICsyOTkyLDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgICAgICB9CiAgICAgICAgIGxocyA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKGxocywg
IkNhbm5vdCBwYXJzZSB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgZXhwcmVz
c2lvbiIpOwotICAgICAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fbm9uTEhTQ291bnQp
IHsKKyAgICAgICAgaWYgKGluaXRpYWxOb25MSFNDb3VudCAhPSBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50KSB7CiAgICAgICAgICAgICBpZiAobV90b2tlbi5tX3R5cGUgPj0gRVFVQUwgJiYgbV90
b2tlbi5tX3R5cGUgPD0gT1JFUVVBTCkKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkxl
ZnQgaGFuZCBzaWRlIG9mIG9wZXJhdG9yICciLCBnZXRUb2tlbigpLCAiJyBtdXN0IGJlIGEgcmVm
ZXJlbmNlIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwMDQsMTMgKzMwMDAsMTMgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgIH0KIGVuZDoKICAgICBp
ZiAoaGFkQXNzaWdubWVudCkKLSAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAgICAgICBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50Kys7CiAgICAgCiAgICAgaWYgKCFUcmVlQnVpbGRlcjo6Q3Jl
YXRlc0FTVCkKICAgICAgICAgcmV0dXJuIGxoczsKICAgICAKICAgICB3aGlsZSAoYXNzaWdubWVu
dFN0YWNrKQotICAgICAgICBsaHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQobG9jYXRpb24s
IGFzc2lnbm1lbnRTdGFjaywgbGhzLCBpbml0aWFsQXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1l
bnRDb3VudCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgIGxocyA9IGNvbnRleHQu
Y3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxB
c3NpZ25tZW50Q291bnQsIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50LCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpKTsKICAgICAKICAgICByZXR1cm4gbGhzOwogfQpAQCAtMzAyNyw3ICszMDIz
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGZhaWxJ
ZkZhbHNlKGN1cnJlbnRTY29wZSgpLT5pc0dlbmVyYXRvcigpLCAiQ2Fubm90IHVzZSB5aWVsZCBl
eHByZXNzaW9uIG91dCBvZiBnZW5lcmF0b3IiKTsKIAogICAgIC8vIGh0dHA6Ly9lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWdlbmVyYXRvci1mdW5jdGlvbi1kZWZpbml0
aW9ucy1zdGF0aWMtc2VtYW50aWNzLWVhcmx5LWVycm9ycwotICAgIGZhaWxJZlRydWUobV9mdW5j
dGlvblBhcnNlUGhhc2UgPT0gRnVuY3Rpb25QYXJzZVBoYXNlOjpQYXJhbWV0ZXJzLCAiQ2Fubm90
IHVzZSB5aWVsZCBleHByZXNzaW9uIHdpdGhpbiBwYXJhbWV0ZXJzIik7CisgICAgZmFpbElmVHJ1
ZShtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSA9PSBGdW5jdGlvblBhcnNlUGhhc2U6
OlBhcmFtZXRlcnMsICJDYW5ub3QgdXNlIHlpZWxkIGV4cHJlc3Npb24gd2l0aGluIHBhcmFtZXRl
cnMiKTsKIAogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwog
ICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90U3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKQEAg
LTMwNTYsOCArMzA1Miw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICBmYWlsSWZGYWxzZShjb25kLCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24iKTsKICAg
ICBpZiAoIW1hdGNoKFFVRVNUSU9OKSkKICAgICAgICAgcmV0dXJuIGNvbmQ7Ci0gICAgbV9ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgbV9ub25MSFNDb3VudCsrOworICAgIG1fcGFy
c2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgIG1fcGFyc2VyU3RhdGUu
bm9uTEhTQ291bnQrKzsKICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzKTsK
ICAgICBUcmVlRXhwcmVzc2lvbiBsaHMgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRl
eHQpOwogICAgIGZhaWxJZkZhbHNlKGxocywgIkNhbm5vdCBwYXJzZSBsZWZ0IGhhbmQgc2lkZSBv
ZiB0ZXJuYXJ5IG9wZXJhdG9yIik7CkBAIC0zMDkyLDE2ICszMDg4LDE2IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRp
b24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBKU1RleHRQ
b3NpdGlvbiBleHByU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaW50IGlu
aXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50OworICAgICAgICBpbnQgaW5pdGlh
bEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIGN1cnJlbnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAg
ICAgICAgZmFpbElmRmFsc2UoY3VycmVudCwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIik7CiAg
ICAgICAgIAotICAgICAgICBjb250ZXh0LmFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKG9wZXJh
bmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCks
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1l
bnRDb3VudCk7CisgICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3Bl
cmFuZFN0YWNrRGVwdGgsIGN1cnJlbnQsIGV4cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fcGFyc2Vy
U3RhdGUuYXNzaWdubWVudENvdW50KTsKICAgICAgICAgaW50IHByZWNlZGVuY2UgPSBpc0JpbmFy
eU9wZXJhdG9yKG1fdG9rZW4ubV90eXBlKTsKICAgICAgICAgaWYgKCFwcmVjZWRlbmNlKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwot
ICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlh
bEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50Kys7
CiAgICAgICAgIGludCBvcGVyYXRvclRva2VuID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIG5l
eHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgICAgICAKQEAgLTMzMDUsMTAg
KzMzMDEsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlT2JqZWN0TGl0ZXJhbChUcmVl
QnVpbGRlciYgY29udGV4dCkKIHsKLSAgICBhdXRvIHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2lu
dCgpOworICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZSA9IHNhdmVMZXhlclN0YXRlKCk7CiAgICAg
Y29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWlsZGVyOjpEb250QnVpbGRT
dHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGFuIG9iamVjdCBs
aXRlcmFsIik7CiAKLSAgICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAg
IGludCBvbGROb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAKICAgICBK
U1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsgICAgCiAgICAgaWYgKG1h
dGNoKENMT1NFQlJBQ0UpKSB7CkBAIC0zMzIwLDcgKzMzMTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5u
b3QgcGFyc2Ugb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkiKTsKIAogICAgIGlmICghbV9zeW50YXhB
bHJlYWR5VmFsaWRhdGVkICYmIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiAoUHJvcGVydHlO
b2RlOjpHZXR0ZXIgfCBQcm9wZXJ0eU5vZGU6OlNldHRlcikpIHsKLSAgICAgICAgcmVzdG9yZVNh
dmVQb2ludChzYXZlUG9pbnQpOworICAgICAgICByZXN0b3JlTGV4ZXJTdGF0ZShsZXhlclN0YXRl
KTsKICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKICAg
ICB9CiAKQEAgLTMzMzgsNyArMzMzNCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICAgICAgcHJvcGVydHkgPSBwYXJzZVByb3BlcnR5KGNvbnRleHQsIGZh
bHNlKTsKICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugb2JqZWN0
IGxpdGVyYWwgcHJvcGVydHkiKTsKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0
ZWQgJiYgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIChQcm9wZXJ0eU5vZGU6OkdldHRlciB8
IFByb3BlcnR5Tm9kZTo6U2V0dGVyKSkgewotICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChz
YXZlUG9pbnQpOworICAgICAgICAgICAgcmVzdG9yZUxleGVyU3RhdGUobGV4ZXJTdGF0ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpY3RPYmplY3RMaXRlcmFsKGNvbnRleHQpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChzaG91bGRDaGVja1Byb3BlcnR5Rm9yVW5kZXJzY29yZVByb3Rv
RHVwbGljYXRlKGNvbnRleHQsIHByb3BlcnR5KSkgewpAQCAtMzM1Myw3ICszMzQ5LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGxvY2F0aW9uID0gdG9r
ZW5Mb2NhdGlvbigpOwogICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDRSwgIn0i
LCAiZW5kIiwgIm9iamVjdCBsaXRlcmFsIik7CiAgICAgCi0gICAgbV9ub25MSFNDb3VudCA9IG9s
ZE5vbkxIU0NvdW50OworICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBvbGROb25MSFND
b3VudDsKICAgICAKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVPYmplY3RMaXRlcmFsKGxvY2F0
aW9uLCBwcm9wZXJ0eUxpc3QpOwogfQpAQCAtMzM2Myw3ICszMzU5LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogewogICAgIGNvbnN1bWVPckZhaWwoT1BFTkJS
QUNFLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGFuIG9iamVjdCBsaXRl
cmFsIik7CiAgICAgCi0gICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAg
ICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogCiAgICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgaWYgKG1hdGNo
KENMT1NFQlJBQ0UpKSB7CkBAIC0zMzk5LDcgKzMzOTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAg
ICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNFLCAifSIsICJlbmQiLCAib2JqZWN0
IGxpdGVyYWwiKTsKIAotICAgIG1fbm9uTEhTQ291bnQgPSBvbGROb25MSFNDb3VudDsKKyAgICBt
X3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CiAKICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVPYmplY3RMaXRlcmFsKGxvY2F0aW9uLCBwcm9wZXJ0eUxpc3QpOwogfQpA
QCAtMzQwOSw3ICszNDA1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogewogICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJSQUNLRVQsIFRyZWVCdWls
ZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAnWycgYXQgdGhlIGJl
Z2lubmluZyBvZiBhbiBhcnJheSBsaXRlcmFsIik7CiAgICAgCi0gICAgaW50IG9sZE5vbkxIU0Nv
dW50ID0gbV9ub25MSFNDb3VudDsKKyAgICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50OwogICAgIAogICAgIGludCBlbGlzaW9ucyA9IDA7CiAgICAgd2hpbGUg
KG1hdGNoKENPTU1BKSkgewpAQCAtMzQ3Myw3ICszNDY5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBzZW1hbnRpY0ZhaWwoIlRoZSAnLi4uJyBv
cGVyYXRvciBzaG91bGQgY29tZSBiZWZvcmUgYSB0YXJnZXQgZXhwcmVzc2lvbiIpOwogICAgIH0K
ICAgICAKLSAgICBtX25vbkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CisgICAgbV9wYXJzZXJT
dGF0ZS5ub25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OwogICAgIAogICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUFycmF5KGxvY2F0aW9uLCBlbGVtZW50TGlzdCk7CiB9CkBAIC0zNTc1LDkgKzM1
NzEsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAg
IHJldHVybiBwYXJzZUFycmF5TGl0ZXJhbChjb250ZXh0KTsKICAgICBjYXNlIE9QRU5QQVJFTjog
ewogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGludCBvbGROb25MSFNDb3VudCA9IG1fbm9uTEhT
Q291bnQ7CisgICAgICAgIGludCBvbGROb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQ7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIHJlc3VsdCA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKLSAgICAgICAgbV9ub25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OworICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CiAgICAgICAgIGhh
bmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VQQVJFTiwgIikiLCAiZW5kIiwgImNvbXBvdW5kIGV4
cHJlc3Npb24iKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNzYwLDIxICsz
NzU2LDIxIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAg
ICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogewotICAgICAgICAgICAgbV9ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRy
aXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJl
c3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKLSAgICAgICAgICAg
IGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKKyAgICAgICAgICAg
IGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CisgICAgICAgICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7
CiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNl
IHN1YnNjcmlwdCBleHByZXNzaW9uIik7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1l
bnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQs
IHRva2VuRW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVC
cmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRz
ICE9IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJl
c3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICBoYW5kbGVQcm9kdWN0
aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNjcmlwdCBleHByZXNzaW9u
Iik7Ci0gICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE9QRU5QQVJFTjogewotICAgICAgICAgICAg
bV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291
bnQgPSBtX25vbkxIU0NvdW50OworICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFs
RXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNl
clN0YXRlLm5vbkxIU0NvdW50OwogICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7CiAgICAgICAg
ICAgICAgICAgbmV3Q291bnQtLTsKICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHBy
ZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKQEAgLTM3ODksMTEgKzM3ODUsMTEg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5zZXRIYXNEaXJlY3RTdXBlcigpOwogICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9j
YXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbm9u
TEhTQ291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhT
Q291bnQgPSBub25MSFNDb3VudDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRE9UOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQr
KzsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsr
OwogICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdz
SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CiAg
ICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCwgIkV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBh
ZnRlciAnLiciKTsKQEAgLTM4MDUsMTEgKzM4MDEsMTEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBjYXNlIFRFTVBMQVRFOiB7CiAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoYmFzZUlzU3VwZXIsICJDYW5ub3QgdXNlIHN1cGVyIGFzIHRh
ZyBmb3IgdGFnZ2VkIHRlbXBsYXRlcyIpOwogICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhw
cmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpbnQgbm9u
TEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0g
bV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKICAgICAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWls
ZGVyOjpUZW1wbGF0ZUxpdGVyYWwgdGVtcGxhdGVMaXRlcmFsID0gcGFyc2VUZW1wbGF0ZUxpdGVy
YWwoY29udGV4dCwgTGV4ZXJUeXBlOjpSYXdTdHJpbmdzQnVpbGRNb2RlOjpCdWlsZFJhd1N0cmlu
Z3MpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UodGVtcGxhdGVMaXRlcmFsLCAiQ2Fubm90IHBh
cnNlIHRlbXBsYXRlIGxpdGVyYWwiKTsKICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0
ZVRhZ2dlZFRlbXBsYXRlKGxvY2F0aW9uLCBiYXNlLCB0ZW1wbGF0ZUxpdGVyYWwsIGV4cHJlc3Np
b25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAg
ICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgICAgICAgICBtX3BhcnNlclN0
YXRlLm5vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC0zODk5LDEwICszODk1LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBs
YXN0T3BlcmF0b3IgPSBtX3Rva2VuLm1fdHlwZTsKLSAgICAgICAgbV9ub25MSFNDb3VudCsrOwor
ICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50Kys7CiAgICAgICAgIGNvbnRleHQuYXBw
ZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVwdGgsIG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0
UG9zaXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25D
b3VudCsrOwogICAgIH0KICAgICBKU1RleHRQb3NpdGlvbiBzdWJFeHByU3RhcnQgPSB0b2tlblN0
YXJ0UG9zaXRpb24oKTsKICAgICBBU1NFUlQoc3ViRXhwclN0YXJ0Lm9mZnNldCA+PSBzdWJFeHBy
U3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKQEAgLTM5MjEsMjAgKzM5MTcsMjAgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGZhaWxJZlRydWVJZlN0cmljdChp
c0V2YWxPckFyZ3VtZW50cyAmJiBtb2RpZmllc0V4cHIsICJDYW5ub3QgbW9kaWZ5ICciLCBtX2xh
c3RJZGVudGlmaWVyLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAgc3dpdGNoICht
X3Rva2VuLm1fdHlwZSkgewogICAgIGNhc2UgUExVU1BMVVM6Ci0gICAgICAgIG1fbm9uVHJpdmlh
bEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1f
cGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX3BhcnNl
clN0YXRlLm5vbkxIU0NvdW50Kys7CiAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4
Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BQbHVzUGx1cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICBtX2Fzc2lnbm1lbnRD
b3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCsrOwogICAgICAg
ICBmYWlsSWZUcnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMsICJDYW5ub3QgbW9kaWZ5ICci
LCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAg
IHNlbWFudGljRmFpbElmVHJ1ZShyZXF1aXJlc0xFeHByLCAiVGhlICIsIG9wZXJhdG9yU3RyaW5n
KGZhbHNlLCBsYXN0T3BlcmF0b3IpLCAiIG9wZXJhdG9yIHJlcXVpcmVzIGEgcmVmZXJlbmNlIGV4
cHJlc3Npb24iKTsKICAgICAgICAgbGFzdE9wZXJhdG9yID0gUExVU1BMVVM7CiAgICAgICAgIG5l
eHQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNSU5VU01JTlVTOgotICAgICAgICBtX25v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAg
ICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAg
bV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCsrOwogICAgICAgICBleHByID0gY29udGV4dC5tYWtl
UG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICBtX2Fz
c2lnbm1lbnRDb3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCsr
OwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9s
YXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1v
ZGUiKTsKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHJlcXVpcmVzTEV4cHIsICJUaGUgIiwg
b3BlcmF0b3JTdHJpbmcoZmFsc2UsIGxhc3RPcGVyYXRvciksICIgb3BlcmF0b3IgcmVxdWlyZXMg
YSByZWZlcmVuY2UgZXhwcmVzc2lvbiIpOwogICAgICAgICBsYXN0T3BlcmF0b3IgPSBQTFVTUExV
UzsKQEAgLTM5NjgsMTIgKzM5NjQsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgICAgICBjYXNlIFBMVVNQTFVTOgogICAgICAgICBjYXNlIEFVVE9QTFVT
UExVUzoKICAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tl
blN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwotICAgICAgICAgICAgbV9hc3Np
Z25tZW50Q291bnQrKzsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50
Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNSU5VU01JTlVTOgogICAgICAg
ICBjYXNlIEFVVE9NSU5VU01JTlVTOgogICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBy
ZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgY29udGV4dC51bmFyeVRva2Vu
U3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5kKTsK
LSAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgICAgICBtX3BhcnNlclN0
YXRlLmFzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
VFlQRU9GOgogICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVR5cGVPZk5vZGUobG9jYXRp
b24sIGV4cHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAxOTUzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjY4LDIyICsxMjY4LDY3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiAhbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCk7CiAgICAgfQogCi0gICAgc3RydWN0IFNhdmVQ
b2ludCB7CisgICAgZW51bSBjbGFzcyBGdW5jdGlvblBhcnNlUGhhc2UgeyBQYXJhbWV0ZXJzLCBC
b2R5IH07CisgICAgc3RydWN0IFBhcnNlclN0YXRlIHsKKyAgICAgICAgaW50IGFzc2lnbm1lbnRD
b3VudCB7IDAgfTsKKyAgICAgICAgaW50IG5vbkxIU0NvdW50IHsgMCB9OworICAgICAgICBpbnQg
bm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCB7IDAgfTsKKyAgICAgICAgRnVuY3Rpb25QYXJzZVBo
YXNlIGZ1bmN0aW9uUGFyc2VQaGFzZSB7IEZ1bmN0aW9uUGFyc2VQaGFzZTo6Qm9keSB9OworICAg
IH07CisKKyAgICAvLyBJZiB5b3UncmUgdXNpbmcgdGhpcyBkaXJlY3RseSwgeW91IHNob3VsZCBz
dG9wIGFuZCB0aGluayBmb3IgYSBzZWNvbmQuIFlvdQorICAgIC8vIHByb2JhYmx5IG5lZWQgdG8g
YmUgdXNpbmcgYSBTYXZlUG9pbnQuCisgICAgQUxXQVlTX0lOTElORSBQYXJzZXJTdGF0ZSBzYXZl
UGFyc2VyU3RhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VyU3RhdGU7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVQYXJzZXJTdGF0ZShjb25zdCBQYXJz
ZXJTdGF0ZSYgc3RhdGUpCisgICAgeworICAgICAgICBtX3BhcnNlclN0YXRlID0gc3RhdGU7Cisg
ICAgfQorCisgICAgc3RydWN0IExleGVyU3RhdGUgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQ7
CiAgICAgICAgIHVuc2lnbmVkIG9sZExpbmVTdGFydE9mZnNldDsKICAgICAgICAgdW5zaWduZWQg
b2xkTGFzdExpbmVOdW1iZXI7CiAgICAgICAgIHVuc2lnbmVkIG9sZExpbmVOdW1iZXI7CiAgICAg
fTsKLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIFNhdmVQb2ludCBjcmVhdGVTYXZlUG9pbnRGb3JF
cnJvcigpCisKKyAgICAvLyBJZiB5b3UncmUgdXNpbmcgdGhpcyBkaXJlY3RseSwgeW91IHNob3Vs
ZCBzdG9wIGFuZCB0aGluayBmb3IgYSBzZWNvbmQuIFlvdQorICAgIC8vIHByb2JhYmx5IG5lZWQg
dG8gYmUgdXNpbmcgYSBTYXZlUG9pbnQuIGkuZSwgaWYgeW91IHBhcnNlIGFueSBraW5kIG9mIAor
ICAgIC8vIEFzc2lnbm1lbnRFeHByZXNzaW9uIGJldHdlZW4gc2F2aW5nL3Jlc3RvcmluZywgeW91
IHNob3VsZCBkZWZpbml0ZWx5IAorICAgIC8vIG5vdCBiZSB1c2luZyB0aGlzIGRpcmVjdGx5Lgor
ICAgIEFMV0FZU19JTkxJTkUgTGV4ZXJTdGF0ZSBzYXZlTGV4ZXJTdGF0ZSgpCiAgICAgewotICAg
ICAgICBTYXZlUG9pbnQgcmVzdWx0OworICAgICAgICBMZXhlclN0YXRlIHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0LnN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0Owog
ICAgICAgICByZXN1bHQub2xkTGluZVN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxp
bmVTdGFydE9mZnNldDsKICAgICAgICAgcmVzdWx0Lm9sZExhc3RMaW5lTnVtYmVyID0gbV9sZXhl
ci0+bGFzdExpbmVOdW1iZXIoKTsKICAgICAgICAgcmVzdWx0Lm9sZExpbmVOdW1iZXIgPSBtX2xl
eGVyLT5saW5lTnVtYmVyKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVMZXhlclN0YXRlKGNvbnN0IExleGVyU3RhdGUmIGxl
eGVyU3RhdGUpCisgICAgeworICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXQobGV4ZXJTdGF0ZS5z
dGFydE9mZnNldCwgbGV4ZXJTdGF0ZS5vbGRMaW5lU3RhcnRPZmZzZXQpOworICAgICAgICBuZXh0
KCk7CisgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKGxleGVyU3RhdGUub2xkTGFz
dExpbmVOdW1iZXIpOworICAgICAgICBtX2xleGVyLT5zZXRMaW5lTnVtYmVyKGxleGVyU3RhdGUu
b2xkTGluZU51bWJlcik7CisgICAgfQorCisgICAgc3RydWN0IFNhdmVQb2ludCB7CisgICAgICAg
IFBhcnNlclN0YXRlIHBhcnNlclN0YXRlOworICAgICAgICBMZXhlclN0YXRlIGxleGVyU3RhdGU7
CisgICAgfTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFNhdmVQb2ludCBjcmVhdGVTYXZlUG9p
bnRGb3JFcnJvcigpCisgICAgeworICAgICAgICBTYXZlUG9pbnQgcmVzdWx0OworICAgICAgICBy
ZXN1bHQucGFyc2VyU3RhdGUgPSBzYXZlUGFyc2VyU3RhdGUoKTsKKyAgICAgICAgcmVzdWx0Lmxl
eGVyU3RhdGUgPSBzYXZlTGV4ZXJTdGF0ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIFNhdmVQb2ludCBjcmVhdGVTYXZlUG9pbnQoKQog
ICAgIHsKQEAgLTEyOTQsMTAgKzEzMzksOCBAQCBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCByZXN0b3JlU2F2ZVBvaW50V2l0aEVycm9yKGNvbnN0IFNhdmVQb2ludCYgc2F2ZVBvaW50
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgewogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1lc3NhZ2U7Ci0gICAgICAgIG1fbGV4ZXItPnNldE9mZnNldChzYXZlUG9pbnQuc3RhcnRPZmZz
ZXQsIHNhdmVQb2ludC5vbGRMaW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBuZXh0KCk7Ci0gICAg
ICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKHNhdmVQb2ludC5vbGRMYXN0TGluZU51bWJl
cik7Ci0gICAgICAgIG1fbGV4ZXItPnNldExpbmVOdW1iZXIoc2F2ZVBvaW50Lm9sZExpbmVOdW1i
ZXIpOworICAgICAgICByZXN0b3JlTGV4ZXJTdGF0ZShzYXZlUG9pbnQubGV4ZXJTdGF0ZSk7Cisg
ICAgICAgIHJlc3RvcmVQYXJzZXJTdGF0ZShzYXZlUG9pbnQucGFyc2VyU3RhdGUpOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlU2F2ZVBvaW50KGNvbnN0IFNhdmVQb2lu
dCYgc2F2ZVBvaW50KQpAQCAtMTMwNSw0OSArMTM0OCwyMiBAQCBwcml2YXRlOgogICAgICAgICBy
ZXN0b3JlU2F2ZVBvaW50V2l0aEVycm9yKHNhdmVQb2ludCwgU3RyaW5nKCkpOwogICAgIH0KIAot
ICAgIGVudW0gY2xhc3MgRnVuY3Rpb25QYXJzZVBoYXNlIHsgUGFyYW1ldGVycywgQm9keSB9Owot
ICAgIHN0cnVjdCBQYXJzZXJTdGF0ZSB7Ci0gICAgICAgIGludCBhc3NpZ25tZW50Q291bnQ7Ci0g
ICAgICAgIGludCBub25MSFNDb3VudDsKLSAgICAgICAgaW50IG5vblRyaXZpYWxFeHByZXNzaW9u
Q291bnQ7Ci0gICAgICAgIEZ1bmN0aW9uUGFyc2VQaGFzZSBmdW5jdGlvblBhcnNlUGhhc2U7Ci0g
ICAgfTsKLQotICAgIEFMV0FZU19JTkxJTkUgUGFyc2VyU3RhdGUgc2F2ZVN0YXRlKCkKLSAgICB7
Ci0gICAgICAgIFBhcnNlclN0YXRlIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmFzc2lnbm1lbnRD
b3VudCA9IG1fYXNzaWdubWVudENvdW50OwotICAgICAgICByZXN1bHQubm9uTEhTQ291bnQgPSBt
X25vbkxIU0NvdW50OwotICAgICAgICByZXN1bHQubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCA9
IG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAgcmVzdWx0LmZ1bmN0aW9uUGFy
c2VQaGFzZSA9IG1fZnVuY3Rpb25QYXJzZVBoYXNlOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlU3RhdGUoY29uc3QgUGFyc2Vy
U3RhdGUmIHN0YXRlKQotICAgIHsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291bnQgPSBzdGF0ZS5h
c3NpZ25tZW50Q291bnQ7Ci0gICAgICAgIG1fbm9uTEhTQ291bnQgPSBzdGF0ZS5ub25MSFNDb3Vu
dDsKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gc3RhdGUubm9uVHJpdmlh
bEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAgbV9mdW5jdGlvblBhcnNlUGhhc2UgPSBzdGF0ZS5m
dW5jdGlvblBhcnNlUGhhc2U7Ci0gICAgfQotCiAgICAgVk0qIG1fdm07CiAgICAgY29uc3QgU291
cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJlbmEgbV9wYXJzZXJBcmVuYTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVy
cyogbV9wYXJhbWV0ZXJzIHsgbnVsbHB0ciB9OworCisgICAgUGFyc2VyU3RhdGUgbV9wYXJzZXJT
dGF0ZTsKICAgICAKICAgICBib29sIG1faGFzU3RhY2tPdmVyZmxvdzsKICAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiAgICAgSlNUb2tlbiBtX3Rva2VuOwogICAgIGJvb2wgbV9hbGxvd3NJbjsK
ICAgICBKU1RleHRQb3NpdGlvbiBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uOwotICAgIGludCBtX2Fz
c2lnbm1lbnRDb3VudDsKICAgICBpbnQgbV9ub25MSFNDb3VudDsKICAgICBib29sIG1fc3ludGF4
QWxyZWFkeVZhbGlkYXRlZDsKICAgICBpbnQgbV9zdGF0ZW1lbnREZXB0aDsKLSAgICBpbnQgbV9u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50OwotICAgIEZ1bmN0aW9uUGFyc2VQaGFzZSBtX2Z1bmN0
aW9uUGFyc2VQaGFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBtX2xhc3RJZGVudGlmaWVyOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIG1fbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBSZWZQdHI8U291
cmNlUHJvdmlkZXJDYWNoZT4gbV9mdW5jdGlvbkNhY2hlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269403</attachid>
            <date>2016-01-20 16:54:44 -0800</date>
            <delta_ts>2016-01-22 11:43:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>31474</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTAxLTIwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgUGFyc2VyOjpjcmVhdGVTYXZlUG9pbnQgaXMgYSBm
b290IGd1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzMjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIHByZXZpb3VzIHVzZSBvZiBTYXZlUG9pbnQgKHVwIHVudGlsIHRoaXMgcGF0Y2gpCisgICAg
ICAgIHJlYWxseSBtZWFudCB0aGF0IHdlJ3JlIHNhdmluZyB0aGUgTGV4ZXJTdGF0ZS4gVGhpcwor
ICAgICAgICB3YXMgc28gcG9vcmx5IG5hbWVkIHRoYXQgaXQgd2FzIGJlaW5nIG1pc3VzZWQgYWxs
IG92ZXIKKyAgICAgICAgb3VyIHBhcnNlci4gRm9yIGV4YW1wbGUsIGFueXRoaW5nIHRoYXQgcGFy
c2VkIGFuCisgICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uIGJldHdlZW4gc2F2aW5nL3Jlc3Rv
cmluZyByZWFsbHkKKyAgICAgICAgd2FudGVkIHRvIHNhdmUgYm90aCBMZXhlciBzdGF0ZSBhbmQg
UGFyc2VyIHN0YXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBTYXZlUG9pbnQgdG8g
bWVhbiBzYXZlIGFsbCB0aGUKKyAgICAgICAgc3RhdGUuIFRoZSBvbGQgU2F2ZVBvaW50IGlzIHJl
bmFtZWQgdG8gTGV4ZXJTdGF0ZSB3aXRoCisgICAgICAgIGNvcnJlc3BvbmRpbmcgPHNhdmUvcmVz
dG9yZT5MZXhlclN0YXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgVGhlIG9sZCA8c2F2ZS9yZXN0b3Jl
PlN0YXRlKCkgZnVuY3Rpb24gaXMgcmVuYW1lZCB0bworICAgICAgICA8c2F2ZS9yZXN0b3JlPlBh
cnNlclN0YXRlKCkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCB0aGUgY2Fs
bCBzaXRlcyBvZiB0aGUgb2xkIAorICAgICAgICBjcmVhdGVTYXZlUG9pbnQoKSB0byB1c2Ugc2F2
ZUxleGVyU3RhdGUoKSB3aGVuIHRoZXkKKyAgICAgICAgZG9uJ3QgbmVlZCB0aGUgd2hvbGUga2l0
IGFuZCBjYWJvb2RsZS4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6aXNBcnJvd0Z1bmN0aW9uUGFyYW1ldGVycyk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0YXRlbWVudExpc3RJdGVtKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VFeHBvcnREZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU9iamVjdExpdGVyYWwpOgorICAgICAgICAqIHBhcnNl
ci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOgorICAgICAgICAo
SlNDOjpQYXJzZXI6OnBvcFNjb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBv
cFNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpoYXNFcnJvcik6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6c2F2ZVBhcnNlclN0YXRlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpyZXN0b3Jl
UGFyc2VyU3RhdGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnNhdmVMZXhlclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyOjpyZXN0b3JlTGV4ZXJTdGF0ZSk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6Y3JlYXRlU2F2ZVBvaW50Rm9yRXJyb3IpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNy
ZWF0ZVNhdmVQb2ludCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVNhdmVQb2ludFdp
dGhFcnJvcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVzdG9yZVNhdmVQb2ludCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjo6c2F2ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UGFy
c2VyOjpyZXN0b3JlU3RhdGUpOiBEZWxldGVkLgorCiAyMDE2LTAxLTIwICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZpeCBhIHR5cG8gaW4g
dGhlIEFpciBkZWZpbml0aW9uIG9mIENlaWxEb3VibGUvQ2VpbEZsb2F0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTUzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
MCwxMiArMjAwLDggQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcigKICAgICAsIG1fc291cmNl
KCZzb3VyY2UpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2FsbG93
c0luKHRydWUpCi0gICAgLCBtX2Fzc2lnbm1lbnRDb3VudCgwKQotICAgICwgbV9ub25MSFNDb3Vu
dCgwKQogICAgICwgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKHNvdXJjZS5wcm92aWRlcigpLT5p
c1ZhbGlkKCkpCiAgICAgLCBtX3N0YXRlbWVudERlcHRoKDApCi0gICAgLCBtX25vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQoMCkKLSAgICAsIG1fZnVuY3Rpb25QYXJzZVBoYXNlKEZ1bmN0aW9uUGFy
c2VQaGFzZTo6Qm9keSkKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFzdEZ1
bmN0aW9uTmFtZShudWxscHRyKQogICAgICwgbV9zb3VyY2VFbGVtZW50cygwKQpAQCAtMjQ1LDcg
KzI0MSw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb24KICAgICBB
U1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBj
b25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0g
Y3VycmVudFNjb3BlKCk7CiAgICAgc2NvcGUtPnNldElzTGV4aWNhbFNjb3BlKCk7Ci0gICAgU2V0
Rm9yU2NvcGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlvblBhcnNlUGhhc2VQb2lzb25lciht
X2Z1bmN0aW9uUGFyc2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBoYXNlOjpCb2R5KTsKKyAgICBTZXRG
b3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1bmN0aW9uUGFyc2VQaGFzZVBvaXNvbmVyKG1f
cGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBhcnNlUGhhc2U6OkJvZHkp
OwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiA9IGZhbHNlOwogICAg
IGlmIChtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKQEAgLTQwMyw3ICszOTksNyBA
QCBib29sIFBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QCiAgICAgICAgICAgICAv
LyBXZSBtYWtlIGZha2Ugc2NvcGUsIG90aGVyd2lzZSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMgd2ls
bCBhZGQgdmFyaWFibGUgdG8gY3VycmVudCBzY29wZSB0aGF0IGxlYWQgdG8gZXJyb3JzCiAgICAg
ICAgICAgICBBdXRvUG9wU2NvcGVSZWYgZmFrZVNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAg
ICAgICAgICAgIGZha2VTY29wZS0+c2V0U291cmNlUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZTo6
QXJyb3dGdW5jdGlvbk1vZGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1bnNp
Z25lZCBwYXJhbWV0ZXJzQ291bnQgPSAwOwogICAgICAgICAgICAgaXNBcnJvd0Z1bmN0aW9uID0g
cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIHN5bnRheENoZWNrZXIuY3JlYXRl
Rm9ybWFsUGFyYW1ldGVyTGlzdCgpLCBwYXJhbWV0ZXJzQ291bnQpICYmIGNvbnN1bWUoQ0xPU0VQ
QVJFTikgJiYgbWF0Y2goQVJST1dGVU5DVElPTik7CiAgICAgICAgICAgICAgICAgCkBAIC01Njks
NyArNTY1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAg
IGNhc2UgTEVUOiB7CiAgICAgICAgIGJvb2wgc2hvdWxkUGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
ID0gdHJ1ZTsKICAgICAgICAgaWYgKCFzdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIFNhdmVQ
b2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKKyAgICAgICAgICAgIExleGVyU3Rh
dGUgc2F2ZVBvaW50ID0gc2F2ZUxleGVyU3RhdGUoKTsKICAgICAgICAgICAgIG5leHQoKTsKICAg
ICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIGBtYXRjaChJREVOVCkgfHwgbWF0Y2goTEVU
KSB8fCBtYXRjaChZSUVMRClgIGFuZCBkb24ndCB1c2UgYG1hdGNoU3BlY0lkZW50aWZpZXIoKWAu
CiAgICAgICAgICAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIGZhbGwgaW50byBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb24gcGF0aCBldmVuIGlmICJ5aWVsZCIgaXMgbm90IHRyZWF0ZWQgYXMgYW4gSWRl
bnRpZmllci4KQEAgLTU3OCw3ICs1NzQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICAvLyB0byByYWlzZSBjb25zaXN0ZW50IGVycm9ycyBi
ZXR3ZWVuICJ2YXIiLCAiY29uc3QiIGFuZCAibGV0Ii4KICAgICAgICAgICAgIGlmICghKG1hdGNo
KElERU5UKSB8fCBtYXRjaChMRVQpIHx8IG1hdGNoKFlJRUxEKSkgJiYgIW1hdGNoKE9QRU5CUkFD
RSkgJiYgIW1hdGNoKE9QRU5CUkFDS0VUKSkKICAgICAgICAgICAgICAgICBzaG91bGRQYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQo
c2F2ZVBvaW50KTsKKyAgICAgICAgICAgIHJlc3RvcmVMZXhlclN0YXRlKHNhdmVQb2ludCk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZFBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbikKICAg
ICAgICAgICAgIHJlc3VsdCA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBEZWNs
YXJhdGlvblR5cGU6OkxldERlY2xhcmF0aW9uKTsKQEAgLTg5Nyw3ICs4OTMsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGVzdHJ1Y3R1cmlu
Z1BhdHRlcm4oVHJlZUJ1aWxkZXImIGNvbnRleHQsIERlc3RydWN0dXJpbmdLaW5kIGtpbmQsIEV4
cG9ydFR5cGUgZXhwb3J0VHlwZSwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZp
ZXIsIGJvb2wqIGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuLCBBc3NpZ25tZW50Q29udGV4dCBiaW5k
aW5nQ29udGV4dCwgaW50IGRlcHRoKQogewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKLSAg
ICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgIGludCBub25MSFNDb3VudCA9
IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJu
IHBhdHRlcm47CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgIGNhc2UgT1BFTkJS
QUNLRVQ6IHsKQEAgLTEwNTIsNyArMTA0OCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZURlc3RydWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KLSAgICBtX25vbkxI
U0NvdW50ID0gbm9uTEhTQ291bnQ7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5v
bkxIU0NvdW50OwogICAgIHJldHVybiBwYXR0ZXJuOwogfQogCkBAIC0xMDc0LDcgKzEwNzAsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgaW50IHN0YXJ0
TGluZSA9IHRva2VuTGluZSgpOwogICAgIG5leHQoKTsKICAgICBoYW5kbGVQcm9kdWN0aW9uT3JG
YWlsKE9QRU5QQVJFTiwgIigiLCAic3RhcnQiLCAiZm9yLWxvb3AgaGVhZGVyIik7Ci0gICAgaW50
IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3Bh
cnNlclN0YXRlLm5vbkxIU0NvdW50OwogICAgIGludCBkZWNsYXJhdGlvbnMgPSAwOwogICAgIEpT
VGV4dFBvc2l0aW9uIGRlY2xzU3RhcnQ7CiAgICAgSlNUZXh0UG9zaXRpb24gZGVjbHNFbmQ7CkBA
IC0xMjI2LDcgKzEyMjIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lCiAgICAgCiAgICAgLy8gRm9yLWluIGFuZCBGb3Itb2YgbG9vcAogZW51bWVyYXRpb25Mb29w
OgotICAgIGZhaWxJZkZhbHNlKG5vbkxIU0NvdW50ID09IG1fbm9uTEhTQ291bnQsICJFeHBlY3Rl
ZCBhIHJlZmVyZW5jZSBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYW4gZW51bWVyYXRpb24gc3Rh
dGVtZW50Iik7CisgICAgZmFpbElmRmFsc2Uobm9uTEhTQ291bnQgPT0gbV9wYXJzZXJTdGF0ZS5u
b25MSFNDb3VudCwgIkV4cGVjdGVkIGEgcmVmZXJlbmNlIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBv
ZiBhbiBlbnVtZXJhdGlvbiBzdGF0ZW1lbnQiKTsKICAgICBib29sIGlzT2ZFbnVtZXJhdGlvbiA9
IGZhbHNlOwogICAgIGlmICghY29uc3VtZShJTlRPS0VOKSkgewogICAgICAgICBmYWlsSWZGYWxz
ZShtYXRjaChJREVOVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPm9mLCAiRXhwZWN0ZWQgZWl0aGVyICdpbicgb3IgJ29mJyBpbiBlbnVtZXJhdGlvbiBz
eW50YXgiKTsKQEAgLTE2NDcsMTEgKzE2NDMsMTEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBkaXJlY3RpdmUgPSBtX3Rva2VuLm1fZGF0YS5pZGVu
dDsKICAgICAgICAgaWYgKGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGgpCiAgICAgICAgICAgICAqZGly
ZWN0aXZlTGl0ZXJhbExlbmd0aCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQgLSBtX3Rv
a2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7Ci0gICAgICAgIG5vblRyaXZpYWxFeHByZXNzaW9u
Q291bnQgPSBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7CisgICAgICAgIG5vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7
CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFRyZWVTdGF0ZW1l
bnQgZXhwclN0YXRlbWVudCA9IHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChjb250ZXh0KTsKLSAg
ICAgICAgaWYgKGRpcmVjdGl2ZSAmJiBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ICE9IG1fbm9u
VHJpdmlhbEV4cHJlc3Npb25Db3VudCkKKyAgICAgICAgaWYgKGRpcmVjdGl2ZSAmJiBub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50ICE9IG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25D
b3VudCkKICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IDA7CiAgICAgICAgIHJlc3VsdCA9IGV4cHJT
dGF0ZW1lbnQ7CiAgICAgICAgIGJyZWFrOwpAQCAtMTc2NSw3ICsxNzYxLDcgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4gdGVtcGxhdGUgPAogICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJM
aXN0IHBhcmFtZXRlckxpc3QgPSBjb250ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKTsK
ICAgICBmdW5jdGlvbkluZm8ucGFyYW1ldGVycyA9IHBhcmFtZXRlckxpc3Q7CiAgICAgZnVuY3Rp
b25JbmZvLnN0YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OwotICAgIFNldEZvclNjb3BlPEZ1
bmN0aW9uUGFyc2VQaGFzZT4gZnVuY3Rpb25QYXJzZVBoYXNlUG9pc29uZXIobV9mdW5jdGlvblBh
cnNlUGhhc2UsIEZ1bmN0aW9uUGFyc2VQaGFzZTo6UGFyYW1ldGVycyk7CisgICAgU2V0Rm9yU2Nv
cGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlvblBhcnNlUGhhc2VQb2lzb25lcihtX3BhcnNl
clN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBoYXNlOjpQYXJhbWV0ZXJz
KTsKICAgICAKICAgICBpZiAobW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25N
b2RlKSB7CiAgICAgICAgIGlmICghbWF0Y2goSURFTlQpICYmICFtYXRjaChPUEVOUEFSRU4pKSB7
CkBAIC0xODYyLDcgKzE4NTgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyCiAgICAgYm9vbCB1cHBlclNjb3BlSXNHZW5lcmF0b3IgPSBjdXJyZW50U2NvcGUoKS0+
aXNHZW5lcmF0b3IoKTsKICAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBw
dXNoU2NvcGUoKSk7CiAgICAgZnVuY3Rpb25TY29wZS0+c2V0U291cmNlUGFyc2VNb2RlKG1vZGUp
OwotICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQaGFzZT4gZnVuY3Rpb25QYXJzZVBoYXNl
UG9pc29uZXIobV9mdW5jdGlvblBhcnNlUGhhc2UsIEZ1bmN0aW9uUGFyc2VQaGFzZTo6Qm9keSk7
CisgICAgU2V0Rm9yU2NvcGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlvblBhcnNlUGhhc2VQ
b2lzb25lcihtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBo
YXNlOjpCb2R5KTsKICAgICBpbnQgZnVuY3Rpb25OYW1lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRp
b24uc3RhcnRPZmZzZXQ7CiAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdEZ1bmN0aW9uTmFtZSA9
IG1fbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBudWxscHRyOwpA
QCAtMjAwMyw3ICsxOTk5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBh
cnNlcgogICAgIH0KICAgICAKICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25O
YW1lOwotICAgIFBhcnNlclN0YXRlIG9sZFN0YXRlID0gc2F2ZVN0YXRlKCk7CisgICAgUGFyc2Vy
U3RhdGUgb2xkU3RhdGUgPSBzYXZlUGFyc2VyU3RhdGUoKTsKIAogICAgIGF1dG8gcGVyZm9ybVBh
cnNpbmdGdW5jdGlvbkJvZHkgPSBbJl0gewogICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJv
ZHkoY29udGV4dCwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0
YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3RvcktpbmQs
IGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbkluZm8ucGFy
YW1ldGVyQ291bnQsIG1vZGUpOwpAQCAtMjAyNiw3ICsyMDIyLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgIH0gZWxzZQogICAgICAgICBmdW5jdGlvbklu
Zm8uYm9keSA9IHBlcmZvcm1QYXJzaW5nRnVuY3Rpb25Cb2R5KCk7CiAgICAgCi0gICAgcmVzdG9y
ZVN0YXRlKG9sZFN0YXRlKTsKKyAgICByZXN0b3JlUGFyc2VyU3RhdGUob2xkU3RhdGUpOwogICAg
IGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9m
IHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKICAgICBjb250ZXh0LnNldEVu
ZE9mZnNldChmdW5jdGlvbkluZm8uYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKICAg
ICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIGZ1bmN0aW9uSW5mby5uYW1lKSB7
CkBAIC0yMTkzLDExICsyMTg5LDExIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUNsYXNzRXgKICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCAic3RhdGlj
IiBpcyBhIG5vbi1yZXNlcnZlZCBrZXl3b3JkIGluIG5vbi1zdHJpY3QgbW9kZS4KICAgICAgICAg
Ym9vbCBpc1N0YXRpY01ldGhvZCA9IGZhbHNlOwogICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURf
SUZfU1RSSUNUKSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+c3RhdGljS2V5d29yZCkgewotICAgICAgICAgICAgYXV0byBzYXZlUG9pbnQgPSBjcmVhdGVT
YXZlUG9pbnQoKTsKKyAgICAgICAgICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZSA9IHNhdmVMZXhl
clN0YXRlKCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpZiAobWF0Y2goT1BF
TlBBUkVOKSkgewogICAgICAgICAgICAgICAgIC8vIFJlcGFyc2UgInN0YXRpYygpIiBhcyBhIG1l
dGhvZCBuYW1lZCAic3RhdGljIi4KLSAgICAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNh
dmVQb2ludCk7CisgICAgICAgICAgICAgICAgcmVzdG9yZUxleGVyU3RhdGUobGV4ZXJTdGF0ZSk7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBpc1N0YXRpY01ldGhvZCA9IHRy
dWU7CiAgICAgICAgIH0KQEAgLTI3MTEsNyArMjcwNyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgVHJlZVN0YXRlbWVudCByZXN1bHQgPSAwOwog
ICAgICAgICBib29sIGlzRnVuY3Rpb25PckNsYXNzRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciogbG9jYWxOYW1lID0gbnVsbHB0cjsKLSAgICAgICAgU2F2ZVBv
aW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOworICAgICAgICBMZXhlclN0YXRlIGxl
eGVyU3RhdGUgPSBzYXZlTGV4ZXJTdGF0ZSgpOwogCiAgICAgICAgIGJvb2wgc3RhcnRzV2l0aEZ1
bmN0aW9uID0gbWF0Y2goRlVOQ1RJT04pOwogICAgICAgICBpZiAoc3RhcnRzV2l0aEZ1bmN0aW9u
CkBAIC0yNzI5LDcgKzI3MjUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAjZW5kaWYKICAgICAgICAgICAgIGlmIChtYXRjaChJREVOVCkpCiAgICAgICAgICAg
ICAgICAgbG9jYWxOYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgICAgICByZXN0
b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CisgICAgICAgICAgICByZXN0b3JlTGV4ZXJTdGF0ZShs
ZXhlclN0YXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb2NhbE5hbWUpIHsKQEAgLTI4
NzgsOCArMjg3NCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MK
ICAgICBpZiAoIW1hdGNoKENPTU1BKSkKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgbmV4dCgp
OwotICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgIG1fbm9uTEhTQ291bnQr
KzsKKyAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICBt
X3BhcnNlclN0YXRlLm5vbkxIU0NvdW50Kys7CiAgICAgVHJlZUV4cHJlc3Npb24gcmlnaHQgPSBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHJpZ2h0
LCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24gaW4gYSBjb21tYSBleHByZXNzaW9uIik7CiAgICAg
Y29udGV4dC5zZXRFbmRPZmZzZXQocmlnaHQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ub2Zmc2V0
KTsKQEAgLTI5MTksOCArMjkxNSw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4g
VHJlZUV4cHIKICAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7CiAgICAgSlNUZXh0UG9zaXRpb24g
c3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRp
b24odG9rZW5Mb2NhdGlvbigpKTsKLSAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1f
YXNzaWdubWVudENvdW50OwotICAgIGludCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0Nv
dW50OworICAgIGludCBpbml0aWFsQXNzaWdubWVudENvdW50ID0gbV9wYXJzZXJTdGF0ZS5hc3Np
Z25tZW50Q291bnQ7CisgICAgaW50IGluaXRpYWxOb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUu
bm9uTEhTQ291bnQ7CiAgICAgYm9vbCBtYXliZUFzc2lnbm1lbnRQYXR0ZXJuID0gbWF0Y2goT1BF
TkJSQUNFKSB8fCBtYXRjaChPUEVOQlJBQ0tFVCk7CiAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9
IGNyZWF0ZVNhdmVQb2ludCgpOwogCkBAIC0yOTU1LDcgKzI5NTEsNyBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgfQogCiAgICAgZmFpbElmRmFsc2UobGhz
LCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24iKTsKLSAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50
ICE9IG1fbm9uTEhTQ291bnQpIHsKKyAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fcGFy
c2VyU3RhdGUubm9uTEhTQ291bnQpIHsKICAgICAgICAgaWYgKG1fdG9rZW4ubV90eXBlID49IEVR
VUFMICYmIG1fdG9rZW4ubV90eXBlIDw9IE9SRVFVQUwpCiAgICAgICAgICAgICBzZW1hbnRpY0Zh
aWwoIkxlZnQgaGFuZCBzaWRlIG9mIG9wZXJhdG9yICciLCBnZXRUb2tlbigpLCAiJyBtdXN0IGJl
IGEgcmVmZXJlbmNlIik7CiAKQEAgLTI5ODIsMTEgKzI5NzgsMTEgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Z290byBlbmQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwog
ICAgICAgICBoYWRBc3NpZ25tZW50ID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC5hc3NpZ25tZW50
U3RhY2tBcHBlbmQoYXNzaWdubWVudFN0YWNrLCBsaHMsIHN0YXJ0LCB0b2tlblN0YXJ0UG9zaXRp
b24oKSwgbV9hc3NpZ25tZW50Q291bnQsIG9wKTsKKyAgICAgICAgY29udGV4dC5hc3NpZ25tZW50
U3RhY2tBcHBlbmQoYXNzaWdubWVudFN0YWNrLCBsaHMsIHN0YXJ0LCB0b2tlblN0YXJ0UG9zaXRp
b24oKSwgbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIG9wKTsKICAgICAgICAgc3RhcnQg
PSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAg
ICAgICAgbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgbmV4dChUcmVl
QnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYg
bV9sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7CiAgICAgICAgICAg
ICBmYWlsSWZUcnVlSWZTdHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9sYXN0
SWRlbnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7CkBAIC0y
OTk2LDcgKzI5OTIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
CiAgICAgICAgIH0KICAgICAgICAgbGhzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250
ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UobGhzLCAiQ2Fubm90IHBhcnNlIHRoZSByaWdodCBo
YW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uIik7Ci0gICAgICAgIGlmIChpbml0
aWFsTm9uTEhTQ291bnQgIT0gbV9ub25MSFNDb3VudCkgeworICAgICAgICBpZiAoaW5pdGlhbE5v
bkxIU0NvdW50ICE9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQpIHsKICAgICAgICAgICAgIGlm
IChtX3Rva2VuLm1fdHlwZSA+PSBFUVVBTCAmJiBtX3Rva2VuLm1fdHlwZSA8PSBPUkVRVUFMKQog
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiTGVmdCBoYW5kIHNpZGUgb2Ygb3BlcmF0b3Ig
JyIsIGdldFRva2VuKCksICInIG11c3QgYmUgYSByZWZlcmVuY2UiKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzAwNCwxMyArMzAwMCwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByCiAgICAgfQogZW5kOgogICAgIGlmIChoYWRBc3NpZ25tZW50KQotICAgICAg
ICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQrKzsK
ICAgICAKICAgICBpZiAoIVRyZWVCdWlsZGVyOjpDcmVhdGVzQVNUKQogICAgICAgICByZXR1cm4g
bGhzOwogICAgIAogICAgIHdoaWxlIChhc3NpZ25tZW50U3RhY2spCi0gICAgICAgIGxocyA9IGNv
bnRleHQuY3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGlu
aXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudENvdW50LCBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpKTsKKyAgICAgICAgbGhzID0gY29udGV4dC5jcmVhdGVBc3NpZ25tZW50KGxvY2F0aW9u
LCBhc3NpZ25tZW50U3RhY2ssIGxocywgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgbV9wYXJzZXJT
dGF0ZS5hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgIAogICAg
IHJldHVybiBsaHM7CiB9CkBAIC0zMDI3LDcgKzMwMjMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgZmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlz
R2VuZXJhdG9yKCksICJDYW5ub3QgdXNlIHlpZWxkIGV4cHJlc3Npb24gb3V0IG9mIGdlbmVyYXRv
ciIpOwogCiAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4w
LyNzZWMtZ2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25zLXN0YXRpYy1zZW1hbnRpY3MtZWFy
bHktZXJyb3JzCi0gICAgZmFpbElmVHJ1ZShtX2Z1bmN0aW9uUGFyc2VQaGFzZSA9PSBGdW5jdGlv
blBhcnNlUGhhc2U6OlBhcmFtZXRlcnMsICJDYW5ub3QgdXNlIHlpZWxkIGV4cHJlc3Npb24gd2l0
aGluIHBhcmFtZXRlcnMiKTsKKyAgICBmYWlsSWZUcnVlKG1fcGFyc2VyU3RhdGUuZnVuY3Rpb25Q
YXJzZVBoYXNlID09IEZ1bmN0aW9uUGFyc2VQaGFzZTo6UGFyYW1ldGVycywgIkNhbm5vdCB1c2Ug
eWllbGQgZXhwcmVzc2lvbiB3aXRoaW4gcGFyYW1ldGVycyIpOwogCiAgICAgSlNUb2tlbkxvY2F0
aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3RT
dGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwpAQCAtMzA1Niw4ICszMDUyLDggQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGZhaWxJZkZhbHNlKGNvbmQs
ICJDYW5ub3QgcGFyc2UgZXhwcmVzc2lvbiIpOwogICAgIGlmICghbWF0Y2goUVVFU1RJT04pKQog
ICAgICAgICByZXR1cm4gY29uZDsKLSAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsK
LSAgICBtX25vbkxIU0NvdW50Kys7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVz
c2lvbkNvdW50Kys7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCsrOwogICAgIG5leHQo
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgIFRyZWVFeHByZXNzaW9uIGxocyA9
IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2UobGhz
LCAiQ2Fubm90IHBhcnNlIGxlZnQgaGFuZCBzaWRlIG9mIHRlcm5hcnkgb3BlcmF0b3IiKTsKQEAg
LTMwOTIsMTYgKzMwODgsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJTdGFydCA9IHRva2Vu
U3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3Np
Z25tZW50Q291bnQ7CisgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3BhcnNlclN0
YXRlLmFzc2lnbm1lbnRDb3VudDsKICAgICAgICAgVHJlZUV4cHJlc3Npb24gY3VycmVudCA9IHBh
cnNlVW5hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShjdXJyZW50
LCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24iKTsKICAgICAgICAgCi0gICAgICAgIGNvbnRleHQu
YXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0YWNrRGVwdGgsIGN1cnJlbnQsIGV4
cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwg
aW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50KTsKKyAgICAgICAgY29udGV4
dC5hcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5kU3RhY2tEZXB0aCwgY3VycmVudCwg
ZXhwclN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQpOwog
ICAgICAgICBpbnQgcHJlY2VkZW5jZSA9IGlzQmluYXJ5T3BlcmF0b3IobV90b2tlbi5tX3R5cGUp
OwogICAgICAgICBpZiAoIXByZWNlZGVuY2UpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
bV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgIG1fbm9uTEhTQ291bnQrKzsK
KyAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAg
ICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQrKzsKICAgICAgICAgaW50IG9wZXJhdG9yVG9r
ZW4gPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxk
U3RyaW5ncyk7CiAgICAgICAgIApAQCAtMzMwNSwxMCArMzMwMSwxMCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRlcmFsKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewotICAg
IGF1dG8gc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CisgICAgTGV4ZXJTdGF0ZSBsZXhl
clN0YXRlID0gc2F2ZUxleGVyU3RhdGUoKTsKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9Q
RU5CUkFDRSwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MsICJFeHBlY3RlZCBvcGVuaW5n
ICd7JyBhdCB0aGUgc3RhcnQgb2YgYW4gb2JqZWN0IGxpdGVyYWwiKTsKIAotICAgIGludCBvbGRO
b25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9w
YXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKIAogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0
b2tlbkxvY2F0aW9uKCkpOyAgICAKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsKQEAgLTMz
MjAsNyArMzMxNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MK
ICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBvYmplY3QgbGl0ZXJhbCBw
cm9wZXJ0eSIpOwogCiAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQgJiYgY29udGV4
dC5nZXRUeXBlKHByb3BlcnR5KSAmIChQcm9wZXJ0eU5vZGU6OkdldHRlciB8IFByb3BlcnR5Tm9k
ZTo6U2V0dGVyKSkgewotICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CisgICAg
ICAgIHJlc3RvcmVMZXhlclN0YXRlKGxleGVyU3RhdGUpOwogICAgICAgICByZXR1cm4gcGFyc2VT
dHJpY3RPYmplY3RMaXRlcmFsKGNvbnRleHQpOwogICAgIH0KIApAQCAtMzMzOCw3ICszMzM0LDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlUHJvcGVydHkoY29udGV4dCwgZmFsc2UpOwogICAgICAgICBmYWlsSWZGYWxz
ZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eSIpOwogICAg
ICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCAmJiBjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpICYgKFByb3BlcnR5Tm9kZTo6R2V0dGVyIHwgUHJvcGVydHlOb2RlOjpTZXR0ZXIpKSB7
Ci0gICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CisgICAgICAgICAgICBy
ZXN0b3JlTGV4ZXJTdGF0ZShsZXhlclN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiBwYXJzZVN0
cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3Vs
ZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVy
dHkpKSB7CkBAIC0zMzUzLDcgKzMzNDksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzCiAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgaGFuZGxl
UHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNFLCAifSIsICJlbmQiLCAib2JqZWN0IGxpdGVyYWwi
KTsKICAgICAKLSAgICBtX25vbkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CisgICAgbV9wYXJz
ZXJTdGF0ZS5ub25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OwogICAgIAogICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZU9iamVjdExpdGVyYWwobG9jYXRpb24sIHByb3BlcnR5TGlzdCk7CiB9CkBA
IC0zMzYzLDcgKzMzNTksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzCiB7CiAgICAgY29uc3VtZU9yRmFpbChPUEVOQlJBQ0UsICJFeHBlY3RlZCBvcGVuaW5nICd7
JyBhdCB0aGUgc3RhcnQgb2YgYW4gb2JqZWN0IGxpdGVyYWwiKTsKICAgICAKLSAgICBpbnQgb2xk
Tm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgIGludCBvbGROb25MSFNDb3VudCA9IG1f
cGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24o
dG9rZW5Mb2NhdGlvbigpKTsKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsKQEAgLTMzOTks
NyArMzM5NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAg
ICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWls
KENMT1NFQlJBQ0UsICJ9IiwgImVuZCIsICJvYmplY3QgbGl0ZXJhbCIpOwogCi0gICAgbV9ub25M
SFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OworICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQg
PSBvbGROb25MSFNDb3VudDsKIAogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU9iamVjdExpdGVy
YWwobG9jYXRpb24sIHByb3BlcnR5TGlzdCk7CiB9CkBAIC0zNDA5LDcgKzM0MDUsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiB7CiAgICAgY29uc3VtZU9yRmFp
bFdpdGhGbGFncyhPUEVOQlJBQ0tFVCwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MsICJF
eHBlY3RlZCBhbiBvcGVuaW5nICdbJyBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGFycmF5IGxpdGVy
YWwiKTsKICAgICAKLSAgICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAg
IGludCBvbGROb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgCiAg
ICAgaW50IGVsaXNpb25zID0gMDsKICAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CkBAIC0zNDcz
LDcgKzM0NjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAg
ICAgICAgIHNlbWFudGljRmFpbCgiVGhlICcuLi4nIG9wZXJhdG9yIHNob3VsZCBjb21lIGJlZm9y
ZSBhIHRhcmdldCBleHByZXNzaW9uIik7CiAgICAgfQogICAgIAotICAgIG1fbm9uTEhTQ291bnQg
PSBvbGROb25MSFNDb3VudDsKKyAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50ID0gb2xkTm9u
TEhTQ291bnQ7CiAgICAgCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJyYXkobG9jYXRpb24s
IGVsZW1lbnRMaXN0KTsKIH0KQEAgLTM1NzUsOSArMzU3MSw5IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlMaXRlcmFs
KGNvbnRleHQpOwogICAgIGNhc2UgT1BFTlBBUkVOOiB7CiAgICAgICAgIG5leHQoKTsKLSAgICAg
ICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICAgICAgaW50IG9sZE5v
bkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudDsKICAgICAgICAgVHJlZUV4cHJl
c3Npb24gcmVzdWx0ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBtX25vbkxI
U0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQgPSBvbGROb25MSFNDb3VudDsKICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9T
RVBBUkVOLCAiKSIsICJlbmQiLCAiY29tcG91bmQgZXhwcmVzc2lvbiIpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KQEAgLTM3NjAsMjEgKzM3NTYsMjEgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRp
b24oKTsKICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgICAgICBjYXNlIE9Q
RU5CUkFDS0VUOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsK
KyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwog
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291
bnQgPSBtX25vbkxIU0NvdW50OwotICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9
IG1fYXNzaWdubWVudENvdW50OworICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJz
ZXJTdGF0ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMg
PSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVFeHByZXNz
aW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFp
bElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsK
LSAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24s
IGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQs
IGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKKyAg
ICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJh
c2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25t
ZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlv
bigpKTsKICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAi
XSIsICJlbmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAgICAgIG1fbm9uTEhT
Q291bnQgPSBub25MSFNDb3VudDsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQgPSBub25MSFNDb3VudDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgT1BFTlBBUkVOOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAg
ICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAg
ICAgICAgIGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAg
ICAgICAgICBpZiAobmV3Q291bnQpIHsKICAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwogICAg
ICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQ
b3NpdGlvbigpOwpAQCAtMzc4OSwxMSArMzc4NSwxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNj
b3BlKCktPnNldEhhc0RpcmVjdFN1cGVyKCk7CiAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRl
eHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBl
eHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50Owor
ICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET1Q6IHsKLSAgICAgICAg
ICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAgICBKU1RleHRQb3Np
dGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAg
IG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAgICAgICAgICAgIG1hdGNoT3JGYWlsKElE
RU5ULCAiRXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwpAQCAtMzgwNSwxMSAr
MzgwMSwxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAg
ICAgIGNhc2UgVEVNUExBVEU6IHsKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNl
SXNTdXBlciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7
CiAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5k
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7
CisgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50
OwogICAgICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1w
bGF0ZUxpdGVyYWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJh
d1N0cmluZ3NCdWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7CiAgICAgICAgICAgICBmYWlsSWZG
YWxzZSh0ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0ZXJhbCIpOwog
ICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2VkVGVtcGxhdGUobG9jYXRpb24s
IGJhc2UsIHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25M
SFNDb3VudDsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFND
b3VudDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTM4OTksMTAg
KzM4OTUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGxhc3RPcGVyYXRvciA9IG1fdG9rZW4ubV90
eXBlOwotICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9u
TEhTQ291bnQrKzsKICAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tE
ZXB0aCwgbV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4
dCgpOwotICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgbV9w
YXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgfQogICAgIEpTVGV4
dFBvc2l0aW9uIHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgIEFTU0VS
VChzdWJFeHByU3RhcnQub2Zmc2V0ID49IHN1YkV4cHJTdGFydC5saW5lU3RhcnRPZmZzZXQpOwpA
QCAtMzkyMSwyMCArMzkxNywyMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzCiAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzICYmIG1vZGlm
aWVzRXhwciwgIkNhbm5vdCBtb2RpZnkgJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicg
aW4gc3RyaWN0IG1vZGUiKTsKICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgY2Fz
ZSBQTFVTUExVUzoKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAg
ICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQrKzsKICAg
ICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBs
dXNQbHVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIHRva2VuRW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgIG1fcGFyc2Vy
U3RhdGUuYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChpc0V2
YWxPckFyZ3VtZW50cywgIkNhbm5vdCBtb2RpZnkgJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwo
KSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHJlcXVp
cmVzTEV4cHIsICJUaGUgIiwgb3BlcmF0b3JTdHJpbmcoZmFsc2UsIGxhc3RPcGVyYXRvciksICIg
b3BlcmF0b3IgcmVxdWlyZXMgYSByZWZlcmVuY2UgZXhwcmVzc2lvbiIpOwogICAgICAgICBsYXN0
T3BlcmF0b3IgPSBQTFVTUExVUzsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIE1JTlVTTUlOVVM6Ci0gICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsr
OwotICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJp
dmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50
Kys7CiAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhw
ciwgT3BNaW51c01pbnVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIHRv
a2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAg
IG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0
cmljdChpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICIn
IGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBzZW1hbnRpY0Zh
aWxJZlRydWUocmVxdWlyZXNMRXhwciwgIlRoZSAiLCBvcGVyYXRvclN0cmluZyhmYWxzZSwgbGFz
dE9wZXJhdG9yKSwgIiBvcGVyYXRvciByZXF1aXJlcyBhIHJlZmVyZW5jZSBleHByZXNzaW9uIik7
CiAgICAgICAgIGxhc3RPcGVyYXRvciA9IFBMVVNQTFVTOwpAQCAtMzk2OCwxMiArMzk2NCwxMiBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGNhc2Ug
UExVU1BMVVM6CiAgICAgICAgIGNhc2UgQVVUT1BMVVNQTFVTOgogICAgICAgICAgICAgZXhwciA9
IGNvbnRleHQubWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMsIGNvbnRl
eHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFy
dCArIDEsIGVuZCk7Ci0gICAgICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOworICAgICAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE1JTlVTTUlOVVM6CiAgICAgICAgIGNhc2UgQVVUT01JTlVTTUlOVVM6CiAg
ICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwg
T3BNaW51c01pbnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNr
RGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwotICAgICAgICAgICAgbV9hc3NpZ25tZW50
Q291bnQrKzsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENvdW50Kys7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUWVBFT0Y6CiAgICAgICAgICAgICBleHBy
ID0gY29udGV4dC5tYWtlVHlwZU9mTm9kZShsb2NhdGlvbiwgZXhwcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE5NTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNjgsMjIg
KzEyNjgsNjcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICFtX2Vycm9yTWVzc2FnZS5pc051
bGwoKTsKICAgICB9CiAKLSAgICBzdHJ1Y3QgU2F2ZVBvaW50IHsKKyAgICBlbnVtIGNsYXNzIEZ1
bmN0aW9uUGFyc2VQaGFzZSB7IFBhcmFtZXRlcnMsIEJvZHkgfTsKKyAgICBzdHJ1Y3QgUGFyc2Vy
U3RhdGUgeworICAgICAgICBpbnQgYXNzaWdubWVudENvdW50IHsgMCB9OworICAgICAgICBpbnQg
bm9uTEhTQ291bnQgeyAwIH07CisgICAgICAgIGludCBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
IHsgMCB9OworICAgICAgICBGdW5jdGlvblBhcnNlUGhhc2UgZnVuY3Rpb25QYXJzZVBoYXNlIHsg
RnVuY3Rpb25QYXJzZVBoYXNlOjpCb2R5IH07CisgICAgfTsKKworICAgIC8vIElmIHlvdSdyZSB1
c2luZyB0aGlzIGRpcmVjdGx5LCB5b3Ugc2hvdWxkIHN0b3AgYW5kIHRoaW5rIGZvciBhIHNlY29u
ZC4gWW91CisgICAgLy8gcHJvYmFibHkgbmVlZCB0byBiZSB1c2luZyBhIFNhdmVQb2ludC4KKyAg
ICBBTFdBWVNfSU5MSU5FIFBhcnNlclN0YXRlIHNhdmVQYXJzZXJTdGF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9wYXJzZXJTdGF0ZTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgcmVzdG9yZVBhcnNlclN0YXRlKGNvbnN0IFBhcnNlclN0YXRlJiBzdGF0ZSkKKyAgICB7Cisg
ICAgICAgIG1fcGFyc2VyU3RhdGUgPSBzdGF0ZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgTGV4ZXJT
dGF0ZSB7CiAgICAgICAgIGludCBzdGFydE9mZnNldDsKICAgICAgICAgdW5zaWduZWQgb2xkTGlu
ZVN0YXJ0T2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBvbGRMYXN0TGluZU51bWJlcjsKICAgICAg
ICAgdW5zaWduZWQgb2xkTGluZU51bWJlcjsKICAgICB9OwotICAgIAotICAgIEFMV0FZU19JTkxJ
TkUgU2F2ZVBvaW50IGNyZWF0ZVNhdmVQb2ludEZvckVycm9yKCkKKworICAgIC8vIElmIHlvdSdy
ZSB1c2luZyB0aGlzIGRpcmVjdGx5LCB5b3Ugc2hvdWxkIHN0b3AgYW5kIHRoaW5rIGZvciBhIHNl
Y29uZC4gWW91CisgICAgLy8gcHJvYmFibHkgbmVlZCB0byBiZSB1c2luZyBhIFNhdmVQb2ludC4g
aS5lLCBpZiB5b3UgcGFyc2UgYW55IGtpbmQgb2YgCisgICAgLy8gQXNzaWdubWVudEV4cHJlc3Np
b24gYmV0d2VlbiBzYXZpbmcvcmVzdG9yaW5nLCB5b3Ugc2hvdWxkIGRlZmluaXRlbHkgCisgICAg
Ly8gbm90IGJlIHVzaW5nIHRoaXMgZGlyZWN0bHkuCisgICAgQUxXQVlTX0lOTElORSBMZXhlclN0
YXRlIHNhdmVMZXhlclN0YXRlKCkKICAgICB7Ci0gICAgICAgIFNhdmVQb2ludCByZXN1bHQ7Cisg
ICAgICAgIExleGVyU3RhdGUgcmVzdWx0OwogICAgICAgICByZXN1bHQuc3RhcnRPZmZzZXQgPSBt
X3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7CiAgICAgICAgIHJlc3VsdC5vbGRMaW5lU3Rh
cnRPZmZzZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICBy
ZXN1bHQub2xkTGFzdExpbmVOdW1iZXIgPSBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpOwogICAg
ICAgICByZXN1bHQub2xkTGluZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzdG9y
ZUxleGVyU3RhdGUoY29uc3QgTGV4ZXJTdGF0ZSYgbGV4ZXJTdGF0ZSkKKyAgICB7CisgICAgICAg
IG1fbGV4ZXItPnNldE9mZnNldChsZXhlclN0YXRlLnN0YXJ0T2Zmc2V0LCBsZXhlclN0YXRlLm9s
ZExpbmVTdGFydE9mZnNldCk7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgbV9sZXhlci0+c2V0
TGFzdExpbmVOdW1iZXIobGV4ZXJTdGF0ZS5vbGRMYXN0TGluZU51bWJlcik7CisgICAgICAgIG1f
bGV4ZXItPnNldExpbmVOdW1iZXIobGV4ZXJTdGF0ZS5vbGRMaW5lTnVtYmVyKTsKKyAgICB9CisK
KyAgICBzdHJ1Y3QgU2F2ZVBvaW50IHsKKyAgICAgICAgUGFyc2VyU3RhdGUgcGFyc2VyU3RhdGU7
CisgICAgICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZTsKKyAgICB9OworICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgU2F2ZVBvaW50IGNyZWF0ZVNhdmVQb2ludEZvckVycm9yKCkKKyAgICB7CisgICAg
ICAgIFNhdmVQb2ludCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5wYXJzZXJTdGF0ZSA9IHNhdmVQ
YXJzZXJTdGF0ZSgpOworICAgICAgICByZXN1bHQubGV4ZXJTdGF0ZSA9IHNhdmVMZXhlclN0YXRl
KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJ
TkUgU2F2ZVBvaW50IGNyZWF0ZVNhdmVQb2ludCgpCiAgICAgewpAQCAtMTI5NCwxMCArMTMzOSw4
IEBAIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVTYXZlUG9pbnRXaXRo
RXJyb3IoY29uc3QgU2F2ZVBvaW50JiBzYXZlUG9pbnQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
ICAgICB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgbV9sZXhl
ci0+c2V0T2Zmc2V0KHNhdmVQb2ludC5zdGFydE9mZnNldCwgc2F2ZVBvaW50Lm9sZExpbmVTdGFy
dE9mZnNldCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVO
dW1iZXIoc2F2ZVBvaW50Lm9sZExhc3RMaW5lTnVtYmVyKTsKLSAgICAgICAgbV9sZXhlci0+c2V0
TGluZU51bWJlcihzYXZlUG9pbnQub2xkTGluZU51bWJlcik7CisgICAgICAgIHJlc3RvcmVMZXhl
clN0YXRlKHNhdmVQb2ludC5sZXhlclN0YXRlKTsKKyAgICAgICAgcmVzdG9yZVBhcnNlclN0YXRl
KHNhdmVQb2ludC5wYXJzZXJTdGF0ZSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHJlc3RvcmVTYXZlUG9pbnQoY29uc3QgU2F2ZVBvaW50JiBzYXZlUG9pbnQpCkBAIC0xMzA1LDQ5
ICsxMzQ4LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnRXaXRoRXJyb3Io
c2F2ZVBvaW50LCBTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgZW51bSBjbGFzcyBGdW5jdGlvblBh
cnNlUGhhc2UgeyBQYXJhbWV0ZXJzLCBCb2R5IH07Ci0gICAgc3RydWN0IFBhcnNlclN0YXRlIHsK
LSAgICAgICAgaW50IGFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAgaW50IG5vbkxIU0NvdW50Owot
ICAgICAgICBpbnQgbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAgRnVuY3Rpb25Q
YXJzZVBoYXNlIGZ1bmN0aW9uUGFyc2VQaGFzZTsKLSAgICB9OwotCi0gICAgQUxXQVlTX0lOTElO
RSBQYXJzZXJTdGF0ZSBzYXZlU3RhdGUoKQotICAgIHsKLSAgICAgICAgUGFyc2VyU3RhdGUgcmVz
dWx0OwotICAgICAgICByZXN1bHQuYXNzaWdubWVudENvdW50ID0gbV9hc3NpZ25tZW50Q291bnQ7
Ci0gICAgICAgIHJlc3VsdC5ub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7Ci0gICAgICAgIHJl
c3VsdC5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNv
dW50OwotICAgICAgICByZXN1bHQuZnVuY3Rpb25QYXJzZVBoYXNlID0gbV9mdW5jdGlvblBhcnNl
UGhhc2U7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIHJlc3RvcmVTdGF0ZShjb25zdCBQYXJzZXJTdGF0ZSYgc3RhdGUpCi0gICAgewotICAg
ICAgICBtX2Fzc2lnbm1lbnRDb3VudCA9IHN0YXRlLmFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAg
bV9ub25MSFNDb3VudCA9IHN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICBtX25vblRyaXZpYWxF
eHByZXNzaW9uQ291bnQgPSBzdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50OwotICAgICAg
ICBtX2Z1bmN0aW9uUGFyc2VQaGFzZSA9IHN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZTsKLSAgICB9
Ci0KICAgICBWTSogbV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3NvdXJjZTsKICAgICBQ
YXJzZXJBcmVuYSBtX3BhcnNlckFyZW5hOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXhlclR5cGU+
IG1fbGV4ZXI7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBtX3BhcmFtZXRlcnMgeyBudWxscHRy
IH07CisKKyAgICBQYXJzZXJTdGF0ZSBtX3BhcnNlclN0YXRlOwogICAgIAogICAgIGJvb2wgbV9o
YXNTdGFja092ZXJmbG93OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBKU1Rva2Vu
IG1fdG9rZW47CiAgICAgYm9vbCBtX2FsbG93c0luOwogICAgIEpTVGV4dFBvc2l0aW9uIG1fbGFz
dFRva2VuRW5kUG9zaXRpb247Ci0gICAgaW50IG1fYXNzaWdubWVudENvdW50OwogICAgIGludCBt
X25vbkxIU0NvdW50OwogICAgIGJvb2wgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkOwogICAgIGlu
dCBtX3N0YXRlbWVudERlcHRoOwotICAgIGludCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQ7
Ci0gICAgRnVuY3Rpb25QYXJzZVBoYXNlIG1fZnVuY3Rpb25QYXJzZVBoYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIG1fbGFzdElkZW50aWZpZXI7CiAgICAgY29uc3QgSWRlbnRpZmllciogbV9s
YXN0RnVuY3Rpb25OYW1lOwogICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPiBtX2Z1bmN0
aW9uQ2FjaGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269594</attachid>
            <date>2016-01-22 11:43:24 -0800</date>
            <delta_ts>2016-01-22 14:52:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>35711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE2LTAxLTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgUGFyc2VyOjpjcmVhdGVTYXZlUG9pbnQgaXMgYSBm
b290IGd1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzMjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIHByZXZpb3VzIHVzZSBvZiBTYXZlUG9pbnQgKHVwIHVudGlsIHRoaXMgcGF0Y2gpCisgICAg
ICAgIHJlYWxseSBtZWFudCB0aGF0IHdlJ3JlIHNhdmluZyB0aGUgTGV4ZXJTdGF0ZS4gVGhpcwor
ICAgICAgICB3YXMgc28gcG9vcmx5IG5hbWVkIHRoYXQgaXQgd2FzIGJlaW5nIG1pc3VzZWQgYWxs
IG92ZXIKKyAgICAgICAgb3VyIHBhcnNlci4gRm9yIGV4YW1wbGUsIGFueXRoaW5nIHRoYXQgcGFy
c2VkIGFuCisgICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uIGJldHdlZW4gc2F2aW5nL3Jlc3Rv
cmluZyByZWFsbHkKKyAgICAgICAgd2FudGVkIHRvIHNhdmUgYm90aCBMZXhlciBzdGF0ZSBhbmQg
UGFyc2VyIHN0YXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBTYXZlUG9pbnQgdG8g
bWVhbiBzYXZlIGFsbCB0aGUKKyAgICAgICAgc3RhdGUuIFRoZSBvbGQgU2F2ZVBvaW50IGlzIHJl
bmFtZWQgdG8gTGV4ZXJTdGF0ZSB3aXRoCisgICAgICAgIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWw8
U2F2ZS9SZXN0b3JlPkxleGVyU3RhdGUgZnVuY3Rpb25zLgorICAgICAgICBUaGUgb2xkIDxzYXZl
L3Jlc3RvcmU+U3RhdGUoKSBmdW5jdGlvbiBpcyByZW5hbWVkIHRvCisgICAgICAgIGludGVybmFs
PFNhdmUvUmVzdG9yZT5QYXJzZXJTdGF0ZSgpLgorCisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIpOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6ZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcik6CisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzc2lnbm1lbnRFbGVtZW50KToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZVlpZWxkRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAoSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFycmF5TGl0ZXJhbCk6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6Omhhc0Vycm9yKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjppbnRlcm5hbFNhdmVQYXJzZXJTdGF0ZSk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6cmVzdG9yZVBhcnNlclN0YXRlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjppbnRl
cm5hbFNhdmVMZXhlclN0YXRlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpyZXN0b3JlTGV4ZXJT
dGF0ZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6Y3JlYXRlU2F2ZVBvaW50Rm9yRXJyb3IpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6OmNyZWF0ZVNhdmVQb2ludCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6cmVzdG9yZVNhdmVQb2ludFdpdGhFcnJvcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
cmVzdG9yZVNhdmVQb2ludCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6c2F2ZVN0YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6UGFyc2VyOjpyZXN0b3JlU3RhdGUpOiBEZWxldGVkLgorCiAy
MDE2LTAxLTIyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIEVxdWl2YWxlbmNlIFByb3BlcnR5Q29uZGl0aW9uIG5lZWRzIHRvIGNoZWNrIHRoZSBvZmZz
ZXQgaXQgdXNlcyB0byBsb2FkIHRoZSB2YWx1ZSBmcm9tIGlzIG5vdCBpbnZhbGlkT2Zmc2V0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTU0
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMCwxNCArMjAwLDggQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcigKICAg
ICAsIG1fc291cmNlKCZzb3VyY2UpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2UpCiAg
ICAgLCBtX2FsbG93c0luKHRydWUpCi0gICAgLCBtX2Fzc2lnbm1lbnRDb3VudCgwKQotICAgICwg
bV9ub25MSFNDb3VudCgwKQogICAgICwgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKHNvdXJjZS5w
cm92aWRlcigpLT5pc1ZhbGlkKCkpCiAgICAgLCBtX3N0YXRlbWVudERlcHRoKDApCi0gICAgLCBt
X25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKLSAgICAsIG1fZnVuY3Rpb25QYXJzZVBoYXNl
KEZ1bmN0aW9uUGFyc2VQaGFzZTo6Qm9keSkKLSAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKLSAg
ICAsIG1fbGFzdEZ1bmN0aW9uTmFtZShudWxscHRyKQogICAgICwgbV9zb3VyY2VFbGVtZW50cygw
KQogICAgICwgbV9wYXJzaW5nQnVpbHRpbihidWlsdGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5N
b2RlOjpCdWlsdGluKQogICAgICwgbV9zdXBlckJpbmRpbmcoc3VwZXJCaW5kaW5nKQpAQCAtMjQ1
LDcgKzIzOSw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb24KICAg
ICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5h
LCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAgIFNjb3BlUmVmIHNjb3Bl
ID0gY3VycmVudFNjb3BlKCk7CiAgICAgc2NvcGUtPnNldElzTGV4aWNhbFNjb3BlKCk7Ci0gICAg
U2V0Rm9yU2NvcGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlvblBhcnNlUGhhc2VQb2lzb25l
cihtX2Z1bmN0aW9uUGFyc2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBoYXNlOjpCb2R5KTsKKyAgICBT
ZXRGb3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1bmN0aW9uUGFyc2VQaGFzZVBvaXNvbmVy
KG1fcGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBhcnNlUGhhc2U6OkJv
ZHkpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiA9IGZhbHNlOwog
ICAgIGlmIChtX2xleGVyLT5pc1JlcGFyc2luZ0Z1bmN0aW9uKCkpIHsKQEAgLTQwMyw3ICszOTcs
NyBAQCBib29sIFBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QCiAgICAgICAgICAg
ICAvLyBXZSBtYWtlIGZha2Ugc2NvcGUsIG90aGVyd2lzZSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMg
d2lsbCBhZGQgdmFyaWFibGUgdG8gY3VycmVudCBzY29wZSB0aGF0IGxlYWQgdG8gZXJyb3JzCiAg
ICAgICAgICAgICBBdXRvUG9wU2NvcGVSZWYgZmFrZVNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsK
ICAgICAgICAgICAgIGZha2VTY29wZS0+c2V0U291cmNlUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZTo6QXJyb3dGdW5jdGlvbk1vZGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1
bnNpZ25lZCBwYXJhbWV0ZXJzQ291bnQgPSAwOwogICAgICAgICAgICAgaXNBcnJvd0Z1bmN0aW9u
ID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIHN5bnRheENoZWNrZXIuY3Jl
YXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpLCBwYXJhbWV0ZXJzQ291bnQpICYmIGNvbnN1bWUoQ0xP
U0VQQVJFTikgJiYgbWF0Y2goQVJST1dGVU5DVElPTik7CiAgICAgICAgICAgICAgICAgCkBAIC00
NDEsMTAgKzQzNSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VF
CiAgICAgICAgICAgICAgICAgICAgIHNldFN0cmljdE1vZGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgaGFzU2V0U3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
U3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9sYXN0RnVuY3Rp
b25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0RnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fcGFyc2VyU3RhdGUubGFzdEZ1bmN0aW9uTmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0g
Km1fcGFyc2VyU3RhdGUubGFzdEZ1bmN0aW9uTmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgbmFtZSBhIGZ1bmN0aW9uICdhcmd1bWVudHMn
IGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0t
PnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFzdEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJz
ZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBuYW1lIGEgZnVuY3Rpb24gJ2V2YWwnIGluIHN0cmljdCBt
b2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMp
KQpAQCAtNzcwLDcgKzc2NCw3IEBAIGJvb2wgUGFyc2VyPExleGVyVHlwZT46OmRlY2xhcmVSZXN0
T3JOb3IKICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNs
YXJlUGFyYW1ldGVyKCZuYW1lKTsKICAgICBpZiAoKGRlY2xhcmF0aW9uUmVzdWx0ICYgRGVjbGFy
YXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlKSAmJiBzdHJpY3RNb2RlKCkpIHsKICAgICAg
ICAgc2VtYW50aWNGYWlsSWZUcnVlKGlzRXZhbE9yQXJndW1lbnRzKCZuYW1lKSwgIkNhbm5vdCBk
ZXN0cnVjdHVyZSB0byBhIHBhcmFtZXRlciBuYW1lICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3Ry
aWN0IG1vZGUiKTsKLSAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9uTmFtZSAmJiBuYW1lID09ICpt
X2xhc3RGdW5jdGlvbk5hbWUpCisgICAgICAgIGlmIChtX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlv
bk5hbWUgJiYgbmFtZSA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQogICAgICAg
ICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwg
bmFtZS5pbXBsKCksICInIGFzIGl0IHNoYWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBm
dW5jdGlvbiIpOwogICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoInBhcmFtZXRl
ciBuYW1lIik7CiAgICAgICAgIGlmIChoYXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKQEAgLTkw
MCw5ICs4OTQsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAK
ICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGVsZW1lbnQgJiYgY29udGV4dC5pc0Fzc2lnbm1lbnRM
b2NhdGlvbihlbGVtZW50KSwgIkludmFsaWQgZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IHRhcmdl
dCIpOwogCi0gICAgaWYgKHN0cmljdE1vZGUoKSAmJiBtX2xhc3RJZGVudGlmaWVyICYmIGNvbnRl
eHQuaXNSZXNvbHZlKGVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMg
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX2xhc3RJZGVudGlmaWVyIHx8IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllcjsKLSAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzLCAiQ2Fubm90IG1vZGlmeSAnIiwg
bV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOworICAgIGlmIChz
dHJpY3RNb2RlKCkgJiYgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0Lmlz
UmVzb2x2ZShlbGVtZW50KSkgeworICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92
bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8
fCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElk
ZW50aWZpZXI7CisgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChpc0V2YWxPckFyZ3VtZW50cywg
IkNhbm5vdCBtb2RpZnkgJyIsIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXItPmltcGwoKSwg
IicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlQXNzaWdubWVu
dEVsZW1lbnQoY29udGV4dCwgZWxlbWVudCwgc3RhcnRQb3NpdGlvbiwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSk7CkBAIC05MzEsNyArOTI1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJu
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKFRyZWVCdWlsZGVy
JiBjb250ZXh0LCBEZXN0cnVjdHVyaW5nS2luZCBraW5kLCBFeHBvcnRUeXBlIGV4cG9ydFR5cGUs
IGNvbnN0IElkZW50aWZpZXIqKiBkdXBsaWNhdGVJZGVudGlmaWVyLCBib29sKiBoYXNEZXN0cnVj
dHVyaW5nUGF0dGVybiwgQXNzaWdubWVudENvbnRleHQgYmluZGluZ0NvbnRleHQsIGludCBkZXB0
aCkKIHsKICAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7Ci0gICAgaW50IG5vbkxIU0NvdW50ID0g
bV9ub25MSFNDb3VudDsKKyAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50OwogICAgIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuOwogICAgIHN3aXRj
aCAobV90b2tlbi5tX3R5cGUpIHsKICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CkBAIC0xMDg2LDcg
KzEwODAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0gICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50
OworICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKICAgICByZXR1
cm4gcGF0dGVybjsKIH0KIApAQCAtMTEwOCw3ICsxMTAyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
ICAgICBuZXh0KCk7CiAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChPUEVOUEFSRU4sICIoIiwg
InN0YXJ0IiwgImZvci1sb29wIGhlYWRlciIpOwotICAgIGludCBub25MSFNDb3VudCA9IG1fbm9u
TEhTQ291bnQ7CisgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3Vu
dDsKICAgICBpbnQgZGVjbGFyYXRpb25zID0gMDsKICAgICBKU1RleHRQb3NpdGlvbiBkZWNsc1N0
YXJ0OwogICAgIEpTVGV4dFBvc2l0aW9uIGRlY2xzRW5kOwpAQCAtMTI2MCw3ICsxMjU0LDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIAogICAgIC8vIEZv
ci1pbiBhbmQgRm9yLW9mIGxvb3AKIGVudW1lcmF0aW9uTG9vcDoKLSAgICBmYWlsSWZGYWxzZShu
b25MSFNDb3VudCA9PSBtX25vbkxIU0NvdW50LCAiRXhwZWN0ZWQgYSByZWZlcmVuY2Ugb24gdGhl
IGxlZnQgaGFuZCBzaWRlIG9mIGFuIGVudW1lcmF0aW9uIHN0YXRlbWVudCIpOworICAgIGZhaWxJ
ZkZhbHNlKG5vbkxIU0NvdW50ID09IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQsICJFeHBlY3Rl
ZCBhIHJlZmVyZW5jZSBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYW4gZW51bWVyYXRpb24gc3Rh
dGVtZW50Iik7CiAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoIWNv
bnN1bWUoSU5UT0tFTikpIHsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goSURFTlQpICYmICpt
X3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZiwgIkV4cGVjdGVk
IGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51bWVyYXRpb24gc3ludGF4Iik7CkBAIC0xNjg0LDEx
ICsxNjc4LDExIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAg
ICAgICAgZGlyZWN0aXZlID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIGlmIChkaXJl
Y3RpdmVMaXRlcmFsTGVuZ3RoKQogICAgICAgICAgICAgKmRpcmVjdGl2ZUxpdGVyYWxMZW5ndGgg
PSBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0IC0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0
T2Zmc2V0OwotICAgICAgICBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9ub25Ucml2aWFs
RXhwcmVzc2lvbkNvdW50OworICAgICAgICBub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9w
YXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50OwogICAgICAgICBGQUxMVEhST1VH
SDsKICAgICBkZWZhdWx0OgogICAgICAgICBUcmVlU3RhdGVtZW50IGV4cHJTdGF0ZW1lbnQgPSBw
YXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgIGlmIChkaXJlY3RpdmUg
JiYgbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCAhPSBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQpCisgICAgICAgIGlmIChkaXJlY3RpdmUgJiYgbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCAh
PSBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQpCiAgICAgICAgICAgICBk
aXJlY3RpdmUgPSAwOwogICAgICAgICByZXN1bHQgPSBleHByU3RhdGVtZW50OwogICAgICAgICBi
cmVhazsKQEAgLTE4MDIsNyArMTc5Niw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
IHRlbXBsYXRlIDwKICAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0ID0g
Y29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KCk7CiAgICAgZnVuY3Rpb25JbmZvLnBh
cmFtZXRlcnMgPSBwYXJhbWV0ZXJMaXN0OwogICAgIGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCA9
IHBhcmFtZXRlcnNTdGFydDsKLSAgICBTZXRGb3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1
bmN0aW9uUGFyc2VQaGFzZVBvaXNvbmVyKG1fZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBh
cnNlUGhhc2U6OlBhcmFtZXRlcnMpOworICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQaGFz
ZT4gZnVuY3Rpb25QYXJzZVBoYXNlUG9pc29uZXIobV9wYXJzZXJTdGF0ZS5mdW5jdGlvblBhcnNl
UGhhc2UsIEZ1bmN0aW9uUGFyc2VQaGFzZTo6UGFyYW1ldGVycyk7CiAgICAgCiAgICAgaWYgKG1v
ZGUgPT0gU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSkgewogICAgICAgICBpZiAo
IW1hdGNoKElERU5UKSAmJiAhbWF0Y2goT1BFTlBBUkVOKSkgewpAQCAtMTg5OSwxMCArMTg5Mywx
MCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgYm9vbCB1
cHBlclNjb3BlSXNHZW5lcmF0b3IgPSBjdXJyZW50U2NvcGUoKS0+aXNHZW5lcmF0b3IoKTsKICAg
ICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAg
ZnVuY3Rpb25TY29wZS0+c2V0U291cmNlUGFyc2VNb2RlKG1vZGUpOwotICAgIFNldEZvclNjb3Bl
PEZ1bmN0aW9uUGFyc2VQaGFzZT4gZnVuY3Rpb25QYXJzZVBoYXNlUG9pc29uZXIobV9mdW5jdGlv
blBhcnNlUGhhc2UsIEZ1bmN0aW9uUGFyc2VQaGFzZTo6Qm9keSk7CisgICAgU2V0Rm9yU2NvcGU8
RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlvblBhcnNlUGhhc2VQb2lzb25lcihtX3BhcnNlclN0
YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBoYXNlOjpCb2R5KTsKICAgICBp
bnQgZnVuY3Rpb25OYW1lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogbGFzdEZ1bmN0aW9uTmFtZSA9IG1fbGFzdEZ1bmN0aW9uTmFt
ZTsKLSAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBudWxscHRyOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGxhc3RGdW5jdGlvbk5hbWUgPSBtX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlvbk5hbWU7Cisg
ICAgbV9wYXJzZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lID0gbnVsbHB0cjsKICAgICBpbnQgcGFy
YW1ldGVyc1N0YXJ0OwogICAgIEpTVG9rZW5Mb2NhdGlvbiBzdGFydExvY2F0aW9uOwogICAgIGlu
dCBzdGFydENvbHVtbjsKQEAgLTE5NDksNyArMTk0Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gYm9vbCBQYXJzZXIKIAogICAgICAgICBpZiAobWF0Y2hTcGVjSWRlbnRpZmllcih1
cHBlclNjb3BlSXNHZW5lcmF0b3IpKSB7CiAgICAgICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9
IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0g
ZnVuY3Rpb25JbmZvLm5hbWU7CisgICAgICAgICAgICBtX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlv
bk5hbWUgPSBmdW5jdGlvbkluZm8ubmFtZTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAg
ICAgIGlmICghbmFtZUlzSW5Db250YWluaW5nU2NvcGUpCiAgICAgICAgICAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShmdW5jdGlvbkluZm8u
bmFtZSkgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZFN0cmljdE1vZGUsICInIiwgZnVuY3Rp
b25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgIiwgc3RyaW5nRm9yRnVuY3Rp
b25Nb2RlKG1vZGUpLCAiIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTIwMzksOCArMjAzMyw4
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxhc3RGdW5j
dGlvbk5hbWU7Ci0gICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsKKyAgICBt
X3BhcnNlclN0YXRlLmxhc3RGdW5jdGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOworICAgIFBh
cnNlclN0YXRlIG9sZFN0YXRlID0gaW50ZXJuYWxTYXZlUGFyc2VyU3RhdGUoKTsKIAogICAgIGF1
dG8gcGVyZm9ybVBhcnNpbmdGdW5jdGlvbkJvZHkgPSBbJl0gewogICAgICAgICByZXR1cm4gcGFy
c2VGdW5jdGlvbkJvZHkoY29udGV4dCwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0
aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25z
dHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5j
dGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIG1vZGUpOwpAQCAtMjA2Myw3ICsyMDU3LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgIH0gZWxzZQogICAgICAg
ICBmdW5jdGlvbkluZm8uYm9keSA9IHBlcmZvcm1QYXJzaW5nRnVuY3Rpb25Cb2R5KCk7CiAgICAg
Ci0gICAgcmVzdG9yZVN0YXRlKG9sZFN0YXRlKTsKKyAgICByZXN0b3JlUGFyc2VyU3RhdGUob2xk
U3RhdGUpOwogICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5mby5ib2R5LCAiQ2Fubm90IHBhcnNl
IHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKICAgICBj
b250ZXh0LnNldEVuZE9mZnNldChmdW5jdGlvbkluZm8uYm9keSwgbV9sZXhlci0+Y3VycmVudE9m
ZnNldCgpKTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIGZ1bmN0aW9u
SW5mby5uYW1lKSB7CkBAIC0yMjMwLDcgKzIyMjQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVDbGFzc0V4CiAgICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eSwgInN0YXRpYyIgaXMgYSBub24tcmVzZXJ2ZWQga2V5d29yZCBpbiBub24tc3RyaWN0IG1vZGUu
CiAgICAgICAgIGJvb2wgaXNTdGF0aWNNZXRob2QgPSBmYWxzZTsKICAgICAgICAgaWYgKG1hdGNo
KFJFU0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKLSAgICAgICAgICAgIGF1dG8gc2F2ZVBvaW50
ID0gY3JlYXRlU2F2ZVBvaW50KCk7CisgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0g
Y3JlYXRlU2F2ZVBvaW50KCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpZiAo
bWF0Y2goT1BFTlBBUkVOKSkgewogICAgICAgICAgICAgICAgIC8vIFJlcGFyc2UgInN0YXRpYygp
IiBhcyBhIG1ldGhvZCBuYW1lZCAic3RhdGljIi4KQEAgLTI5MTUsOCArMjkwOSw4IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBpZiAoIW1hdGNoKENPTU1B
KSkKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgbmV4dCgpOwotICAgIG1fbm9uVHJpdmlhbEV4
cHJlc3Npb25Db3VudCsrOwotICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICBtX3BhcnNlclN0YXRl
Lm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICBtX3BhcnNlclN0YXRlLm5vbkxIU0Nv
dW50Kys7CiAgICAgVHJlZUV4cHJlc3Npb24gcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHJpZ2h0LCAiQ2Fubm90IHBhcnNlIGV4cHJl
c3Npb24gaW4gYSBjb21tYSBleHByZXNzaW9uIik7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQo
cmlnaHQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ub2Zmc2V0KTsKQEAgLTI5NTYsOCArMjk1MCw4
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICBmYWlsSWZT
dGFja092ZXJmbG93KCk7CiAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9z
aXRpb24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsK
LSAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OwotICAg
IGludCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OworICAgIGludCBpbml0aWFs
QXNzaWdubWVudENvdW50ID0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQ7CisgICAgaW50
IGluaXRpYWxOb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgYm9v
bCBtYXliZUFzc2lnbm1lbnRQYXR0ZXJuID0gbWF0Y2goT1BFTkJSQUNFKSB8fCBtYXRjaChPUEVO
QlJBQ0tFVCk7CiAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwog
CkBAIC0yOTkyLDcgKzI5ODYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByCiAgICAgfQogCiAgICAgZmFpbElmRmFsc2UobGhzLCAiQ2Fubm90IHBhcnNlIGV4cHJl
c3Npb24iKTsKLSAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fbm9uTEhTQ291bnQpIHsK
KyAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQp
IHsKICAgICAgICAgaWYgKG1fdG9rZW4ubV90eXBlID49IEVRVUFMICYmIG1fdG9rZW4ubV90eXBl
IDw9IE9SRVFVQUwpCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkxlZnQgaGFuZCBzaWRlIG9m
IG9wZXJhdG9yICciLCBnZXRUb2tlbigpLCAiJyBtdXN0IGJlIGEgcmVmZXJlbmNlIik7CiAKQEAg
LTMwMTksMjEgKzMwMTMsMjEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgICAgIH0K
LSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgICAgIG1fcGFyc2Vy
U3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICBoYWRBc3NpZ25tZW50
ID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC5hc3NpZ25tZW50U3RhY2tBcHBlbmQoYXNzaWdubWVu
dFN0YWNrLCBsaHMsIHN0YXJ0LCB0b2tlblN0YXJ0UG9zaXRpb24oKSwgbV9hc3NpZ25tZW50Q291
bnQsIG9wKTsKKyAgICAgICAgY29udGV4dC5hc3NpZ25tZW50U3RhY2tBcHBlbmQoYXNzaWdubWVu
dFN0YWNrLCBsaHMsIHN0YXJ0LCB0b2tlblN0YXJ0UG9zaXRpb24oKSwgbV9wYXJzZXJTdGF0ZS5h
c3NpZ25tZW50Q291bnQsIG9wKTsKICAgICAgICAgc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24o
KTsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5h
c3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3Ry
aW5ncyk7Ci0gICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRpZmllciAmJiBj
b250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3Qo
bV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9sYXN0SWRlbnRpZmllciwgIkNhbm5vdCBt
b2RpZnkgJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZT
dHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX2xhc3RJZGVudGlmaWVy
LCAiQ2Fubm90IG1vZGlmeSAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAg
ICAgZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50aWZpZXIpOwotICAgICAgICAgICAgbV9sYXN0SWRl
bnRpZmllciA9IDA7CisgICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgbV9wYXJzZXJTdGF0ZS5s
YXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7CisgICAgICAgICAgICBm
YWlsSWZUcnVlSWZTdHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJT
dGF0ZS5sYXN0SWRlbnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2V2YWwnIGluIHN0cmljdCBtb2Rl
Iik7CisgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLCAiQ2Fubm90IG1vZGlm
eSAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZGVjbGFyZVdyaXRl
KG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIpOworICAgICAgICAgICAgbV9wYXJzZXJTdGF0
ZS5sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAgIH0KICAgICAgICAgbGhzID0gcGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UobGhzLCAiQ2Fu
bm90IHBhcnNlIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9u
Iik7Ci0gICAgICAgIGlmIChpbml0aWFsTm9uTEhTQ291bnQgIT0gbV9ub25MSFNDb3VudCkgewor
ICAgICAgICBpZiAoaW5pdGlhbE5vbkxIU0NvdW50ICE9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQpIHsKICAgICAgICAgICAgIGlmIChtX3Rva2VuLm1fdHlwZSA+PSBFUVVBTCAmJiBtX3Rva2Vu
Lm1fdHlwZSA8PSBPUkVRVUFMKQogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiTGVmdCBo
YW5kIHNpZGUgb2Ygb3BlcmF0b3IgJyIsIGdldFRva2VuKCksICInIG11c3QgYmUgYSByZWZlcmVu
Y2UiKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA0MSwxMyArMzAzNSwxMyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgfQogZW5kOgogICAgIGlmICho
YWRBc3NpZ25tZW50KQotICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2Vy
U3RhdGUubm9uTEhTQ291bnQrKzsKICAgICAKICAgICBpZiAoIVRyZWVCdWlsZGVyOjpDcmVhdGVz
QVNUKQogICAgICAgICByZXR1cm4gbGhzOwogICAgIAogICAgIHdoaWxlIChhc3NpZ25tZW50U3Rh
Y2spCi0gICAgICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNz
aWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudENv
dW50LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAgbGhzID0gY29udGV4dC5jcmVh
dGVBc3NpZ25tZW50KGxvY2F0aW9uLCBhc3NpZ25tZW50U3RhY2ssIGxocywgaW5pdGlhbEFzc2ln
bm1lbnRDb3VudCwgbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCkpOwogICAgIAogICAgIHJldHVybiBsaHM7CiB9CkBAIC0zMDY0LDcgKzMwNTgsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgZmFpbElmRmFs
c2UoY3VycmVudFNjb3BlKCktPmlzR2VuZXJhdG9yKCksICJDYW5ub3QgdXNlIHlpZWxkIGV4cHJl
c3Npb24gb3V0IG9mIGdlbmVyYXRvciIpOwogCiAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25z
LXN0YXRpYy1zZW1hbnRpY3MtZWFybHktZXJyb3JzCi0gICAgZmFpbElmVHJ1ZShtX2Z1bmN0aW9u
UGFyc2VQaGFzZSA9PSBGdW5jdGlvblBhcnNlUGhhc2U6OlBhcmFtZXRlcnMsICJDYW5ub3QgdXNl
IHlpZWxkIGV4cHJlc3Npb24gd2l0aGluIHBhcmFtZXRlcnMiKTsKKyAgICBmYWlsSWZUcnVlKG1f
cGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlID09IEZ1bmN0aW9uUGFyc2VQaGFzZTo6UGFy
YW1ldGVycywgIkNhbm5vdCB1c2UgeWllbGQgZXhwcmVzc2lvbiB3aXRoaW4gcGFyYW1ldGVycyIp
OwogCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAg
SlNUZXh0UG9zaXRpb24gZGl2b3RTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwpAQCAtMzA5
Myw4ICszMDg3LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwog
ICAgIGZhaWxJZkZhbHNlKGNvbmQsICJDYW5ub3QgcGFyc2UgZXhwcmVzc2lvbiIpOwogICAgIGlm
ICghbWF0Y2goUVVFU1RJT04pKQogICAgICAgICByZXR1cm4gY29uZDsKLSAgICBtX25vblRyaXZp
YWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICBtX25vbkxIU0NvdW50Kys7CisgICAgbV9wYXJzZXJT
dGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25M
SFNDb3VudCsrOwogICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAg
IFRyZWVFeHByZXNzaW9uIGxocyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7
CiAgICAgZmFpbElmRmFsc2UobGhzLCAiQ2Fubm90IHBhcnNlIGxlZnQgaGFuZCBzaWRlIG9mIHRl
cm5hcnkgb3BlcmF0b3IiKTsKQEAgLTMxMjksMTYgKzMxMjMsMTYgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0
b2tlbkxvY2F0aW9uKCkpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIGV4cHJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpbnQgaW5pdGlh
bEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CisgICAgICAgIGludCBpbml0aWFsQXNz
aWdubWVudHMgPSBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKICAgICAgICAgVHJlZUV4
cHJlc3Npb24gY3VycmVudCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAg
ICBmYWlsSWZGYWxzZShjdXJyZW50LCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24iKTsKICAgICAg
ICAgCi0gICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0
YWNrRGVwdGgsIGN1cnJlbnQsIGV4cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgbGFz
dFRva2VuRW5kUG9zaXRpb24oKSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENv
dW50KTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5k
U3RhY2tEZXB0aCwgY3VycmVudCwgZXhwclN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpLCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0
ZS5hc3NpZ25tZW50Q291bnQpOwogICAgICAgICBpbnQgcHJlY2VkZW5jZSA9IGlzQmluYXJ5T3Bl
cmF0b3IobV90b2tlbi5tX3R5cGUpOwogICAgICAgICBpZiAoIXByZWNlZGVuY2UpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAg
ICAgIG1fbm9uTEhTQ291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQrKzsKICAg
ICAgICAgaW50IG9wZXJhdG9yVG9rZW4gPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgbmV4dChU
cmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgICAgIApAQCAtMzM0MiwxMCArMzMz
NiwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRlcmFsKFRyZWVCdWls
ZGVyJiBjb250ZXh0KQogewotICAgIGF1dG8gc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7
CisgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgIGNvbnN1
bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJSQUNFLCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5n
cywgIkV4cGVjdGVkIG9wZW5pbmcgJ3snIGF0IHRoZSBzdGFydCBvZiBhbiBvYmplY3QgbGl0ZXJh
bCIpOwogCi0gICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICBpbnQg
b2xkTm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogCiAgICAgSlNUb2tl
bkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7ICAgIAogICAgIGlmIChtYXRjaChD
TE9TRUJSQUNFKSkgewpAQCAtMzM5MCw3ICszMzg0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAg
IGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDRSwgIn0iLCAiZW5kIiwgIm9iamVjdCBs
aXRlcmFsIik7CiAgICAgCi0gICAgbV9ub25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OworICAg
IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBvbGROb25MSFNDb3VudDsKICAgICAKICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVPYmplY3RMaXRlcmFsKGxvY2F0aW9uLCBwcm9wZXJ0eUxpc3Qp
OwogfQpAQCAtMzQwMCw3ICszMzk0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogewogICAgIGNvbnN1bWVPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgb3Bl
bmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGFuIG9iamVjdCBsaXRlcmFsIik7CiAgICAgCi0gICAg
aW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKKyAgICBpbnQgb2xkTm9uTEhTQ291
bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxv
Y2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CkBA
IC0zNDM2LDcgKzM0MzAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzCiAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgaGFuZGxlUHJvZHVjdGlv
bk9yRmFpbChDTE9TRUJSQUNFLCAifSIsICJlbmQiLCAib2JqZWN0IGxpdGVyYWwiKTsKIAotICAg
IG1fbm9uTEhTQ291bnQgPSBvbGROb25MSFNDb3VudDsKKyAgICBtX3BhcnNlclN0YXRlLm5vbkxI
U0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CiAKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVPYmpl
Y3RMaXRlcmFsKGxvY2F0aW9uLCBwcm9wZXJ0eUxpc3QpOwogfQpAQCAtMzQ0Niw3ICszNDQwLDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogewogICAgIGNvbnN1
bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJSQUNLRVQsIFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJp
bmdzLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAnWycgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBhcnJh
eSBsaXRlcmFsIik7CiAgICAgCi0gICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3Vu
dDsKKyAgICBpbnQgb2xkTm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50Owog
ICAgIAogICAgIGludCBlbGlzaW9ucyA9IDA7CiAgICAgd2hpbGUgKG1hdGNoKENPTU1BKSkgewpA
QCAtMzUxMCw3ICszNTA0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgICAgICBzZW1hbnRpY0ZhaWwoIlRoZSAnLi4uJyBvcGVyYXRvciBzaG91bGQgY29t
ZSBiZWZvcmUgYSB0YXJnZXQgZXhwcmVzc2lvbiIpOwogICAgIH0KICAgICAKLSAgICBtX25vbkxI
U0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CisgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9
IG9sZE5vbkxIU0NvdW50OwogICAgIAogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFycmF5KGxv
Y2F0aW9uLCBlbGVtZW50TGlzdCk7CiB9CkBAIC0zNjEyLDkgKzM2MDYsOSBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHJldHVybiBwYXJzZUFycmF5
TGl0ZXJhbChjb250ZXh0KTsKICAgICBjYXNlIE9QRU5QQVJFTjogewogICAgICAgICBuZXh0KCk7
Ci0gICAgICAgIGludCBvbGROb25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAgICAgIGlu
dCBvbGROb25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIHJlc3VsdCA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAg
bV9ub25MSFNDb3VudCA9IG9sZE5vbkxIU0NvdW50OworICAgICAgICBtX3BhcnNlclN0YXRlLm5v
bkxIU0NvdW50ID0gb2xkTm9uTEhTQ291bnQ7CiAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZh
aWwoQ0xPU0VQQVJFTiwgIikiLCAiZW5kIiwgImNvbXBvdW5kIGV4cHJlc3Npb24iKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNjMwLDcgKzM2MjQsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGN1cnJl
bnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9
PSAqaWRlbnQpOwotICAgICAgICBtX2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CisgICAgICAgIG1f
cGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgPSBpZGVudDsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlUmVzb2x2ZShsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0KTsKICAgICB9CiAgICAgY2Fz
ZSBTVFJJTkc6IHsKQEAgLTM3OTcsMjEgKzM3OTEsMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsK
ICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgICAgICBjYXNlIE9QRU5CUkFD
S0VUOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAg
ICAgICAgIG1fcGFyc2VyU3RhdGUubm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBt
X25vbkxIU0NvdW50OwotICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNz
aWdubWVudENvdW50OworICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9wYXJzZXJTdGF0
ZS5ub25MSFNDb3VudDsKKyAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX3Bh
cnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHBy
b3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFs
c2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAg
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2Us
IHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJl
c3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKKyAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2UsIHBy
b3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291
bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsK
ICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJl
bmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKLSAgICAgICAgICAgIG1fbm9uTEhTQ291bnQg
PSBub25MSFNDb3VudDsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBu
b25MSFNDb3VudDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
T1BFTlBBUkVOOiB7Ci0gICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsK
LSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgICAg
IGludCBub25MSFNDb3VudCA9IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQ7CiAgICAgICAgICAg
ICBpZiAobmV3Q291bnQpIHsKICAgICAgICAgICAgICAgICBuZXdDb3VudC0tOwogICAgICAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwpAQCAtMzgyNiwxMSArMzgyMCwxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblNjb3BlKCkt
PnNldEhhc0RpcmVjdFN1cGVyKCk7CiAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OworICAgICAg
ICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET1Q6IHsKLSAgICAgICAgICAgIG1f
bm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOworICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBl
eHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgIG5leHRF
eHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxk
ZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAgICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5ULCAi
RXhwZWN0ZWQgYSBwcm9wZXJ0eSBuYW1lIGFmdGVyICcuJyIpOwpAQCAtMzg0MiwxMSArMzgzNiwx
MSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGNh
c2UgVEVNUExBVEU6IHsKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBl
ciwgIkNhbm5vdCB1c2Ugc3VwZXIgYXMgdGFnIGZvciB0YWdnZWQgdGVtcGxhdGVzIik7CiAgICAg
ICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRp
b24oKTsKLSAgICAgICAgICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7CisgICAg
ICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50OwogICAg
ICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCB0ZW1wbGF0ZUxp
dGVyYWwgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbChjb250ZXh0LCBMZXhlclR5cGU6OlJhd1N0cmlu
Z3NCdWlsZE1vZGU6OkJ1aWxkUmF3U3RyaW5ncyk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZSh0
ZW1wbGF0ZUxpdGVyYWwsICJDYW5ub3QgcGFyc2UgdGVtcGxhdGUgbGl0ZXJhbCIpOwogICAgICAg
ICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlVGFnZ2VkVGVtcGxhdGUobG9jYXRpb24sIGJhc2Us
IHRlbXBsYXRlTGl0ZXJhbCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3Vu
dDsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTM5MzYsMTAgKzM5MzAs
MTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGxhc3RPcGVyYXRvciA9IG1fdG9rZW4ubV90eXBlOwot
ICAgICAgICBtX25vbkxIU0NvdW50Kys7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubm9uTEhTQ291
bnQrKzsKICAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwg
bV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwot
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJT
dGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgfQogICAgIEpTVGV4dFBvc2l0
aW9uIHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgIEFTU0VSVChzdWJF
eHByU3RhcnQub2Zmc2V0ID49IHN1YkV4cHJTdGFydC5saW5lU3RhcnRPZmZzZXQpOwpAQCAtMzk1
MywyNiArMzk0NywyNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IGZhbHNlOwogICAgIGlmIChzdHJpY3RNb2Rl
KCkgJiYgIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewogICAgICAgICBpZiAoY29udGV4dC5p
c1Jlc29sdmUoZXhwcikpCi0gICAgICAgICAgICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX2xhc3RJ
ZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fbGFzdElkZW50aWZp
ZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOworICAgICAgICAgICAgaXNFdmFs
T3JBcmd1bWVudHMgPSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsIHx8ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKICAgICB9Ci0gICAgZmFpbElmVHJ1ZUlmU3RyaWN0
KGlzRXZhbE9yQXJndW1lbnRzICYmIG1vZGlmaWVzRXhwciwgIkNhbm5vdCBtb2RpZnkgJyIsIG1f
bGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICBmYWlsSWZU
cnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMgJiYgbW9kaWZpZXNFeHByLCAiQ2Fubm90IG1v
ZGlmeSAnIiwgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBpbiBzdHJp
Y3QgbW9kZSIpOwogICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKICAgICBjYXNlIFBMVVNQ
TFVTOgotICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgbV9u
b25MSFNDb3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLm5vblRyaXZpYWxFeHByZXNzaW9u
Q291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCsrOwogICAgICAgICBl
eHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMs
IHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgdG9rZW5FbmRQb3NpdGlvbigp
KTsKLSAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKLSAgICAgICAgZmFpbElmVHJ1ZUlmU3Ry
aWN0KGlzRXZhbE9yQXJndW1lbnRzLCAiQ2Fubm90IG1vZGlmeSAnIiwgbV9sYXN0SWRlbnRpZmll
ci0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBtX3BhcnNlclN0YXRlLmFz
c2lnbm1lbnRDb3VudCsrOworICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1
bWVudHMsICJDYW5ub3QgbW9kaWZ5ICciLCBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLT5p
bXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShy
ZXF1aXJlc0xFeHByLCAiVGhlICIsIG9wZXJhdG9yU3RyaW5nKGZhbHNlLCBsYXN0T3BlcmF0b3Ip
LCAiIG9wZXJhdG9yIHJlcXVpcmVzIGEgcmVmZXJlbmNlIGV4cHJlc3Npb24iKTsKICAgICAgICAg
bGFzdE9wZXJhdG9yID0gUExVU1BMVVM7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBNSU5VU01JTlVTOgotICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgbV9ub25MSFNDb3VudCsrOworICAgICAgICBtX3BhcnNlclN0YXRlLm5v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5ub25MSFND
b3VudCsrOwogICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24s
IGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
LCB0b2tlbkVuZFBvc2l0aW9uKCkpOwotICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwotICAg
ICAgICBmYWlsSWZUcnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9sYXN0SWRl
bnRpZmllci0+aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsK
KyAgICAgICAgbV9wYXJzZXJTdGF0ZS5hc3NpZ25tZW50Q291bnQrKzsKKyAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzLCAiJyIsIG1fcGFyc2VyU3RhdGUubGFzdElk
ZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7
CiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShyZXF1aXJlc0xFeHByLCAiVGhlICIsIG9wZXJh
dG9yU3RyaW5nKGZhbHNlLCBsYXN0T3BlcmF0b3IpLCAiIG9wZXJhdG9yIHJlcXVpcmVzIGEgcmVm
ZXJlbmNlIGV4cHJlc3Npb24iKTsKICAgICAgICAgbGFzdE9wZXJhdG9yID0gUExVU1BMVVM7CiAg
ICAgICAgIG5leHQoKTsKQEAgLTQwMDUsMTIgKzM5OTksMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBjYXNlIFBMVVNQTFVTOgogICAgICAgICBj
YXNlIEFVVE9QTFVTUExVUzoKICAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhO
b2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xh
c3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwotICAgICAg
ICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKKyAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNz
aWdubWVudENvdW50Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNSU5VU01J
TlVTOgogICAgICAgICBjYXNlIEFVVE9NSU5VU01JTlVTOgogICAgICAgICAgICAgZXhwciA9IGNv
bnRleHQubWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgY29udGV4
dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0
ICsgMSwgZW5kKTsKLSAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CisgICAgICAgICAg
ICBtX3BhcnNlclN0YXRlLmFzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVFlQRU9GOgogICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVR5cGVP
Zk5vZGUobG9jYXRpb24sIGV4cHIpOwpAQCAtNDAxOSw3ICs0MDEzLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgZXhwciA9IGNvbnRleHQu
Y3JlYXRlVm9pZChsb2NhdGlvbiwgZXhwcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBERUxFVEVUT0tFTjoKLSAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChjb250ZXh0
LmlzUmVzb2x2ZShleHByKSwgIkNhbm5vdCBkZWxldGUgdW5xdWFsaWZpZWQgcHJvcGVydHkgJyIs
IG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAg
ICAgIGZhaWxJZlRydWVJZlN0cmljdChjb250ZXh0LmlzUmVzb2x2ZShleHByKSwgIkNhbm5vdCBk
ZWxldGUgdW5xdWFsaWZpZWQgcHJvcGVydHkgJyIsIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZp
ZXItPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgICAgIGV4cHIgPSBjb250
ZXh0Lm1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBleHByLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFj
a0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAkocmV2aXNpb24gMTk1NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2OSwyMiArMTI2OSw2OSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpOwogICAgIH0KIAotICAgIHN0
cnVjdCBTYXZlUG9pbnQgeworICAgIGVudW0gY2xhc3MgRnVuY3Rpb25QYXJzZVBoYXNlIHsgUGFy
YW1ldGVycywgQm9keSB9OworICAgIHN0cnVjdCBQYXJzZXJTdGF0ZSB7CisgICAgICAgIGludCBh
c3NpZ25tZW50Q291bnQgeyAwIH07CisgICAgICAgIGludCBub25MSFNDb3VudCB7IDAgfTsKKyAg
ICAgICAgaW50IG5vblRyaXZpYWxFeHByZXNzaW9uQ291bnQgeyAwIH07CisgICAgICAgIEZ1bmN0
aW9uUGFyc2VQaGFzZSBmdW5jdGlvblBhcnNlUGhhc2UgeyBGdW5jdGlvblBhcnNlUGhhc2U6OkJv
ZHkgfTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdElkZW50aWZpZXIgeyBudWxscHRy
IH07CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGxhc3RGdW5jdGlvbk5hbWUgeyBudWxscHRy
IH07CisgICAgfTsKKworICAgIC8vIElmIHlvdSdyZSB1c2luZyB0aGlzIGRpcmVjdGx5LCB5b3Ug
cHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nCisgICAgLy8gY3JlYXRlU2F2ZVBvaW50KCkgaW5zdGVh
ZC4KKyAgICBBTFdBWVNfSU5MSU5FIFBhcnNlclN0YXRlIGludGVybmFsU2F2ZVBhcnNlclN0YXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhcnNlclN0YXRlOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCByZXN0b3JlUGFyc2VyU3RhdGUoY29uc3QgUGFyc2VyU3RhdGUmIHN0
YXRlKQorICAgIHsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZSA9IHN0YXRlOworICAgIH0KKworICAg
IHN0cnVjdCBMZXhlclN0YXRlIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0OwogICAgICAgICB1
bnNpZ25lZCBvbGRMaW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIG9sZExhc3RMaW5l
TnVtYmVyOwogICAgICAgICB1bnNpZ25lZCBvbGRMaW5lTnVtYmVyOwogICAgIH07Ci0gICAgCi0g
ICAgQUxXQVlTX0lOTElORSBTYXZlUG9pbnQgY3JlYXRlU2F2ZVBvaW50Rm9yRXJyb3IoKQorCisg
ICAgLy8gSWYgeW91J3JlIHVzaW5nIHRoaXMgZGlyZWN0bHksIHlvdSBwcm9iYWJseSBzaG91bGQg
YmUgdXNpbmcKKyAgICAvLyBjcmVhdGVTYXZlUG9pbnQoKSBpbnN0ZWFkLgorICAgIC8vIGkuZSwg
aWYgeW91IHBhcnNlIGFueSBraW5kIG9mIEFzc2lnbm1lbnRFeHByZXNzaW9uIGJldHdlZW4KKyAg
ICAvLyBzYXZpbmcvcmVzdG9yaW5nLCB5b3Ugc2hvdWxkIGRlZmluaXRlbHkgbm90IGJlIHVzaW5n
IHRoaXMgZGlyZWN0bHkuCisgICAgQUxXQVlTX0lOTElORSBMZXhlclN0YXRlIGludGVybmFsU2F2
ZUxleGVyU3RhdGUoKQogICAgIHsKLSAgICAgICAgU2F2ZVBvaW50IHJlc3VsdDsKKyAgICAgICAg
TGV4ZXJTdGF0ZSByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zdGFydE9mZnNldCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5zdGFydE9mZnNldDsKICAgICAgICAgcmVzdWx0Lm9sZExpbmVTdGFydE9mZnNl
dCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHJlc3VsdC5v
bGRMYXN0TGluZU51bWJlciA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAgICAgICAgIHJl
c3VsdC5vbGRMaW5lTnVtYmVyID0gbV9sZXhlci0+bGluZU51bWJlcigpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlTGV4ZXJT
dGF0ZShjb25zdCBMZXhlclN0YXRlJiBsZXhlclN0YXRlKQorICAgIHsKKyAgICAgICAgbV9sZXhl
ci0+c2V0T2Zmc2V0KGxleGVyU3RhdGUuc3RhcnRPZmZzZXQsIGxleGVyU3RhdGUub2xkTGluZVN0
YXJ0T2Zmc2V0KTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGlu
ZU51bWJlcihsZXhlclN0YXRlLm9sZExhc3RMaW5lTnVtYmVyKTsKKyAgICAgICAgbV9sZXhlci0+
c2V0TGluZU51bWJlcihsZXhlclN0YXRlLm9sZExpbmVOdW1iZXIpOworICAgIH0KKworICAgIHN0
cnVjdCBTYXZlUG9pbnQgeworICAgICAgICBQYXJzZXJTdGF0ZSBwYXJzZXJTdGF0ZTsKKyAgICAg
ICAgTGV4ZXJTdGF0ZSBsZXhlclN0YXRlOworICAgIH07CisgICAgCisgICAgQUxXQVlTX0lOTElO
RSBTYXZlUG9pbnQgY3JlYXRlU2F2ZVBvaW50Rm9yRXJyb3IoKQorICAgIHsKKyAgICAgICAgU2F2
ZVBvaW50IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnBhcnNlclN0YXRlID0gaW50ZXJuYWxTYXZl
UGFyc2VyU3RhdGUoKTsKKyAgICAgICAgcmVzdWx0LmxleGVyU3RhdGUgPSBpbnRlcm5hbFNhdmVM
ZXhlclN0YXRlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIEFM
V0FZU19JTkxJTkUgU2F2ZVBvaW50IGNyZWF0ZVNhdmVQb2ludCgpCiAgICAgewpAQCAtMTI5NSwx
MCArMTM0Miw4IEBAIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVTYXZl
UG9pbnRXaXRoRXJyb3IoY29uc3QgU2F2ZVBvaW50JiBzYXZlUG9pbnQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKICAgICB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWVzc2FnZTsKLSAgICAg
ICAgbV9sZXhlci0+c2V0T2Zmc2V0KHNhdmVQb2ludC5zdGFydE9mZnNldCwgc2F2ZVBvaW50Lm9s
ZExpbmVTdGFydE9mZnNldCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgbV9sZXhlci0+c2V0
TGFzdExpbmVOdW1iZXIoc2F2ZVBvaW50Lm9sZExhc3RMaW5lTnVtYmVyKTsKLSAgICAgICAgbV9s
ZXhlci0+c2V0TGluZU51bWJlcihzYXZlUG9pbnQub2xkTGluZU51bWJlcik7CisgICAgICAgIHJl
c3RvcmVMZXhlclN0YXRlKHNhdmVQb2ludC5sZXhlclN0YXRlKTsKKyAgICAgICAgcmVzdG9yZVBh
cnNlclN0YXRlKHNhdmVQb2ludC5wYXJzZXJTdGF0ZSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIHJlc3RvcmVTYXZlUG9pbnQoY29uc3QgU2F2ZVBvaW50JiBzYXZlUG9pbnQpCkBA
IC0xMzA2LDUxICsxMzUxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnRX
aXRoRXJyb3Ioc2F2ZVBvaW50LCBTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgZW51bSBjbGFzcyBG
dW5jdGlvblBhcnNlUGhhc2UgeyBQYXJhbWV0ZXJzLCBCb2R5IH07Ci0gICAgc3RydWN0IFBhcnNl
clN0YXRlIHsKLSAgICAgICAgaW50IGFzc2lnbm1lbnRDb3VudDsKLSAgICAgICAgaW50IG5vbkxI
U0NvdW50OwotICAgICAgICBpbnQgbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudDsKLSAgICAgICAg
RnVuY3Rpb25QYXJzZVBoYXNlIGZ1bmN0aW9uUGFyc2VQaGFzZTsKLSAgICB9OwotCi0gICAgQUxX
QVlTX0lOTElORSBQYXJzZXJTdGF0ZSBzYXZlU3RhdGUoKQotICAgIHsKLSAgICAgICAgUGFyc2Vy
U3RhdGUgcmVzdWx0OwotICAgICAgICByZXN1bHQuYXNzaWdubWVudENvdW50ID0gbV9hc3NpZ25t
ZW50Q291bnQ7Ci0gICAgICAgIHJlc3VsdC5ub25MSFNDb3VudCA9IG1fbm9uTEhTQ291bnQ7Ci0g
ICAgICAgIHJlc3VsdC5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50ID0gbV9ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50OwotICAgICAgICByZXN1bHQuZnVuY3Rpb25QYXJzZVBoYXNlID0gbV9mdW5j
dGlvblBhcnNlUGhhc2U7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlc3RvcmVTdGF0ZShjb25zdCBQYXJzZXJTdGF0ZSYgc3RhdGUpCi0g
ICAgewotICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCA9IHN0YXRlLmFzc2lnbm1lbnRDb3VudDsK
LSAgICAgICAgbV9ub25MSFNDb3VudCA9IHN0YXRlLm5vbkxIU0NvdW50OwotICAgICAgICBtX25v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQgPSBzdGF0ZS5ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
OwotICAgICAgICBtX2Z1bmN0aW9uUGFyc2VQaGFzZSA9IHN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFz
ZTsKLSAgICB9Ci0KICAgICBWTSogbV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3NvdXJj
ZTsKICAgICBQYXJzZXJBcmVuYSBtX3BhcnNlckFyZW5hOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxM
ZXhlclR5cGU+IG1fbGV4ZXI7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBtX3BhcmFtZXRlcnMg
eyBudWxscHRyIH07CisKKyAgICBQYXJzZXJTdGF0ZSBtX3BhcnNlclN0YXRlOwogICAgIAogICAg
IGJvb2wgbV9oYXNTdGFja092ZXJmbG93OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAg
ICBKU1Rva2VuIG1fdG9rZW47CiAgICAgYm9vbCBtX2FsbG93c0luOwogICAgIEpTVGV4dFBvc2l0
aW9uIG1fbGFzdFRva2VuRW5kUG9zaXRpb247Ci0gICAgaW50IG1fYXNzaWdubWVudENvdW50Owot
ICAgIGludCBtX25vbkxIU0NvdW50OwogICAgIGJvb2wgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVk
OwogICAgIGludCBtX3N0YXRlbWVudERlcHRoOwotICAgIGludCBtX25vblRyaXZpYWxFeHByZXNz
aW9uQ291bnQ7Ci0gICAgRnVuY3Rpb25QYXJzZVBoYXNlIG1fZnVuY3Rpb25QYXJzZVBoYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIG1fbGFzdElkZW50aWZpZXI7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogbV9sYXN0RnVuY3Rpb25OYW1lOwogICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hl
PiBtX2Z1bmN0aW9uQ2FjaGU7CiAgICAgU291cmNlRWxlbWVudHMqIG1fc291cmNlRWxlbWVudHM7
CiAgICAgYm9vbCBtX3BhcnNpbmdCdWlsdGluOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>